我一直在用 Go 嘗試一些東西,但遇到了一個(gè)我無法弄清楚的問題。package mainimport "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();}當(dāng)它到達(dá)函數(shù) useSliceStruct 時(shí),代碼在第一次調(diào)用 AllocateSlice() 時(shí)失敗,并出現(xiàn)索引超出范圍錯(cuò)誤。據(jù)我所知,這兩種方法的代碼做了相同的事情。那么我錯(cuò)過了什么?
GoLang:在函數(shù)中分配切片導(dǎo)致索引超出范圍
慕工程0101907
2021-06-26 11:17:40