为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
翻翻过去那场雪 2021-11-08 19:22:29
我想在切片上添加一些辅助方法。所以我创建了一个类型是 []*MyType 有没有办法添加到 MyTypes 的那部分?append 将无法识别切片。package mainimport "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 slicefunc(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 切片的方法是什么?我真的希望能够向切片添加一个方法,以便它可以实现特定的接口而不影响编组。有没有更好的方法?
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

更新:这个答案曾经包含两种解决问题的方法:我有点笨拙的方法,DaveC的更优雅的方法。这是他更优雅的方式:


package main


import (

    "fmt"

    "strings"

)


type MyType struct {

    Name      string

    Something string

}


type MyTypes []*MyType


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

    return myTypes

}


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

func (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


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信