猿问

添加到 golang 类型中的匿名切片

我想在切片上添加一些辅助方法。所以我创建了一个类型是 []*MyType 有没有办法添加到 MyTypes 的那部分?append 将无法识别切片。


package main


import "fmt"



type MyType struct{

    Name string

    Something string

}



type MyTypes []*MyType 


func NewMyTypes(myTypes ...*MyType)*MyTypes{

    var s MyTypes = myTypes

    return &s

}


//example of a method I want to be able to add to a slice

func(m MyTypes) Key() string{

    var result string


    for _,i := range m{

        result += i.Name + ":" 

    }


    return result

}



func main() {

    mytype1 ,mytype2 := MyType{Name:"Joe", Something: "Foo"},  MyType{Name:"PeggySue", Something: "Bar"}


    myTypes:= NewMyTypes(&mytype1,&mytype2) 


    //cant use it as a slice sadface

    //myTypes = append(myTypes,&MyType{Name:"Random", Something: "asdhf"})


    fmt.Println(myTypes.Key())

}

我不想将它包装在另一种类型中并命名参数,即使我正在这样做..因为 json 编组可能会有所不同


添加到 MyTypes 切片的方法是什么?


我真的希望能够向切片添加一个方法,以便它可以实现特定的接口而不影响编组。有没有更好的方法?


翻翻过去那场雪
浏览 212回答 1
1回答

holdtom

更新:这个答案曾经包含两种解决问题的方法:我有点笨拙的方法,DaveC的更优雅的方法。这是他更优雅的方式:package mainimport (    "fmt"    "strings")type MyType struct {    Name      string    Something string}type MyTypes []*MyTypefunc NewMyTypes(myTypes ...*MyType) MyTypes {    return myTypes}//example of a method I want to be able to add to a slicefunc (m MyTypes) Names() []string {    names := make([]string, 0, len(m))    for _, v := range m {        names = append(names, v.Name)    }    return names}func main() {    mytype1, mytype2 := MyType{Name: "Joe", Something: "Foo"}, MyType{Name: "PeggySue", Something: "Bar"}    myTypes := NewMyTypes(&mytype1, &mytype2)    myTypes = append(myTypes, &MyType{Name: "Random", Something: "asdhf"})    fmt.Println(strings.Join(myTypes.Names(), ":"))}游乐场:https : //play.golang.org/p/FxsUo1vu6L
随时随地看视频慕课网APP

相关分类

Go
我要回答