2016-02-13 25 views
1

我很新,我在這個網站上搜索了這個麻煩,並且找到了回答的問題,但是無法對我的案例實現這些答案。我有一個代碼:轉到:轉入錄入零地圖

func receiveWork(out <-chan Work) map[string][]ChartElement { 

    var countedData map[string][]ChartElement 

    for el := range out { 
     countedData[el.Name] = el.Data 
    } 
    fmt.Println("This is never executed !!!") 

    return countedData 
} 

這個方法以外的結構沒有問題。 Println也不執行(因爲測試恐慌在這裏)。我明白,麻煩在於將數據增加到結構中。

有一些夠程,所發送的數據通道,receiveWork方法rgabs這一切,應該做一個地圖是這樣的:

map => 
    "typeOne" => 
     [ 
     ChartElement, 
     ChartElement, 
     ChartElement, 
     ], 
    "typeTwo" => 
     [ 
     ChartElement, 
     ChartElement, 
     ChartElement, 
     ] 

如何實現這種插入以適當的方式?

+0

看起來你的渠道傳遞到'receiveWork'永遠不會關閉。您需要確保它關閉以便for循環結束。 – asadmshah

+0

最後,在主要功能中,當所有goroutines完成工作,寫入out通道完成。 – Altenrion

回答

10

The Go Programming Language Specification

Map types

一個新的,空的映射值被使用內置函數make,這 取地圖類型和一個可選的容量提示作爲參數製成:

make(map[string]int) 
make(map[string]int, 100) 

初始容量不限制其大小:地圖增長到容納 存儲在其中的項目數量,機智h是零地圖的例外。 A 零映射相當於一個空映射,除了沒有元素可以添加 。

你寫:

var countedData map[string][]ChartElement 

相反,初始化地圖,寫,

countedData := make(map[string][]ChartElement) 
+0

謝謝你這麼清楚! – Altenrion