2014-07-21 53 views
1

我創建了一個地圖,像這樣:爲什麼我不能使用int訪問map key?

board := make(map[int]map[string]string) 

我一些號碼添加到它使數據的格式如下所示。

1 : map("a", "b" ..) 

然後我通過一個位置。 「a1」,這是我撞牆的地方。

func (checkers *Checkers) setPiece(piece string, coordinates string) { 
    lett := string(coordinates[0]); 
    num, err := strconv.ParseInt(string(coordinates[1]), 0, 64) 

    if err != nil { 
     panic("Invalid coordinate format") 
    } 


    row := checkers.board[num] 
} 

我得到了如下錯誤:「不能用NUM(類型的Int64)在地圖索引類型爲int」

爲什麼會出現這個錯誤?如何訪問地圖中的密鑰?

回答

5

你只要從Int64的爲int的轉換。像這樣:

checkers.board[int(num)] 

但是,如果你想要的是解析一個int一個字符串的,你應該使用strconv.AtoI了點。它會返回(int,error),所以你不必轉換它。另外,請記住,您的代碼當前寫入的方式不適用於2位數字或2個字母的前綴。這可能是設計。

+0

我想讓跳棋成爲我的第一個去項目。董事會是1-8和a-h,這就是我採取這種做法的原因。我不知道這是否正確,完成後是否會要求反饋:) –

3

使用

num, err := strconv.Atoi(string(coordinates[1])) 

它返回一個int

Package strconv

func Atoi

func Atoi(s string) (i int, err error) 

Atoi is shorthand for ParseInt(s, 10, 0) .

相關問題