在Python中,我们可以在函数之外声明任何变量。我们可以简单地致电
a = 'a string'
或b = ['asd', 'sdf', 'dfg']
我正在学习golang并且想要做同样的事情来简单地创建一个变量并为其赋值。
我是否必须在func中执行此操作?它必须在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。
答案 0 :(得分:0)
不,您不必在函数内声明变量。但是,您不能使用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文件和声明这些变量的适当位置,我不知道。尝试不同的方式,看看有什么/不起作用,然后试着找出原因。