Go语言中赋值01000为何显示为512?结构体相关技术问询
Go结构体中zipCode赋值01000输出512的问题解决
问题根源
你遇到的问题是因为Go语言中以0开头的整数字面量会被解析为八进制数,01000作为八进制数转换为十进制的结果就是512,所以终端输出的zipCode是512而非你预期的01000。
解决方案
根据你的需求,有两种处理方式:
- 如果需要保留zipCode的前导零格式(比如作为邮政编码的字符串形式),应将
zipCode的类型从int改为string——整数类型无法存储前导零。 - 如果仅需要存储数值,直接去掉前导零,使用十进制数值赋值即可。
修正后的代码示例
方式1:将zipCode改为string类型
package main import "fmt" type contactInfo struct { email string zipCode string // 修改为string类型 } type person struct { firstName string lastName string contact contactInfo } func main() { jim := person{ firstName: "Jim", lastName: "Party", contact: contactInfo{email: "jim.party@gmail.com", zipCode: "01000"}, // 用字符串赋值 } fmt.Printf("%+v", jim) }
运行输出:
{firstName:Jim lastName:Party contact:{email:jim.party@gmail.com zipCode:01000}}
方式2:保留int类型,使用十进制数值
package main import "fmt" type contactInfo struct { email string zipCode int } type person struct { firstName string lastName string contact contactInfo } func main() { jim := person{ firstName: "Jim", lastName: "Party", contact: contactInfo{email: "jim.party@gmail.com", zipCode: 1000}, // 去掉前导零 } fmt.Printf("%+v", jim) }
运行输出:
{firstName:Jim lastName:Party contact:{email:jim.party@gmail.com zipCode:1000}}
内容的提问来源于stack exchange,提问作者Daniel Sogbey
相关产品推荐
相关产品推荐

