实际在用的时候似乎有两种形式,但是不知道那种更优或者各自的场景
type A { X string B string } func (a *A) SetX (error) {} func (a A) GetX (string,error) {} func NewA() { a = A{} // 第一种 a.X,err = a.GetX() // 第二种 err := SetX() }
![]() | 1 qW7bo2FbzbC0 OP 想到一个 a.GetX()的好处,方便测试。 |
![]() | 2 maocat 2020-09-15 16:08:19 +08:00 你已经大写了就是公共访问的,没必要再添加这冗余的方法了 |
![]() | 3 maocat 2020-09-15 16:11:09 +08:00 当然,如果你在查找修改属性的时候想做一些其他的事儿,这样做也是可以的,见仁见智 |
4 latteczy 2020-09-15 17:32:41 +08:00 你说的第一种方法实际上是赋值操作吧,赋值操作调用 Get 方法,这也太奇怪了 |
5 shaopu 2020-09-15 20:52:38 +08:00 用 set 跟 get 都来赋值,感觉怪吧~ |
6 heavyrainn 2020-09-16 10:21:35 +08:00 这个代码风格让我立刻想到了 java… |
7 segama201901 2020-09-16 12:10:00 +08:00 语法有错。 大写的结构体以及大写的成员名表明了此结构体以及其成员是可以在 package 外访问的。如果只是赋值的话,没必要封装函数。 如果定义了相关的 interface,需要给结构体定义方法,那么定义方法 func (a A) xxx() {} 或者 func (a *A) xxx() {} 的形式。这两种形式没有区别。 如果需要使用函数,将结构体作为参数传递到函数内进行操作,那么定义函数 func (a *A) xxx() {} 不建议使用 func (a A) xxx() {} 的形式。因为 golang 中,结构体传参是值传递,会降低效率。 |
8 segama201901 2020-09-16 12:17:56 +08:00 |
![]() | 9 qW7bo2FbzbC0 OP |