代码之家  ›  专栏  ›  技术社区  ›  user1028741

指针接收器方法编译问题

  •  1
  • user1028741  · 技术社区  · 3 年前

    我定义了以下方法:

    func (o *MyObj) parse(something string) string {
        // Do stuff
    }
    

    (1) 编译得很好:

    (&MyObj{}).parse(myString)
    

    也编译:

    m := MyObj{}
    m.parse(myString)
    

    (3) 不编译:

    MyObj{}.parse(myString)
    

    我的问题:

    1. 为什么? (2) 编译?我读到了 T method set doesn't include *T method set ,因此我希望它不会编译。

    2. 鉴于 (2) 为什么不呢 编译??

    1 回复  |  直到 3 年前
        1
  •  2
  •   blackgreen VonC    3 年前

    m.parse(myString) 编译是因为(我 repeating myself ) calling 它的方法等于寻址 然后 在指针上调用方法,即。 (&m).parse(myString) :

    如果 x 可寻址且 &x m , x.m() 是的缩写 (&x).m()

    MyObj{}.parse(myString) MyObj{} 不可寻址 specs: "Address operators"

    以及 我的{} 成为一个 composite literal 两者都不是;鉴于 从例子 因为它是一个变量。