小编sir*_*nga的帖子

FileServer处理程序与一些其他HTTP处理程序

我正在尝试在Go中启动一个HTTP服务器,它将使用我自己的处理程序提供我自己的数据,但同时我想使用默认的http FileServer来提供文件.

我遇到问题,使FileServer的处理程序在URL子目录中工作.

此代码无效:

package main

import (
        "fmt"
        "log"
        "net/http"
)

func main() {
        http.Handle("/files/", http.FileServer(http.Dir(".")))
        http.HandleFunc("/hello", myhandler)

        err := http.ListenAndServe(":1234", nil)
        if err != nil {
                log.Fatal("Error listening: ", err)
        }
}

func myhandler(w http.ResponseWriter, req *http.Request) {
        fmt.Fprintln(w, "Hello!")
}
Run Code Online (Sandbox Code Playgroud)

我期待在localhost:1234/files /中找到本地目录,但它返回一个404 page not found.

但是,如果我将文件服务器的处理程序地址更改为/,它可以工作:

        /* ... */
        http.Handle("/", http.FileServer(http.Dir(".")))
Run Code Online (Sandbox Code Playgroud)

但现在我的文件可以在根目录下访问和查看.

如何使其从不同于root的URL提供文件?

go

17
推荐指数
1
解决办法
7974
查看次数

Go中子字符串的字符位置

我怎样才能知道字符串中子字符串的位置,用字符(或符文)代替字节?

strings.Index(s, sub) 将以字节为单位给出位置.使用Unicode时,它与符文中的位置不匹配:http://play.golang.org/p/DnlFjPaD2j

func main() {
    s := "áéíóúÁÉÍÓÚ"
    fmt.Println(strings.Index(s, "ÍÓ"))
}
Run Code Online (Sandbox Code Playgroud)

结果:14.预期:7

当然,我可以转换s,并sub[]rune和寻找手动子切片,但有一个更好的方式来做到这一点?

与此相关,要获取n字符串的第一个字符,我正在这样做:string([]rune(s)[:n]).这是最好的方式吗?

string go rune

7
推荐指数
1
解决办法
3395
查看次数

Golang解析时间.持续时间

我想解析一下time.Duration.持续时间是"PT15M"(字符串/字节),并希望将其转换为有效time.Duration.


如果这是一time.Time件事,我会用:

t, err := time.Parse(time.RFC3339Nano, "2013-06-05T14:10:43.678Z")

但这不存在(ParseDuration只需要一个参数):

d, err := time.ParseDuration(time.RFC3339Nano, "PT15M")


我如何解析ISO 8601持续时间

time parsing duration iso8601 go

7
推荐指数
1
解决办法
9899
查看次数

删除for中的切片元素

i从切片中删除元素a,保留顺序的惯用方法似乎是:

a = append(a[:i], a[i+1:]...)

我想知道在循环中哪个是最好的方法.据我了解,不可能在以下范围内使用它:

