Go中的Getter和Setter约定

不遵循Getter&Setter约定

human / 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)

}


遵循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

}

以下约定的问题是,在提供其字段名称时无法实例化该结构。我想使用约定,但是我只能使用私有访问。

回答:

实例化结构(或对象,采用面向对象的语言)时,无论如何都不应指定私有字段的值。但是,提供可能以私有字段结尾或以完全不同的方式处理的数据是有意义的。在这种情况下,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

回到顶部