为什么 Go Programming 将任何以零开头的数字视为八进制,我该如何防止这种情况发生?

Why does Go Programming treat any number starting with zero as an octal and how can I prevent this?

package main

type contactInfo struct {
    number int
    email  string
}

type person struct {
    firstName string
    lastName  string
    contact   contactInfo
}

func main() {
    user1 := person{
        firstName: "Anthony",
        lastName:  "Martial",
        contact: contactInfo{
            number: 07065526369,
            email: "tony@gmail.com",
        },
    }
    fmt.Println(user1)
}

当我为变量“number: 07065526369”赋值时,会出现一个错误,提示“八进制文字中的无效数字‘9’”,我正试图通过制作该数字来找出防止它发生的方法以 10 为基数而不是以 8 为基数,因为我认为 Go 会自动将任何以零开头的数字视为八进制

即使 Go 1.13 introduced a change in the integer literals,您的 int 仍将被解释为八进制(其中不能包含“9”,因此会出现错误消息)

Octal integer literals: The prefix 0o or 0O indicates an octal integer literal such as 0o660.
The existing octal notation indicated by a leading 0 followed by octal digits remains valid.

任何处理 phone 数字的 Go 库都会将其存储为字符串。
而且那个数据可以比 one string.

更详细

例如dongri/phonenumber would follow the ISO 3166 COUNTRY CODES standard, with a struct like:

type ISO3166 struct {
    Alpha2             string
    Alpha3             string
    CountryCode        string
    CountryName        string
    MobileBeginWith    []string
    PhoneNumberLengths []int
}

这比 int 更安全,并提供更好的验证。