for i := range a { // BAD
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是可以使用len(a).[编辑:这不起作用,见下面的答案]

for i := 0; i < len(a); i++ {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有比使用len或更好或更惯用的方式append

go slice

5
推荐指数
1
解决办法
829
查看次数

设置 os.Mkdir 权限

我正在尝试使用 os.Mkdir 创建具有某些权限的目录,但由于某种原因我无法使其工作。

我的测试程序是:

package main

import (
        "log"
        "os"
)

func main() {                 
    err := os.Mkdir("testdir", 0775)
    if err != nil {              
        log.Print(err)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是创建的目录默认有0755权限:

drwxr-xr-x 2 user user 4096 Jan 10 10:14 testdir
Run Code Online (Sandbox Code Playgroud)

shell 中的 chmod 工作得很好,所以我不确定为什么 Go 程序不工作。

go

5
推荐指数
1
解决办法
2851
查看次数

去程序启动几个过程

我正在玩Go以了解它的功能和语法.我已经完成了一个带有并发go函数的简单生产者 - 消费者程序,以及中间的优先缓冲区.单个生产者生成具有特定优先级的任务,并使用通道将它们发送到缓冲区.一组消费者在闲置,接收并消费它时会要求任务.中间缓冲区将一组任务存储在优先级队列缓冲区中,因此首先提供最高优先级的任务.该程序还会打印垃圾收集器活动(调用它的次数以及收集垃圾所花费的时间).

我正在使用Go 1.1在Raspberry Pi上运行它.

该软件似乎工作正常,但我发现在SO级别,htop显示有4个进程在运行,内存使用相同,CPU使用总和超过100%(Raspberry Pi只有一个核心,所以我假设它与线程/进程有关).系统负载大约是CPU的7%,我想因为OS级别的上下文切换是恒定的.GOMAXPROCS环境变量设置为1或取消设置.

你知道为什么Go使用多个操作系统进程吗?

代码可以在这里找到:http://pastebin.com/HJUq6sab

谢谢!

编辑:

它似乎htop显示了系统的轻量级过程.Go程序运行其中几个轻量级进程(它们与goroutines线程不同),因此使用htop显示多个进程,同时pstop将只显示一个进程.

go

4
推荐指数
1
解决办法
441
查看次数

Go中的透明(类似过滤器)gzip/gunzip

我正在努力将gzip Writer直接连接到gzip Reader,这样我就可以写入Writer并随时从Reader中读取.我期待读完我写的内容.我正在使用gzip,但是我也想使用这种方法和crypto/aes,我想它应该非常相似,它可以和其他读者/作者一起使用,比如jpeg,png ......

这是我最好的选择,这是行不通的,但我希望你能看出我的意思:http://play.golang.org/p/7qdUi9wwG7

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
)

func main() {
    s := []byte("Hello world!")
    fmt.Printf("%s\n", s)

    var b bytes.Buffer

    gz := gzip.NewWriter(&b)
    ungz, err := gzip.NewReader(&b)
    fmt.Println("err: ", err)

    gz.Write(s)
    gz.Flush()
    uncomp := make([]byte, 100)
    n, err2 := ungz.Read(uncomp)
    fmt.Println("err2: ", err2)
    fmt.Println("n: ", n)
    uncomp = uncomp[:n]
    fmt.Printf("%s\n", uncomp)
}
Run Code Online (Sandbox Code Playgroud)

似乎gzip.NewReader(&b)是试图立即阅读并返回EOF.

go

4
推荐指数
1
解决办法
311
查看次数

如果它具有相同的"签名",为什么你不能使用来自不同包的类型?golang

我想知道为什么函数不能使用同类型的函数?请参阅以下伪函数.

游乐场:http://play.golang.org/p/ZG1jU8H2ZJ

package main

type typex struct {
    email string
    id    string
}

type typey struct {
    email string
    id    string
}

func useType(t *typex) {
    // do something
}

func main() {
    x := &typex{
        id: "somethng",
    }
    useType(x) // works

    y := &typey{
        id: "something",
    }
    useType(y) // doesn't work ??
}
Run Code Online (Sandbox Code Playgroud)

go

4
推荐指数
2
解决办法
1858
查看次数

插入缺失值不工作GoLang

我正在尝试插入一个Int值来切片,如果它缺少那么.

我的代码:

package main

import (
    "fmt"
)

func AppendIfMissing(slice []int, i int) []int {
    for _, ele := range slice {
        if ele == i {
            fmt.Println(i)
            return slice
        }
    }
    fmt.Println("i value is ", i)
    slice = append(slice, i)
    return slice
}

func main() {
    slice1 := []int{1, 2, 3, 4}
    AppendIfMissing(slice1, 60)
    fmt.Println("slice after adding :", slice1)
}
Run Code Online (Sandbox Code Playgroud)

OutPut:

    i value is  60
    slice after adding : [1 2 3 4]
Run Code Online (Sandbox Code Playgroud)

没有附加到切片.我的代码出了什么问题?

go slice

3
推荐指数
1
解决办法
165
查看次数

Go:regexp FindAll和ReplaceAll一次通过

我正在解析一个网页以获取标签内的一些值,但我对标签不感兴趣,只对内容感兴趣.

我正在使用regexp.FindAll获取所有匹配的表达式(包括标签),然后使用ReplaceAll替换每个子表达式,删除标签.当然,运行正则表达式需要两倍的时间,我想避免它.

有没有办法同时应用这两个函数,或同等的正则表达式?

当然,我可以创建一个删除标签的功能,但在某些情况下由于可变长度标签(如)可能会更复杂,正则表达式可以解决这个问题.

我的代码的一个简单示例就在这里(它不会在操场上运行):http://play.golang.org/p/uGKjzmylSY

func main() {
    res, err := http.Get("http://www.elpais.es")
    if err != nil {
        panic(err)
    }

    body, err := ioutil.ReadAll(res.Body)
    fmt.Println("body: ", len(body), cap(body))
    res.Body.Close()
    if err != nil {
        panic(err)
    }

    r := regexp.MustCompile("<li>(.+)</li>")

    // Find all subexpressions, containing the label <li>
    out := r.FindAll(body, -1)

    for i, v := range out[:10] {
        fmt.Printf("%d: %s\n", i, v)
    }

    //Replace to remove the label.
    out2 := make([][]byte, len(out))
    for i, v := range out …
Run Code Online (Sandbox Code Playgroud)

regex go

2
推荐指数
1
解决办法
212
查看次数

WordPress 管理员没有 wp-admin 权限

我被要求检查 WordPress 安装,其中没有用户有权访问 wp-admin 目录,甚至管理员也无权访问。我尝试了在互联网上找到的所有解决方案,但均未成功:

  • 主站点加载良好,包含所有样式和文章,因此可以访问数据库。
  • 目录和文件具有正确的权限(文件为 644,目录为 755)。
  • 表前缀似乎没问题。
  • 我尝试禁用插件(重命名插件目录)并恢复默认的 .htaccess 但没有成功。
  • 即使用户看到页面说他们没有 wp-admin 页面的权限,也可以登录。登录后,我可以转到主页,我会看到上面的栏,其中包含新帖子、添加用户等命令,但如果我尝试使用其中任何一个,则会看到无权限页面。
  • 我检查了 SQL 数据库中的管理员权限,似乎没问题。
  • wp-admin/about.php 加载(不带 CSS),以便可以访问该目录。
  • 我尝试启用 WP_DEBUG 标志,但调试没有帮助。

我已经没有下一步要检查的选项了,非常欢迎任何建议。

wordpress

2
推荐指数
1
解决办法
2417
查看次数

标签 统计

go ×10

slice ×2

duration ×1

iso8601 ×1

parsing ×1

regex ×1

rune ×1

string ×1

time ×1

wordpress ×1