2016-04-25 67 views
1

我想修改切片的切片在另一個函數,使用下面的代碼:切片使用指針切片

type DT struct { 
    name string 
    number int 
} 

func slicer(a *[]DT) { 
    tmp := *a 
    var b []DT 
    b = append(b, tmp[:1], tmp[2:]) 
    *a = b 
} 

func main() { 
    o1 := DT { 
     name: "name-1", 
     number: 1, 
    } 
    o2 := DT { 
     name: "name-2", 
     number: 2, 
    } 
    o3 := DT { 
     name: "name-3", 
     number: 3, 
    } 

    b := make([]DT, 0) 
    b = append(b, o1) 
    b = append(b, o2) 
    b = append(b, o3) 

    slicer(&b) 
    fmt.Println(b) 
} 

我要的是,第一次和切片的最後一個元素。但是,這樣做,我得到以下錯誤:

cannot use tmp[:1] (type []DT) as type DT in append 

我對Go語言比較新,所以請指導我通過這一個!

回答

5

您應該使用運算符...將切片轉換爲可變參數列表。

b = append(b, tmp[:1]...) 
b = append(b, tmp[2:]...) 
+0

請問你能解釋一下,它有什麼作用。它實際上已修復! – dvlper

+3

@dvlper:https://golang.org/doc/effective_go.html#append – JimB

+2

@dlvper https://github.com/golang/go/wiki/SliceTricks – OneOfOne