【问题标题】:Initialize a variable over a function by reference in golang在golang中通过引用初始化函数的变量
【发布时间】:2020-04-30 15:40:28
【问题描述】:

如果我有一个将引用作为参数的函数,并且我想使用该函数来初始化一个变量,我需要在 init() 函数中执行此操作。该解决方案有效,但我闻起来并不正确。

是否有另一种方法可以使用 init() 函数为 go 中的包初始化变量?

我认为一定有更好的方法。我已经考虑过包装函数,但这使得逻辑并不好。

我准备了一个简短的例子 主包

import (
    "fmt"
)

var a string
//A use of a function is not allowed
//foo(&a)


//Need to call init
func init() {
    foo(&a)
}

func main() {
    fmt.Println(a)
}

func foo(b *string) {
    *b = "abc"
}

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

【问题讨论】:

  • 我知道这是一个玩具示例。但是我仍然觉得这里使用一个预先声明的标识符(例如make)作为函数的名称有点令人困惑。
  • 你是对的。我会改变这个问题。
  • 经过几年的 Go 编码,我认为 init() 的使用不是很习惯,应该避免使用。

标签: go


【解决方案1】:

没关系,或者你可以创建一个指针并像这样分配它:

var a = make("abc")

func main() {
    fmt.Println(*a)
}

func make(s string) *string {
    return &s
}

playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2014-09-10
    • 2021-07-08
    • 2016-09-23
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多