2014-07-21 7 views
1

나는과 같이지도를 만들고 다음과 같은 데이터가 포맷되도록int로지도 키에 액세스 할 수없는 이유는 무엇입니까?

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] 
} 

나는 추적의 오류 :이 오류가 이유는 무엇입니까

'맵 인덱스의 int 형으로 납입 (유형 INT64)를 사용할 수 없습니다'? 지도의 키에 어떻게 액세스합니까?

답변

5

int64에서 int로 변환하면됩니다. 같은 : 당신이 원하는 모든 문자열 중 int를 구문 분석하는 경우

checkers.board[int(num)] 

그러나, 당신은 그것에 대해 strconv.AtoI을 사용해야합니다. 그것은 (int, error)를 반환 할 것이므로 변환 할 필요가 없습니다. 또한 코드가 현재 작성된 방식은 2 자리 숫자 또는 2 자리 접두어에는 작동하지 않습니다. 이것은 의도적으로 설계된 것일 수 있습니다.

+0

나는 처음가는 프로젝트로 체커를 만들려고 노력하고 있습니다. 보드는 1-8이고 a-h는 내가이 접근법을 사용한 이유입니다. 그것이 옳은지 나는 모른다, 피드백이 끝날 때를 요청할 예정였다 :) –

3

int 반환 사용

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

.

Package strconv

func Atoi

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

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

관련 문제