Case A Not following the Getter & Setter convention
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)
}
Case B Following getter and setter convention
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
}
The problem with following convention is that I can't instantiate the struct while providing its field names. I'd like to use the convention but I am stuck with the private access.