【发布时间】:2017-03-11 19:52:53
【问题描述】:
案例 A 不遵循 Getter & Setter 约定
人类/human.go
package human
type Human interface {
GetName() string
SetName(name string)
}
type Person struct {
Name string
}
func (p Person) GetName() string {
return p.Name
}
func (p *Person) SetName(name string) {
p.Name = name
}
main/main.go
package main
func main() {
john := Person{Name:"john"} // Uppercase Fields are visible
fmt.Println(john)
}
案例 B 遵循 getter 和 setter 约定
package human
type Human interface {
Name() string
SetName(name string)
}
type Person struct {
name string
}
func (p Person) Name() string {
return p.name
}
func (p *Person) SetName(name string) {
p.name = name
}
main/main.go
package main
func main() {
john := Person(name: "John") // lowercase name is not visible outside the package
}
以下约定的问题是我无法在提供其字段名称时实例化该结构。我想使用约定,但我无法使用私人访问。
【问题讨论】:
-
问问自己:私人名称有什么好处? setter 和 getter 有什么好处。然后决定。
-
好吧,很好的比喻,如果你问自己同样的问题会说什么
标签: go constructor getter-setter