2013-09-27 33 views
0

我一直想有些事情出去,我已經打了,我想不通一個問題。GoLang:切片的清分片在指數函數的結果超出範圍

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

至於我可以告訴代碼兩種方法確實idential事情。那麼我錯過了什麼?

回答

1

DOH,剛剛解決。

我沒有使用在函數聲明的結構的引用。

func (s SliceStruct) 

本來應該

func (s *SliceStruct)