为什么我不能用int访问map键?

时间:2014-07-21 20:41:49

标签: go

我创建了一个这样的地图:

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类型'

为什么会出现此错误?如何访问地图中的密钥?

2 个答案:

答案 0 :(得分:5)

您只需要将int64转换为int。像这样:

checkers.board[int(num)]

但是,如果您只想从字符串中解析int,则应使用strconv.AtoI。它将返回(int,error),因此您不必转换它。另外,请记住,当前编写代码的方式不适用于2位数字或2个字母的前缀。这可能是设计上的。

答案 1 :(得分:3)

使用

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

返回int

  

Package strconv

     

func Atoi

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

AtoiParseInt(s, 10, 0)的缩写。