- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想将我所有的模型放在一个共享的Common
库中。
所以,我创建了一个新的 repo: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 Modules 会下载它。
我是这样导入的:
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
为什么会发生这种情况,我该如何解决?
最佳答案
不允许在定义类型的包外定义方法。这给您留下了几个选择:
定义models
包中的方法。这是处理您自己的代码时最简单的方法,但当然不适用于第 3 方类型。
创建一个常规函数而不是方法 (func String(meter models.Meter) string
)。不过,这可能不那么惯用(尤其是对于 String
方法),并且也无法访问私有(private)字段(除非您在 models
包中定义函数,在在这种情况下,您可以只定义方法)。
创建嵌入原始类型的新类型。这使用起来有点麻烦,但允许您扩展现有行为。像这样:
`
package main
import (
"fmt"
"time"
)
func main() {
myTime := MyTime{time.Now()}
fmt.Println(myTime) /* behaves as time.Time */
fmt.Println(myTime.Foo()) /* also has extra methods */
}
type MyTime struct {
time.Time
}
func (m MyTime) Foo() string {
return "foo"
}
关于go - 不能在非本地类型模型上定义新方法。Meter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57110030/
如果有人能为我分解它,让我能理解它,我会非常感激。我知道它用于通过 apply 方法创建新对象。 Function.prototype.new = function () { var args
新版本的HADOOP中有一个方法。http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/FileSystem.html#conc
根据支持库变更日志和 Fragment 类文档 ( https://developer.android.com/reference/android/support/v4/app/Fragment.ht
根据支持库更改日志和 Fragment 类文档 (https://developer.android.com/reference/android/support/v4/app/Fragment.htm
执行Async BigJob() 的无限运行任务的正确方法是什么?并且可以根据要求停止 提示:我正在尝试学习 [一种] 新方法来更新我现有的策略。 我有一个简单的程序(测试程序),它有一个开始 和停止
我将解释我的想法:我使用 python 作为谷歌应用程序引擎 + js + css 主项目将存储在 src 文件夹下,如下所示:\src \app <--- 这里是 gae 的所有 python 应用
我是一名优秀的程序员,十分优秀!