2014-01-15 147 views
6

我剛接觸GO,想知道是否可以在GO中動態創建變量?GOlang:動態變量

我在下面提供了一個僞代碼來說明我的意思。我存儲新創建的變量在切片:

func method() { 
    slice := make([]type) 
    for(i=0;i<10;i++) 
    { 
    var variable+i=i; 
    slice := append(slice, variablei) 
    } 
} 

在循環結束後,切片應包含變量:變量1,變量2 ... variable9

謝謝您的幫助!

+2

什麼是什麼你試圖完成? – Arjan

+0

在這個例子中沒有理由給變量命名'variable1','variable2' ...。無論如何,變量名只在循環內部可見。循環結束後,您可以在第一個變量中引用「slice [0]」中的值,第二個中的slice [1]等等。 – nos

回答

3

否;如果在編譯時不知道它們的名字,則不能引用局部變量。

如果您需要額外的間接尋址,您可以使用指針來代替。

func function() { 
    slice := []*int{} 
    for i := 0; i < 10; i++ { 
     variable := i 
     slice = append(slice, &variable) 
    } 
    // slice now contains ten pointers to integers 
} 

還要注意的是,在括號for循環應該被省略,並且把開口支架上的新線是語法錯誤由於++後自動分號插入。 make切片需要你傳遞一個長度,因此我不使用它,因爲無論如何都使用append

10

Go沒有動態變量。 大多數語言的動態變量被實現爲Map(Hashtable)。

所以,你可以在你的代碼下面的地圖之一,將做你想做

var m1 map[string]int 
var m2 map[string]string 
var m3 map[string]interface{} 

這裏有什麼Go代碼已經做了你什麼

http://play.golang.org/p/d4aKTi1OB0

package main 

import "fmt" 


func method() []int { 
    var slice []int 
    for i := 0; i < 10; i++ { 
    m1 := map[string]int{} 
    key := fmt.Sprintf("variable%d", i) 
    m1[key] = i 
    slice = append(slice, m1[key]) 
    } 
    return slice 
} 

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