无效的接收器类型 []T([]T 是一个未命名的类型)的解决方法是什么?

huangapple go评论77阅读模式
英文:

Invalid receiver type []T ([]T is an unnamed type) workaround?

问题

我想在[]T上定义一个方法,其中T是我定义的类型。
看起来我必须定义一个新类型来做到这一点,但这会阻止我在这个新类型上使用所有内置的切片函数(如len)。

在Go语言中,是不是只需要创建普通函数而不是方法来实现这个功能?(有点像append()可以是一个方法,但实际上并不是这样吗?)

英文:

I would like to define a method on []T, where T is a type I defined.
It looks like i have to define a new type to do this, but that stops me from using all the builtin functions for slices on this new type (such as len).

Is the go way of doing this to just make ordinary functions, rather than methods? (Kinda like how append() could be a method, but isn't?)

答案1

得分: 24

你可以定义一个切片类型:

type MySliceType []SomeType
  • 你仍然可以在 MySliceType 的值上使用 append 和切片操作。
  • 你可以在 MySliceType 上定义方法。

但是,你不能对 []SomeType 的方法进行猴子补丁。

英文:

You can define a slice type:

type MySliceType []SomeType
  • You can still use append and slicing operations on values of MySliceType.
  • You can define methods on MySliceType.

You can't, however, monkeypatch []SomeType's methods.

huangapple
  • 本文由 发表于 2014年10月23日 19:08:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/26526736.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定