2014-07-21 28 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) .

相关问题