【问题标题】:Setting constants in golang outside of function as how it's done in Python在函数之外的 golang 中设置常量,就像它在 Python 中所做的那样
【发布时间】:2017-06-02 01:04:23
【问题描述】:

在 Python 中,我们可以在函数之外声明任何变量。我们可以简单地调用

a = 'a string'b = ['asd', 'sdf', 'dfg']

我正在学习 golang,并希望做同样的事情来简单地创建一个变量并为其赋值。

我必须在函数内部进行吗?它必须在 func main 中吗?

到目前为止我有

func main() {

  var A_LIST []string
  A_LIST = append(A_LIST, "str1", "str2")

  var B_LIST []string
  B_LIST = append(B_LIST, "str3", "str4")
}

如果我写一个 fmt.Println 可以构建,我可以打印出这两个变量

但是如果我想将它构建到一个 .so 文件中以便我的 python 脚本可以导入它,这是正确的做法吗?

编辑(更新):遵循建议并写出一些代码来解释我打算做什么

我想要几个列表来对我的标签进行分类。在 Python 中,它看起来像:

tag_category1 = ['tag1', 'tag2', 'tag3']
tag_category2 = ['tag4', 'tag5', 'tag6']

该函数将接收标签列表并对它们进行分类。

tags = ['tag1', 'tag3', 'tag6', 'tag7']
new_tags = {}
for tag in tags:
    if tag in tag_category1:
        new_tag['category1'].append(tag)
    elif tag in tag_category2:
        new_tag['category2'].append(tag)
    else:
        new_tag['others'].append(tag)
return new_tags

所以结果应该是

new_tags = {
    'category1': ['tag1', 'tag3'],
    'category2': ['tag6'],
    'others':['tag7']
}

我想在 go 中编写这个函数,并且由于这个函数最初是在另一个 python 脚本中使用的,所以我希望能够导入它。对于那个 python 脚本,我仍然无法找到我在 go 中使用的一些 util 库,所以我必须继续使用 python。

【问题讨论】:

  • Read about the init() functions。我没有在 Go 程序之外对用 Go 编码的库做过任何事情,所以我不能说它是否会工作,但在 Go 代码中看到这些函数并不少见。

标签: python go


【解决方案1】:

不,您不必在函数中声明变量。但是,您不能使用 append 因为 append 是一个非声明语句,您不能在函数之外使用它。相反,您可以使用文字声明变量,在本例中为切片文字,即:

var A_LIST = []string{"str1", "str2"}

您可以在 crypto.go 包中看到一个示例,从第 42 行开始:

var digestSizes = []uint8{
    MD4:        16,
    ... //omitted for this post
    RIPEMD160:  20,

}

看到它在playground中工作

如果您需要做的不仅仅是对值进行硬编码,那么这种方法似乎不太可行。对于更动态的东西,您将需要一个函数。这可以是 init() 函数、main() 或任何其他函数,只要您知道声明变量的时间/位置以及变量/函数的初始化顺序/调用。

关于.so 文件和声明这些变量的适当位置,我不知道。尝试不同的方法,看看哪些方法有效/无效,然后尝试找出原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2018-05-30
    • 2012-04-29
    • 2012-08-12
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多