猿问

GoLang:在函数中分配切片导致索引超出范围

我一直在用 Go 尝试一些东西,但遇到了一个我无法弄清楚的问题。


package main


import "fmt"

import "strconv"


func writeHello(i int, ) {

        fmt.Printf("hello, world "+strconv.Itoa(i)+"\n")

}


type SliceStruct struct {

    data [][]int;

}


func (s SliceStruct) New() {

    s.data=make([][]int,10);

}


func (s SliceStruct) AllocateSlice(i int) {

    s.data[i]=make([]int,10);

}


func (s SliceStruct) setData(i int, j int, data int) {

    s.data[i][j] = data;

}


func (s SliceStruct) getData(i int, j int) int {

    return s.data[i][j]

}


func useSliceStruct(){

    sliceStruct := SliceStruct{};

    sliceStruct.New();

    for i := 0; i < 10; i++ {

        sliceStruct.AllocateSlice(i);

        for j:=0; j<10; j++ {

             sliceStruct.setData(i,j,i);

            writeHello(sliceStruct.getData(i,j));

        }

    }

}


func dontUseSliceStruct(){

    data:=make([][]int,10);

    for i := 0; i < 10; i++ {

        data[i]=make([]int,10);

        for j:=0; j<10; j++ {

            data[i][j] = i;

            writeHello(data[i][j]);

        }

    }

}


func main() {

    dontUseSliceStruct();

    useSliceStruct();

}

当它到达函数 useSliceStruct 时,代码在第一次调用 AllocateSlice() 时失败,并出现索引超出范围错误。


据我所知,这两种方法的代码做了相同的事情。那么我错过了什么?


慕工程0101907
浏览 215回答 1
1回答

慕尼黑的夜晚无繁华

DOH,刚刚解决了。我没有在函数声明中使用对结构的引用。func&nbsp;(s&nbsp;SliceStruct)本来应该func&nbsp;(s&nbsp;*SliceStruct)
随时随地看视频慕课网APP

相关分类

Go
我要回答