Go 无法在非本地类型模型上定义新方法。Meter
我想把我所有的模型放在一个共享的Go 无法在非本地类型模型上定义新方法。Meter,go,go-modules,Go,Go Modules,我想把我所有的模型放在一个共享的Commonlib中 所以,我做了一个新的回购:gitlab.com/xxx/common 我在里面放了一个包裹:models 以下是对象的定义: type Meter struct { ID string OperationID string Type ConsoProd Unit string Timestep time.Duration Measur
Common
lib中
所以,我做了一个新的回购:gitlab.com/xxx/common
我在里面放了一个包裹:models
以下是对象的定义:
type Meter struct {
ID string
OperationID string
Type ConsoProd
Unit string
Timestep time.Duration
Measures []Measure
FetchMethod AcquisitionMethod
Metadata interface{}
}
现在,我想在外部项目中使用它,我会:
go get gitlab.com/xxx/common
Go模块将下载它
我会这样使用它:
import "gitlab.com/xxx/common/models"
//String transparent method
func (meter models.Meter) String() string {
var stringifyMeter string
stringifyMeter += "Meter " + meter.ID + " is a " + meter.Type.String() + " and compute in operation #" + meter.OperationID + "."
return stringifyMeter
}
但Goland不会解决它,当我编译时,我得到:
cannot define new methods on non-local type models.Meter
为什么会发生这种情况?我可以做些什么来修复它?不允许在定义类型的包之外定义方法。这给您留下了两个选择:
模型
包中定义方法。在处理自己的代码时,这是最简单的方法,但对于第三方类型当然不起作用func String(meter models.meter)String
)。但是,这可能不太惯用(特别是对于字符串方法),并且也不能访问私有字段(除非您在模型包中定义函数,在这种情况下,您可以只定义方法)
import ...bla/bla/Meter
type extended Meter
参考:好的!选择一是有意义的!谢谢你的帮助
import ...bla/bla/Meter
type extended Meter