2014-01-15 13 views
6

Ich bin neu in GO und ich frage mich, ob es möglich ist, Variablen in GO dynamisch zu erstellen?GOlang: Dynamische Variablen

Ich habe einen Pseudo-Code unten zur Verfügung gestellt, um zu veranschaulichen, was ich meine. Ich bin Speichern der neu in einer Scheibe erstellten Variablen:

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

Am Ende der Schleife, sollte die Scheibe, die Variablen enthalten: variable1, variable2 ... variable9

Danke für Ihre Hilfe !!

+2

was Du versuchst es zu erreichen? – Arjan

+0

Es gibt keinen Grund, Ihre Variablen 'variable1',' variable2' ... in diesem Beispiel zu nennen. Der Variablenname ist nur innerhalb der Schleife sichtbar. Nachdem die Schleife beendet ist, haben Sie eine Schicht, in der Sie auf die Werte verweisen, die Sie mit 'slice [0]' für die erste Variable, slice [1] für die zweite usw. eingeben. – nos

Antwort

3

Nein; Sie können nicht auf lokale Variablen verweisen, wenn Sie ihre Namen zur Kompilierzeit nicht kennen.

Wenn Sie die zusätzliche Indirection benötigen, können Sie stattdessen Zeiger verwenden.

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

auch beachten, dass die Klammern in der for-Schleife sollte weggelassen werden, und in einer neuen Zeile die öffnende Klammer zu setzen ist ein Syntaxfehler durch automatische Einfügung Semikolon nach ++. make Wenn Sie ein Slice benötigen, müssen Sie eine Länge überschreiten, daher werde ich es nicht verwenden, da append sowieso verwendet wird.

10

Go hat keine dynamischen Variablen. Dynamische Variablen in den meisten Sprachen sind als Map (Hashtable) implementiert.

So können Sie eine der folgenden Karten in Ihrem Code haben, die das tun, was Sie wollen

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

hier ist Go-Code das tut, was Sie, was

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()) 
}