2016-04-25 202 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