1 回答

TA貢獻1943條經(jīng)驗 獲得超7個贊
首先,time.Now()它只是一個包級別的函數(shù),而不是任何類型的方法。因此,調(diào)用它的正確方法看起來像smth := time.Time(),而不是smth := time.Time.Now()。
我們可以仔細看看這個函數(shù)。它在打包時間中定義,目前實現(xiàn)如下:
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()方法調(diào)用:
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 不提供任何繼承模型。但是,它的合成能力非常強大。上面代碼片段中的代碼基本上創(chuàng)建了一個Alpha具有 type 匿名屬性的新結(jié)構(gòu)類型time.Time。但是,由于跳過了該屬性的顯式名稱,我們可以time.Time直接通過父結(jié)構(gòu)訪問包含實例的方法。該技術(shù)稱為嵌入。
- 1 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報