2017-02-07 24 views
0

疑似キュー構造を作成し、内部にジョブ構造体を挿入しようとしています。私は間違って何をしていますか?構造体を含むgolang型の配列

import "fmt" 

type Job struct { 
    Type string 
    Url string 
} 

type Queue [] Job 

func main() { 
    var queue []Queue 
    job := Job{"test", "http://google.com"} 

    queue[0] = job 
    fmt.Println(queue) 
} 

上記のコードは投げている:

cannot use job (type Job) as type Queue in assignment

+2

はいえ、 '[]' VARキュー 'で[] Queue'、あなたはまだ取得しますランタイムエラーを取り除きます。 – cshu

答えて

1

を、私は、問題はここにあると思う:

var queue []Queue 

ここqueueQueueまたはJobのスライスのスライスのスライスです。最初にその要素の値をJobに割り当てることは不可能です。

試してみてください。

var queue Queue 
+0

あなたは正しいですが、今はそれが投げています:パニック:ランタイムエラー:インデックスが範囲外です。私はqueue = append(queue、job)を追加しました。ありがとうございました。 –

+0

@TheodorB、 'queue'はちょうど作成され、ゼロ要素を持たないからです。 'append'を使ってそのような要素を追加します。スライスに 'len'と' cap'関数をチェックしましたか? –

+0

まだありませんが、私は見ています。答えをもう一度ありがとう。 –

2

あなたはキューのスライスを必要としない、とあなたはインデックス空のスライスをすべきでありません。

package main 

import "fmt" 

type Job struct { 
    Type string 
    Url string 
} 

type Queue []Job 

func main() { 
    var q Queue 
    job := Job{"test", "http://google.com"} 
    q = append(q, job) 
    fmt.Println(q) 
} 
0

[]TypeNameTypeNameタイプのスライスの定義です。

var queue []QueueはタイプQueueのインスタンスのスライスである:それは言ったのと同じように

q := Queue{Job{"test", "http://google.com"}, Job{"test", "http://google.com"}} 

間違いなくあなたが望むものではありません。代わりに、それをあなたはvar queue Queueを宣言する必要があります。

var queue Queue 
q := append(queue, Job{"test", "http://google.com"}, Job{"test", "http://google.com"}) 
関連する問題