Как передать создать срез 2d массива - PullRequest
0 голосов
/ 18 сентября 2018

У меня проблемы с передачей фрагмента двухмерного массива внутри функции: это моя игровая площадка

игровая площадка Golang

package main

import (
    "fmt"
)

func main() {
    board := [2][3]string{
        {"O", "_", "O"},
        {"X", "O", "_"},
    }

    printBoard(board[:][:])
}

func printBoard(board [][]string){
    for _, line := range board {
        for _, cell := range line {
            fmt.Printf("%s", cell)
        }
        fmt.Println()
    }
}

Там написаноcannot use board[:][:] (type [][3]string) as type [][]string in argument to printBoard

Мне не удалось исправить это printBoard (board [:] [:]).

Я попытался удалить одну / обе точки с запятой внутри вызова, но тоже не сработало, Я не хочу указывать длину, если это возможно

1 Ответ

0 голосов
/ 18 сентября 2018

В go массивы имеют фиксированный размер в отличие от срезов, поэтому здесь вам нужно указать размер массива в качестве аргумента, в противном случае вы получите эту ошибку:

prog.go:13:12: cannot use board (type [2][3]string) as type [][]string in argument to printBoard

Здесь это исправлено :

package main

import (
    "fmt"
)

func main() {
    board := [2][3]string{
        {"O", "_", "O"},
        {"X", "O", "_"},
    }

    printBoard(board)
}

func printBoard(board [2][3]string){
    for _, line := range board {
        for _, cell := range line {
            fmt.Printf("%s", cell)
        }
        fmt.Println()
    }
}

Выходы

O_O
XO_

Я не уверен, почему вы решили использовать массивы, но вgo, когда это возможно, вы должны использовать слайсы вместо массивов, так как они более гибкие, более чистые и менее подвержены ошибкам.

Вот реализация вместо слайсов:

package main

import (
    "fmt"
)

func main() {
    board := [][]string{
        {"O", "_", "O"},
        {"X", "O", "_"},
    }

    printBoard(board)
}

func printBoard(board [][]string){
    for _, line := range board {
        for _, cell := range line {
            fmt.Printf("%s", cell)
        }
        fmt.Println()
    }
}

Обратите внимание, что вам не нужно менять логику, и вам больше не нужно нигде указывать размеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...