为了账号安全,请及时绑定邮箱和手机立即绑定

如何传递一个创建二维数组的切片

如何传递一个创建二维数组的切片

Go
慕莱坞森 2023-04-04 17:06:02
我无法在 func 中传递一段二维字符串数组:这是我的游乐场Golang游乐场package mainimport (    "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 回答

?
MM们

TA贡献1886条经验 获得超2个赞

在 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_

我不确定您为什么决定使用数组,但总的来说,只要有可能,您应该更喜欢使用切片而不是数组,因为它们更灵活、更简洁且更不容易出错。


这是使用切片的实现:


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()

    }

}

请注意,您不需要更改逻辑,也不需要再在任何地方指定大小。


查看完整回答
反对 回复 2023-04-04
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信