有一个方法字面值吗?

huangapple go评论69阅读模式
英文:

Is there a method literal?

问题

可以定义一个方法字面量吗?就像下面的代码一样,但是能够正常工作。

type Fn struct {
    sw Dialer
}

var x Fn

fn := func(x Fn) Reboot() error {
    // 方法体
}

可以将方法定义为字面量,但是在Go语言中,方法必须与结构体关联。在你的代码中,fn应该是一个方法,而不是一个变量。你可以将方法定义为结构体的字段,然后在需要的时候调用该方法。以下是一个示例:

type Fn struct {
    sw Dialer
}

func (f Fn) Reboot() error {
    // 方法体
}

func main() {
    var x Fn
    x.Reboot()
}

在上面的示例中,Reboot方法被定义为Fn结构体的方法,并在main函数中调用。

英文:

Is it possible to define a method literal? Something like the code below but working.

type Fn struct{
	sw Dialer
}
var x fn
fn := func (x Fn) Reboot() error {	}

答案1

得分: 2

不,但你可以使用一个“函数值”,这样它可以在以后被赋值。在与网络相关的包中,常见的做法是在结构体中定义一个Dial func(network, addr string) (net.Conn, error)字段,可以用自定义的拨号器(例如http.Transport)替换它。

type Fn struct {
    Reboot func() error
}

func main() {
    f := Fn{}
    f.Reboot = func() error {
        return nil
    }
    f.Reboot()
}
英文:

No, but you can use a "function value", so that it can be assigned later on. A common one in network related packages is for a struct to have a Dial func(network, addr string) (net.Conn, error) field that can be replaced with a custom dialer (e.g. http.Transport)

type Fn struct {
	Reboot func() error
}

func main() {
	f := Fn{}
	f.Reboot = func() error {
		return nil
	}
	f.Reboot()
}

huangapple
  • 本文由 发表于 2015年9月3日 08:39:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/32365288.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定