我有几个案例,我有相同的基础值表示为多种类型.
示例:
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项目/标准库中的命名约定的答案.
我正在尝试设置一个计时器来计算我的服务器完成请求所需的时间,我希望计时器在响应的最后一个字节发送后停止.
我发现http服务器只会在处理函数返回后发送响应.
有没有办法在发送响应后添加回调?
或者有更好的方法来计算从请求的第一个字节到响应的最后一个字节字节发送的时间吗?
只要使用浮点数,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?
我有一个 ??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)
现在我想对结构进行编组First,Second但有一点不同。我想将该Name字段包含在其中,First但我不想将其包含在Second.
或者为了简化这个问题,我想动态地在其 JSON 中选择加入和退出结构的字段。
注意:Name值总是有价值的,我不想改变它。
如果是 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 有何不同?
运行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) 在godoc(https://blog.golang.org/defer-panic-and-recover)中,有一个例子:
- 延迟函数可以读取并分配给返回函数的命名返回值.
在此示例中,延迟函数在周围函数返回后递增返回值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?
在Sublime Text 3中,使用插件GoSublime并GoImports安装.
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).
如果我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中,这样它不会减慢事后发生的任何潜在请求?
我想将某些fmt.Print语句保存到 .txt 文件中。
我不想存储所有打印语句。我可以这样做吗?