在函数之外的golang中设置常量,就像在Python中完成它一样

时间:2017-06-02 01:04:24

标签: python go

在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。

1 个答案:

答案 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文件和声明这些变量的适当位置,我不知道。尝试不同的方式,看看有什么/不起作用,然后试着找出原因。