Golang 索引超出范围

我正在尝试制作一个简单的 Golang 示例。该示例位于 golang 之旅的 te 36º 页面中。这是我的代码:


package main


import "code.google.com/p/go-tour/pic"

import "fmt"


func Pic(dx, dy int) [][]uint8 {

    dx8 := uint8(dx)


    s1 := make ([][] uint8, dy)

    fmt.Printf("%d\n", len(s1), cap(s1))


    for i := range s1{

        fmt.Printf("%d\n",i)

        for j := range s1 {

            fmt.Printf("%d\n",j)

            s1[i][j] = dx8    

        }

    }


    return s1

}


func main() {

    pic.Show(Pic)

}

我得到的错误是:


    256

%!(EXTRA int=256)0

0

panic: runtime error: index out of range


goroutine 1 [running]:

panic(0x18b820, 0x1040a010)

    /usr/local/go/src/runtime/panic.go:464 +0x700

main.Pic(0x100, 0x100, 0x0, 0x0, 0x0, 0x0)

    /tmp/sandbox716191956/main.go:17 +0x4e0

code.google.com/p/go-tour/pic.Show(0x1d7988, 0x104000e0)

    /go/src/code.google.com/p/go-tour/pic/pic.go:20 +0x60

main.main()

    /tmp/sandbox716191956/main.go:26 +0x20


Program exited.

我只想返回一个Show函数使用的双向切片。


慕盖茨4494581
浏览 167回答 2
2回答

qq_遁去的一_1

您需要对图片的两个维度 dy 和 dx 进行切片。例如,package mainimport "golang.org/x/tour/pic"func Pic(dx, dy int) [][]uint8 {    p := make([][]uint8, dy)    for i := range p {        p[i] = make([]uint8, dx)        for j := range p[i] {            p[i][j] = uint8(i * j)        }    }    return p}func main() {    pic.Show(Pic)}

繁星coding

您在第二个循环中以错误的大小循环的代码中的问题。你的第二个范围必须是 sieze of s1[i]nots1因为第二个循环处理内部维度。for i := range s1{    fmt.Printf("%d\n",i)    s1[i] = make ([] uint8, dy)    for j := range s1[i] {        fmt.Printf("%d\n",j)        s1[i][j] = dx8    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go