1 回答

TA贡献1943条经验 获得超7个赞
首先,time.Now()它只是一个包级别的函数,而不是任何类型的方法。因此,调用它的正确方法看起来像smth := time.Time(),而不是smth := time.Time.Now()。
我们可以仔细看看这个函数。它在打包时间中定义,目前实现如下:
func Now() Time {
sec, nsec, mono := now()
mono -= startNano
sec += unixToInternal - minWall
if uint64(sec)>>33 != 0 {
return Time{uint64(nsec), sec + minWall, Local}
}
return Time{hasMonotonic | uint64(sec)<<nsecShift | uint64(nsec), mono, Local}
}
如您所见,它返回一个类型为 的对象time.Time。然后可以将其用于随后的.Unix()方法调用:
func (t Time) Unix() int64 {
return t.unixSec()
}
如果Unix()它是类型为接收者的真正方法time.Time。
对于问题的扩展部分,您可以使用以下技巧:
package main
import "time"
type Alpha struct {
time.Time
}
func main() {
o := time.Now()
a := Alpha { o }
n := a.Unix()
println(n)
}
Go 不提供任何继承模型。但是,它的合成能力非常强大。上面代码片段中的代码基本上创建了一个Alpha具有 type 匿名属性的新结构类型time.Time。但是,由于跳过了该属性的显式名称,我们可以time.Time直接通过父结构访问包含实例的方法。该技术称为嵌入。
- 1 回答
- 0 关注
- 165 浏览
添加回答
举报