结构中的私有/公共字段......表现不同

为什么我可以这样做


package main


import "fmt"


func main() {

    c := Circle{x: 0, y: 0, r: 5}

    fmt.Println(c.r)

}


type Circle struct {

    x float64

    y float64

    r float64

}

http://play.golang.org/p/0ypcekVDV9


当我不能对包中的结构做同样的事情时?


如果我尝试访问带有小写字段的结构,则会返回编译器错误。


翻过高山走不出你
浏览 216回答 2
2回答

ITMISS

如前所述,需要导出字段才能从另一个包访问。查看规格导出的标识符可以导出标识符以允许从另一个包访问它。如果同时满足以下条件,则会导出标识符:标识符名称的第一个字符是 Unicode 大写字母(Unicode 类“Lu”);并且标识符在包块中声明或者它是字段名称或方法名称。不导出所有其他标识符。如果你想保持字段私有,你需要使用访问器(设置/获取)方法,你可以在这里阅读吸气剂Go 不提供对 getter 和 setter 的自动支持。自己提供 getter 和 setter 并没有错,而且这样做通常是合适的,但是将 Get 放在 getter 的名称中既不惯用,也没有必要。如果您有一个名为 owner(小写,未导出)的字段,则 getter 方法应称为 Owner(大写,导出),而不是 GetOwner。使用大写名称导出提供了区分字段和方法的钩子。如果需要,setter 函数可能会被称为 SetOwner。这两个名字在实践中都很好读:owner := obj.Owner() if owner != user {     obj.SetOwner(user)     }

慕码人8056858

如果结构体与main函数位于不同的包中,则您无法从该主函数访问结构体的私有字段。这就是“私人”的意思。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go