Go 使用过程中遇到的问题📝
介绍
在日常的开发过程中,主要使用的语言就是 Go。记录下使用过程中遇到的一些问题以及踩到的的坑。
Json 序列化,Tag
在 Go 中如果需要进行 Json 的序列化,常用到的方法有 json.Marshal。
1 |
|
对需要序列化的结构体进行操作。
1 |
|
如果需要对生成 json 的字段进行指定,那么需要使用 tag,同时需要注意tag使用时的规范。
1 |
|
因此在使用过程中发现生成的字段名称不符合预期时,可以检查对应的 tag。
Json 反序列化
与序列化时相同,在对需要反序列化的 byte slice 调用 json.Unmarshal.
1 |
|
使用时需要先声明一个变量用于存放反序列化后生成的对象。
1 |
|
然后需要调用 json.Unmarshal,传入json 数据的 byte slice, 以及指向 m 的指针。
1 |
|
⚠️特别注意的是:如果在调用时没有传入指针,而是直接传入了 m, 那么将序列化失败,m 中将不包含任何信息。
在对某个 json 反序列化之后发现没有获取到任何的数据,debug 时可以注意,是否在编码时出现typo,没有使用指针,而是直接传入了 m。
同时在反序列化的过程中,会按照以下的以下的顺序查找对应的字段:
- 是否是标签中声明的字段名
- 是否是结构体定义的字段名
- 是否是结构体定义的字段名的大小写变化后的名字,如”Foo”对应的”FOO”, “FoO”.
如果都没有符合条件的选项,那么 Unmarshal 方法将会忽略这个字段,不对他进行处理。
使用GOPROXY
在国内使用 go get 命令获取依赖包时,由于🧱🧱的原因,导致无法安装某些依赖。比如 golang.org/x/net 包。为了解决这个问题,可以通过下载 github 上的源码,并将其放在 $GOPATH/src/golang.org/x 目录下,手动编译来解决。
除了手动下载编译外,还可以通过使用代理来进行下载。推荐使用 goproxy, goproxy 是七牛云搭建的代理服务,可以快速下载所需要的第三方依赖。
使用方法:
Go 1.3 及以上版本(推荐)
执行下面的命令
1
$ go env -w GOPROXY=https://goproxy.cn,direct
其他版本可以通过设置环境变量 GOPROXY 来实现:
linux 以及 macOS
在 terminal 下执行
1 |
|
或者是
1 |
|
Windows
打开 powershell, 执行:
1
C:\> $env:GOPROXY = "https://goproxy.cn"