golang踩坑日记
golang踩坑日记
项目组织问题
写user项目的时候
1 | yyp@yyp-virtual-machine:~/webscanner/service/user$ go mod init user |
在整个目录下建立module
里面的结构如下:
1 | yyp@yyp-virtual-machine:~/webscanner/service/user$ tree |
在user.go
中定义的main方法,然后用了config.go
里面的全局变量和方法
user.go
的import要这样写:
1 | import "user/config" |
上面 go mod init user
指定项目目录
然后import了config包,golang和c不同,包含其他包之后不是直接用原来包的变量名字,需要在前面加上包的名字,比如默认数据库配置 DefaultDB
的map全局变量,在config里定义如下:
1 | var DefaultDB = map[string]string{ |
在main中引用要这样:config.DefaultDB["user"]
类型转换问题
golang和python一样,可以通过.(String)
进行类型转换,但是今天在写一个函数的时候:
1 | func which(Args map[string]interface{}) |
参数是一个map,然后在函数最前面取了两个参数:
1 | url = Args["FlagUrl"].(string) |
调试的时候报错了,原因是map变量Args
的键值对 FlagNetWork
的值为空,无法调用String
方法
所以需要进行判空操作,再赋值,修改如下:
1 | var ( |
网络编程问题
建立连接,使用函数 net.DialTimeout()
时,返回两个值,Conn,err
其中 Conn
如果是nil,不能直接进行其他操作,比如Close()
不然会报错喵
结构体定义问题
golang要求所有结构体成员变量的首字母需要大写,如果首字母小写的话,则该字段无法被外部包访问和解析
今天在用encoding/json
包解析json的时候,用的小写的结构体成员,然后返回的是空的json集合,原因就是json是外部包,不大写的话不行喵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 脚踏车的日志站!