1、go build卡住不动
设置代理,在终端运行:
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
2、golang安装:
https://blog.csdn.net/qq_44830881/article/details/123457805
3、dlv安装
https://zhuanlan.zhihu.com/p/425645473
https://www.jianshu.com/p/7373042bba83
使用go install安装dlv后,运行dlv报错:
bash: dlv: command not found
解决方案:添加环境变量
export PATH=$GOPATH/bin:$PATH # 当$GOPATH为空时,填入具体的GOPATH路径
4、使用dlv exec 调试可执行文件,格式如下:
dlv exec <可执行文件名> -- <命令行参数flags> # 在命令行参数flags前加入--
5、如果 $GOBIN不为空,go install 会把可执行程序安装到$GOBIN目录下,否则把可执行程序安装到$GOPATH/bin目录下。
下面设置$GOBIN是错误的,其值是一个目录GOROOT/bin:GOPATH/bin,而不是目录GOPATH/bin或者GOROOT/bin
export GOBIN="GOROOT/bin:GOPATH/bin"
6、go version 版本不对
配置以下环境变量
export GOROOT=设置成GO的安装目录
export GOPATH=设置成特定目录
export PATH="$GOPATH/bin:$GOROOT/bin:$PATH" #PATH查找可执行文件的顺序是从左到右,所以会先从设置的$GOROOT中找到go
7、在以下 go结构体 和 json数据映射。
go结构体:
type Req struct {
Certificate *CertificateInput `json:"certificate"`
}
type CertificateInput struct {
Id int64 `json:"id"`
}
json数据:
{
"certificate": {
"id": 30
}
}
如果json数据中没有certificate字段,
json数据中没有certificate字段
{
}
则Req.Certificate为nil。
如果json数据中certificate字段为空白,即
json数据:
{
"certificate": {
}
}
则Req.Certificate不为nil,但是Req.Certificate中字段值为0,即Req.Certificate.Id 为0
8、
在go中,用range遍历列表s时, 每次局部变量v的地址相同,要想引用s中的元素,要用&s[i]
for i, v := range s
9、
在go中,访问map中不存在的key,会返回该value类型的零值。例如:
strMap := make(map[string]string)
val, existed := strMap["test"] // val为"", existed 为false
10、接口值由动态类型type和动态值value两部分构成,其零值为nil,即动态类型type和动态值value都为nil
var w io.Writer
则w = nil
使用类型断言来获取 interface 的动态值,例如
var i interface{} = "hello"
s, ok := i.(string) // 类型断言
if ok {
fmt.Println(s)
} else {
fmt.Println("i is not a string")
}