gpt4 book ai didi

go - 添加到 golang 类型中的匿名 slice

转载 作者:IT王子 更新时间:2023-10-29 01:10:34 26 4
gpt4 key购买 nike

我想添加一些附加到 slice 上的辅助方法。所以我创建了一个类型 []*MyType有什么方法可以添加到那片 MyTypes 中吗? append 将无法识别 slice 。

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 slice 的方法是什么?

我真的希望能够向 slice 添加一个方法,以便它可以实现特定的接口(interface)而不影响编码。是否有更好的方法?

谢谢

最佳答案

更新:这个答案曾经包含两种解决问题的方法:我的方法有点笨拙,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(), ":"))
}

Playground :https://play.golang.org/p/FxsUo1vu6L

关于go - 添加到 golang 类型中的匿名 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com