2015-12-13 99 views
4

如何訪問以下代碼的地圖值?代碼段是自動生成的,所以我無法修改它。我試過OpType_name[OpType_UNKNOWN],但是我從golang編譯器得到錯誤。如何訪問GO中的地圖值?

type OpType int32 

const (
    OpType_UNKNOWN OpType = 0 
    OpType_CREATE OpType = 1 
    OpType_DELETE OpType = 3 
) 

var OpType_name = map[int32]string{ 
    0: "UNKNOWN", 
    1: "CREATE", 
    2: "DELETE", 
} 
var OpType_value = map[string]int32{ 
    "UNKNOWN": 0, 
    "CREATE": 1, 
    "DELETE": 2, 
} 

錯誤: cannot use int(api.OpType_UNKNOWN) (type int) as type int32 in map index

回答

6

圍棋是種非常嚴格。您的地圖全部都具有int32類型的鍵,並且您嘗試使用類型爲OpType的值訪問它們。 OpType是一個int32並不重要。

你可以投你OPTYPE爲int32,並使其工作

func main() { 
    fmt.Println(OpType_name[int32(OpType_UNKNOWN)]) 
} 

從@nos註釋是一個很好的路要走,它可能是你在這種情況下,想要的東西。

https://play.golang.org/p/dum5GiB3zS

+4

或者,使地圖使用OPTYPE代替INT32,'圖[OPTYPE] {字符串' – nos

+1

我認爲值得做的有點吹毛求疵的:'OpType'不是'int32':它只與'int32'共享其類型值的內部表示。關鍵的一點是,「B型A」不會使「B」繼承「A」的任何方法。這對'int32'來說並不重要,它沒有方法,但是在處理自定義類型時很重要。 – kostix

+1

我的意思是,這就是Go爲什麼允許從'int32'到'OpType'類型轉換的原因(數值的內部表示是相同的),但不允許爲類型的接收器賦值'OpType'的值'int32':如果允許,接收者可能需要調用爲其類型定義的方法,但傳遞給它的值不會以其(不同)類型。 – kostix