Go中的Getter和Setter约定
不遵循Getter&Setter约定
human / human.go
package humantype 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 mainfunc main() {
john := Person{Name:"john"} // Uppercase Fields are visible
fmt.Println(john)
}
遵循getter和setter约定
package humantype 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 mainfunc main() {
john := Person(name: "John") // lowercase name is not visible outside the package
}
以下约定的问题是,在提供其字段名称时无法实例化该结构。我想使用约定,但是我只能使用私有访问。
回答:
实例化结构(或对象,采用面向对象的语言)时,无论如何都不应指定私有字段的值。但是,提供可能以私有字段结尾或以完全不同的方式处理的数据是有意义的。在这种情况下,OOP保证使用构造函数,而Go约定是一种提供名为New
[YourStructure]的功能。
func NewPerson(name string) Person { return Person{name: name}
}
In this trivial example, the name is simply copied to the private field, but
in a more complex example, other operations could take place (e.g. checking
that the name is valid, or looking up the name and taking action depending on
the result…).
以上是 Go中的Getter和Setter约定 的全部内容, 来源链接: utcz.com/qa/420544.html