"fmt" "time" _ "unsafe" ) //go:linkname MockNow time.Now func MockNow() time.Time { return time.Date(2024, 6, 1, 10, 0, 0, 0, time.Local) } func main() { fmt.Printf("mockTime:%s", time.Now()) } package main import ( "fmt" "time" _ "unsafe" ) //go:linkname MockNow time.Now func MockNow() time.Time { return time.Date(2024, 6, 1, 10, 0, 0, 0, time.Local) } func main() { fmt.Printf("mockTime:%s", time.Now()) // mockTime:2024-06-01 10:00:00 +0900 JST } unsafeが必須 Goのcompiler directiveであるgo:linknameは private(internal)な変数または関数のオブジェク トシンボルを定義した別名のものと同じもののよ うにエイリアス出来るようコンパイラに指示でき ます。 型システムやモジュール性を破壊するため unsafe packageを明示的にimportする必要が あります。 この例ではパッケージ内でグローバルに標準ラ イブラリのtime.Now関数を独自のMockNow関 数を上書きします。