几天前我开始学习 Go,在学习过程中structs我遇到了一个例子,我想创建一个联系人结构,并且邮政编码 01000 在终端上打印为 512,而不是 01000
这是代码块:
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: 01000},
}
fmt.Printf("%+v", jim)
}
Run Code Online (Sandbox Code Playgroud)
这是终端的输出:
{firstName:Jim lastName:Party contact:{email:jim.party@gmail.com zipCode:512}}%
Run Code Online (Sandbox Code Playgroud)
我使用该命令go run main.go并期望 01000 作为邮政编码,但我得到的是 512。
因为0前缀表示八进制。我们可以在Go 规范中了解这一点:
Run Code Online (Sandbox Code Playgroud)octal_lit = "0" [ "o" | "O" ] [ "_" ] octal_digits .
因此,文字字符串01000被解释为 1 * 8^3 + 0 * 8^2 + 0 * 8^1 + 0 * 8^0 = 512。
从Go 1.13开始,当您打算使用八进制时,您可以(并且可能“应该”)使用约定代替0o,以提高可读性。0也就是说,最好写成0o1000,因为这样在视觉上更清晰,更清楚八进制的意图。
在您的具体情况下,您应该将邮政编码视为字符串,而不是数字。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |