gpt4 book ai didi

oop - 戈朗 : Method expressions instances of Object

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:40 24 4
gpt4 key购买 nike

我正在尝试在 golang 中为构造函数构建可变参数函数,但遇到了一个有趣的问题。这个功能正在工作...

package main
import "fmt"
type person struct {
name string
}

// This is working, but a really Not how I want to do this
func personConstructor(params ...string) person {
name := "Unnamed Person" // Default name
if len(params) > 0 {
name = params[0]
}
return person{name: name}
}

func main() {
bob := personConstructor("Bob")
}

https://play.golang.org/p/dcAdHEQtYz

然而,这不是。

package main

import "fmt"

type person struct {
name string
}

// This isn't working
func (p person) constructor(params ...string) person {
name := "Unnamed Person" // Default name
if len(params) > 0 {
name = params[0]
}
return person{name: name}
}
func main() {
bob := person.constructor("Bob")
}

https://play.golang.org/p/YiTQctu-1A

知道这是为什么吗?

最佳答案

您的问题与可变参数无关。

你需要阅读和学习方法表达式:

https://golang.org/ref/spec#Method_expressions

package main

type person struct {
name string
}

func (p person) constructor(params ...string) person {
name := "Unnamed Person" // Default name
if len(params) > 0 {
name = params[0]
}
return person{name: name}
}
func main() {
// THIS WORKS
person.constructor(person{},"Bob")
}

这可以编译,但在您的情况下这样做意义不大。构造函数需要一个人接收者。不管你把它放在前面喜欢

like person{}.constructor("bob") 或之后 like person.constructor(person{},"bob") 并不重要。构造函数需要一个人接收者。构造函数方法不是“某个人命名空间的字段”,这不是 javascript。

如果你想写一个构造函数,写一个没有接收者的工厂

func NewPerson(params...string)*Person{
// code
}

这是在 Go 中执行此操作的惯用方法。

我建议您至少阅读一次规范。

关于oop - 戈朗 : Method expressions instances of Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39714772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com