小编Joh*_*yil的帖子

类似Golang变量的命名约定

我有几个案例,我有相同的基础值表示为多种类型.

示例:

userIDString := r.URL.Query("id")
userID, err :=  strconv.Atoi(userIDString)
Run Code Online (Sandbox Code Playgroud)

我需要在不同的地方使用上述两个变量.

同样

recordSeparator = rune(30)
recordSeparatorString = string(30)
Run Code Online (Sandbox Code Playgroud)

我的方法是将这些变量命名为惯用吗?如果不是这种情况的理想命名约定?

PS:我不认为这个问题主要是基于意见的,我正在寻找引用流行的go项目/标准库中的命名约定的答案.

naming-conventions go

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

Golang http处理程序 - 请求所需的时间

我正在尝试设置一个计时器来计算我的服务器完成请求所需的时间,我希望计时器在响应的最后一个字节发送后停止.

我发现http服务器只会在处理函数返回后发送响应.

有没有办法在发送响应后添加回调?

或者有更好的方法来计算从请求的第一个字节到响应的最后一个字节字节发送的时间吗?

go

6
推荐指数
1
解决办法
2867
查看次数

为什么0.1 + 0.2在Google Go中获得0.3?

只要使用浮点数,0.1就不能在内存中精确表示,所以我们知道这个值通常是0.10000000000000004.

但是当使用go时加0.1和0.2.我得到0.3.

fmt.Println(0.1 + 0.2)
// Output : 0.3
Run Code Online (Sandbox Code Playgroud)

为什么0.3出来而不是0.30000000000000004?

precision go

6
推荐指数
1
解决办法
427
查看次数

如何动态地在 JSON 中包含/排除结构的字段?

我有一个 ??struct Base

type Base struct {
        Name string `json:"name,omitempty"`
        // ... other fields
}
Run Code Online (Sandbox Code Playgroud)

还有两个嵌入的结构Base

type First struct {
        Base
        // ... other fields
}

type Second struct {
        Base
        // ... other fields
}
Run Code Online (Sandbox Code Playgroud)

现在我想对结构进行编组FirstSecond但有一点不同。我想将该Name字段包含在其中,First但我不想将其包含在Second.

或者为了简化这个问题,我想动态地在其 JSON 中选择加入和退出结构的字段。

注意:Name总是有价值的,我不想改变它。

json struct go

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

Golang 中的结构体字面量

如果是 Go 中的 Struct Literals,

type Vertex struct {
    X, Y int
}

var (
    p = Vertex{1, 2}  // has type Vertex
    q = &Vertex{1, 2} // has type *Vertex
    r = Vertex{X: 1, Y: 2}
)
Run Code Online (Sandbox Code Playgroud)

p、q 和 r 的值为 {1 2} &{1 2} {1 2}

以上三个变量的初始化方法有什么区别?变量 p、q 和 r 有何不同?

struct go

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

Go:当设置GOPATH时,去获取$ GOPATH错误

运行go get命令时:

sudo go get github.com/go-sql-driver/mysql
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

包github.com/go-sql-driver/mysql:无法下载,$ GOPATH未设置.有关详细信息,请参阅:go help gopath

但是$ GOPATH已经设定好了.

跑步echo $GOPATH/Users/userxyz/Desktop/Code

跑步go env

.....

GOPATH="/Users/userxyz/Desktop/Code"

...

GOROOT="/usr/local/go"

.....
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过添加以下行来将GOPATH设置为环境变量

export GOPATH="$HOME/Desktop/Code"
export PATH=$PATH:$GOPATH/bin
Run Code Online (Sandbox Code Playgroud)

或者,对于以下文件

~/.profile (/etc/profile)
~/.bashrc
~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

macos environment-variables go osx-mavericks

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

如何理解go语言中的"defer"?

在godoc(https://blog.golang.org/defer-panic-and-recover)中,有一个例子:

  1. 延迟函数可以读取并分配给返回函数的命名返回值.

在此示例中,延迟函数在周围函数返回后递增返回值i.因此,此函数返回2:

func c() (i int) {
    defer func() { i++ }()
    return i
}
Run Code Online (Sandbox Code Playgroud)

我还写了一个小程序:

package main

import "fmt"

func b() int {
    i := 0
    for ; i < 4; i++ {
        defer func() {fmt.Println(i); i++} ()
    }
    return i
}
func main() {
  fmt.Println("result = ", b())
}
Run Code Online (Sandbox Code Playgroud)

输出是:

4
5
6
7
result =  4
Run Code Online (Sandbox Code Playgroud)

所以我很困惑,为什么第二个例子不输出8

go

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

在Sublime Text中保存goimports吗?

在Sublime Text 3中,使用插件GoSublimeGoImports安装.

goimports每次保存时我都无法自动运行文件.

这是我试过的:

我的GoSublime设置设置为:

{
    "env": {"GOPATH": "/home/nicolas/.go", "PATH": "$GOPATH/bin:$PATH" },
    //"fmt_cmd": ["goimports"]
}
Run Code Online (Sandbox Code Playgroud)

当我使用这些设置保存时,代码将被格式化,但不会添加导入.到目前为止没什么可惊讶的.

如果我按下ctrl + shift + P然后按GoImports,则会按预期添加导入.

现在我的问题是,当我取消注释前一行以进行这些设置时:

{
    "env": {"GOPATH": "/home/nicolas/.go", "PATH": "$GOPATH/bin:$PATH" },
    "fmt_cmd": ["goimports"]
}
Run Code Online (Sandbox Code Playgroud)

它不仅不添加导入,而且不再进行其他格式化.

知道我哪里错了吗?

我正在使用Linux(Ubuntu).

go sublimetext3 gofmt

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

我应该使用带有http.ListenAndServe的goroutine吗?

如果我http.ListenAndServe在用户点击URL时使用提供响应,我是否应该将该函数中的相应操作作为goroutine触发?

例如,说我正在听/:

func main() {
    http.HandleFunc("/", provideMainContent)
}

func provideMainContent(w http.ResponseWriter, r *http.Request) {
    /// Bunch of code, looks up details in databases, parses, then returns
}
Run Code Online (Sandbox Code Playgroud)

是否应该将一堆代码provideMainContent包装在一个goroutine中,这样它不会减慢事后发生的任何潜在请求?

go goroutine

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

如何在 Golang 的文本文件中捕获 fmt.Print 输出

我想将某些fmt.Print语句保存到 .txt 文件中。

我不想存储所有打印语句。我可以这样做吗?

go

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