登录
首页 >  Golang >  Go问答

初始化函数字段

来源:Golang技术栈

时间:2023-04-26 11:26:51 137浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《初始化函数字段》,聊聊golang,希望可以帮助到正在努力赚钱的你。

问题内容

我在 Go 中有一个功能如下:

func MyFunction(name, address, nick string, age, value int) {
    // perform some operations
}

我想用参数(“Bob”、“New York”、“Builder”、30、1000)调用这个函数,但我想在调用函数时使用字段名称。但是,以下技术均无效(它们抛出“未解决的参考错误”):

MyFunction(name = "Bob", address = "New York", nick = "Builder", age = 30, value = 1000)

MyFunction(name : "Bob", address : "New York", nick : "Builder", age : 30, value : 1000)

应该如何正确完成?在初始化结构时使用字段名称没有问题,但对于函数,我似乎遗漏了一些东西。

正确答案

规范不允许您在调用函数时指定参数名称。您只能列出您希望作为参数传递的值。您必须为所有参数(可变参数除外)指定值,并且必须按预期顺序列出它们。

最接近你想要的东西是传递一个结构。创建一个包装当前参数的结构类型,并更改您的函数以接受该结构的值(或指向它的指针):

type Params struct {
    name, address, nick string
    age, value          int
}

func MyFunction(p Params) {
    // perform some operations
}

func main() {
    MyFunction(Params{
        name:    "Bob",
        address: "New York",
        nick:    "Builder",
        age:     30,
        value:   1000,
    })
}

然后当然你必须使用参数上的选择器来引用这些字段p,例如:

func MyFunction(p Params) {
    // perform some operations
    fmt.Printf("%s lives in %s.\n", p.name, p.address)
}

另请注意,作为额外的“增益”(或负担),“参数”(即 struct 参数的字段)变得 可选无序 :您不必为所有字段指定值,您可以列出您喜欢的任何顺序的字段。

你也可以这样称呼它:

MyFunction(Params{
    name:    "Alice",
    address: "Washington",
})

上述调用的输出(在Go Playground上尝试):

Bob lives in New York.
Alice lives in Washington.

如果您不想(或不能)更改函数以接受结构参数,那么您可以保持原样,并创建一个新的辅助函数,该函数将具有此结构参数,它会做的一切是调用原始函数,将适当的字段作为参数传递:

func MyFunction(name, address, nick string, age, value int) {
    // perform some operations
}

func MyFunction2(p Params) {
    MyFunction(p.name, p.address, p.nick, p.age, p.value)
}

然后你可以MyFunction()像这样间接调用:

MyFunction2(Params{
    name:    "Bob",
    address: "New York",
    nick:    "Builder",
    age:     30,
    value:   1000,
})

请参阅此相关问题:[Getting method parameter names in Golang](https://stackoverflow.com/questions/31377433/getting-method-parameter- names-in-golang/31377793#31377793)

今天关于《初始化函数字段》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>