此时,我将 Go 1.11 模块用于多个存储库。现在我正在处理一个已经是 1.x 版本的问题。结合移动到 go 模块,我做了一些其他的重大更改,所以很明显是时候增加存储库的主要版本了。这意味着要使用第 2 版。
根据“go 命令”文档:
为了保持导入兼容性,go 命令要求主版本 v2 或更高版本的模块使用该主版本作为最终元素的模块路径。例如,example.com/m 的 v2.0.0 版本必须改为使用模块路径 example.com/m/v2,并且该模块中的包将使用该路径作为其导入路径前缀,如 example.com/m/v2 /子/包。以这种方式在模块路径和导入路径中包含主版本号称为“语义导入版本控制”。
这是否像更新我的go.mod文件的第一行一样简单,附加/v2到模块名称?或者我应该v2/在我的存储库中创建一个目录并将所有文件移动到那里?
在调试处理time.Time值的程序时,我需要能够打印值并使它们有意义。在Delve中,如果我打印类型的变量,time.Time它将打印对象的内部结构,并且不允许我time.Time在对象上运行方法。
我如何使这种结构的意义和它翻译成我的东西会被打印正常的理解Unix(),UnixNano()或String()功能。
例如:
$ dlv test
(dlv) b calendar.go:200
(dlv) p appt
time.Time {
wall: 0,
ext: 63673770600,
loc: *time.Location {
name: "Local",
zone: []time.zone len: 4, cap: 4, [
(*time.zone)(0xc0000a8100),
],
tx: []time.zoneTrans len: 235, cap: 235, [
(*time.zoneTrans)(0xc0000bb000),
...+171 more
],
cacheStart: 1520751600,
cacheEnd: 1541311200,
cacheZone: *(*time.zone)(0xc0000a8100),},}
Run Code Online (Sandbox Code Playgroud)
或在值列表的情况下:
(dlv) p dates
[]time.Time len: 2, cap: 2, [
{
wall: 0,
ext: 63673689600,
loc: *(*time.Location)(0xc00008e9c0),},
{
wall: …Run Code Online (Sandbox Code Playgroud) 在kubectl/run.goKubernetes代码中,该Generate函数具有以下两种类型的结果列表:
runtime.Object, error
Run Code Online (Sandbox Code Playgroud)
该函数的最后一行是:
return &deployment, nil
Run Code Online (Sandbox Code Playgroud)
runtime 进口:
k8s.io/apimachinery/pkg/runtime
Run Code Online (Sandbox Code Playgroud)
我runtime通过go get在该import语句上运行而得到,对象在中定义interfaces.go:
type Object interface {
GetObjectKind() schema.ObjectKind
DeepCopyObject() Object
}
Run Code Online (Sandbox Code Playgroud)
(并且我在这里在网上找到了相同的代码。)
地址运算符创建了一个指针……更具体地说,Go规范指出:
对于类型T的操作数x,地址操作&x生成指向* x的类型* T的指针。
和指针的类型与其基本类型不同:
指针类型表示指向给定类型的变量的所有指针的集合,称为指针的基本类型。
如何&deployment满足runtime.Object类型?
我最好的猜测,到目前为止是deployment实现了runtime.Object接口,并映射&deployment到runtime.Object满足可转让的这条规则:
T是接口类型,并且x实现T。
在这方面,映射到结果列表类型的return语句语句等效于赋值。它是否正确?如果没有,规范或文档中是否还有其他部分对此进行了说明?