2014-01-15 27 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]'、2番目に変数として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 
} 

はまた、ループの中括弧は省略されるべきであることに注意して、新しい行に開き括弧を置くことにより++後の自動セミコロン挿入に構文エラーです。 makeスライスを作成するには長さを渡す必要があるので、とにかくappendが使用されているので、私はそれを使用しません。

10

Goには動的変数がありません。 ほとんどの言語の動的変数は、Map(Hashtable)として実装されています。

ですから、あなたが

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

やりたいだろうあなたのコードに次のマップのいずれかを持つことができ、ここで何をどのような

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