血泪教训,Golang首字母大小写不是随便用的!
golang中根据首字母的大小写来确定可以访问的权限。
无论是方法名、常量、变量名还是结构体的名称
如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用
来一段毛糙的代码吧~或许全网只有我一个人会犯这种错误
func test() {
//以下是变量首字母大写
type POstHeader struct {
Code int
ClientId string
GrantType []string
}
a :=POstHeader{
Code: 0,
ClientId: "",
GrantType: nil,
}
aa, err := jsoniter.Marshal(a)
if err != nil{
fmt.Println("error: ", err)
}
os.Stdout.Write(aa)
fmt.Println()
//以下是变量首字母没有大写
type postHeader struct {
code int
clientId string
grantType []string
}
b:=postHeader{
code: 0,
clientId: "",
grantType: nil,
}
bb, err := jsoniter.Marshal(b)
if err != nil{
fmt.Println("error: ", err)
}1
os.Stdout.Write(bb)
fmt.Println()
}
输出:
第一个变量首字母大写所以能正常调用解析
第二个变量首字母没有大写,所以在json包看来这个结构体里面就是啥也没有