跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求问 Go 设置结构体属性的样式
未分類
17 9 月 2020

求问 Go 设置结构体属性的样式

求问 Go 设置结构体属性的样式

資深大佬 : hjahgdthab750 1

实际在用的时候似乎有两种形式,但是不知道那种更优或者各自的场景

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() } 

大佬有話說 (9)

  • 主 資深大佬 : hjahgdthab750

    想到一个 a.GetX()的好处,方便测试。

  • 資深大佬 : maocat

    你已经大写了就是公共访问的,没必要再添加这冗余的方法了

  • 資深大佬 : maocat

    当然,如果你在查找修改属性的时候想做一些其他的事儿,这样做也是可以的,见仁见智

  • 資深大佬 : latteczy

    你说的第一种方法实际上是赋值操作吧,赋值操作调用 Get 方法,这也太奇怪了

  • 資深大佬 : shaopu

    用 set 跟 get 都来赋值,感觉怪吧~

  • 資深大佬 : heavyrainn

    这个代码风格让我立刻想到了 java…

  • 資深大佬 : segama201901

    语法有错。

    大写的结构体以及大写的成员名表明了此结构体以及其成员是可以在 package 外访问的。如果只是赋值的话,没必要封装函数。

    如果定义了相关的 interface,需要给结构体定义方法,那么定义方法
    func (a A) xxx() {}
    或者
    func (a *A) xxx() {}
    的形式。这两种形式没有区别。

    如果需要使用函数,将结构体作为参数传递到函数内进行操作,那么定义函数
    func (a *A) xxx() {}
    不建议使用
    func (a A) xxx() {}
    的形式。因为 golang 中,结构体传参是值传递,会降低效率。

  • 資深大佬 : segama201901

    @segama201901 更正一下,方法的接收者是指针还是值类型还是有区别的,具体可以参考
    https://www.jb51.net/article/56832.htm
    https://www.cnblogs.com/gardenofhu/p/9115284.html?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

  • 主 資深大佬 : hjahgdthab750

    主要是有些属性的值计算比较复杂,而且不方便放在 New 方法中 @maocat @shaopu

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具