2017-06-02 30 views
1

在Python中,我們可以在函數之外聲明任何變量。我們可以簡單地調用在函數外部設置golang中的常量,如何在Python中完成

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

我學習golang,很想做同樣簡單地創建一個變量,並賦值給它。

我必須在func裏面做嗎?它必須在func主要?

到目前爲止,我

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腳本可以導入它,這是正確的事情嗎?

EDIT(UPDATE):下面的建議,寫了一些代碼來解釋我打算做

我想有幾個列表進行分類我的標籤。在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'] 
} 

我想要寫去這個功能,因爲這個功能在另一個python腳本最初使用,我希望能夠將其導入。對於那個python腳本,我仍然有問題找到我使用的一些util庫,所以我必須繼續使用python。

+0

[閱讀關於'init()'函數](https://golang.org/doc/effective_go.html#init)。我並沒有在Go程序之外使用Go編碼的庫,所以我不能說它是否會起作用,但在Go代碼中看到這些函數並不罕見。 –

回答

0

不,你不必在函數內聲明變量。雖然,你不能使用append,因爲append是一個非聲明語句,你不能在函數之外使用它。相反,您可以使用文字,在這種情況下,片文字,聲明變量,即:

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

你可以看到在crypto.go包這樣的一個例子,一開始上線42:

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

}

看到,它工作在playground

如果你需要做的,不只是硬編碼值,這種做法似乎不是v可行。對於任何更動態的東西,你都需要一個功能。這可以是一個init()函數,main()或任何其他函數,只要您知道聲明它的時間/地點的變量範圍,以及變量/函數將被初始化的順序/調用。

關於.so文件和聲明這些變量的適當位置,我不知道。嘗試不同的方法,看看有什麼不行,然後嘗試找出原因。

相關問題