【问题标题】:why is this method definition syntax accepted in Go? [duplicate]为什么 Go 接受这种方法定义语法? [复制]
【发布时间】:2021-11-21 03:05:27
【问题描述】:

代码

package main

import "fmt"

type unimplementedGreeterServer struct {
}

func (unimplementedGreeterServer) SayHello() string {
    return "hello"
}

func main() {
    s := &unimplementedGreeterServer{}
    ret := s.SayHello()
    fmt.Println(ret)
}

结果

hello

问题: 为什么 SayHello 方法没有 unimplementedGreeterServer 点或 unimplementedGreeterServer 接收器可以运行

我认为正确的会是

func (s unimplementedGreeterServer) SayHello2() string {
    return "hello"
}

func (s *unimplementedGreeterServer) SayHello3() string {
    return "hello"
}

不是

func (unimplementedGreeterServer) SayHello() string {
    return "hello"
}

【问题讨论】:

    标签: go


    【解决方案1】:

    接收器本身是可选的。如果该方法不使用接收器,则可以省略它。声明:

    func (unimplementedGreeterServer) SayHello() string {
        return "hello"
    }
    

    只为unimplementedGreeterServer 定义一个不使用接收器的方法。它是为一个值接收者定义的,所以它是为unimplementedGreeterServer*unimplementedGreeterServer定义的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多