我正在阅读有关time.startTimer声明和定义的example帖子。
从答案中,在src/time/sleep.go
中声明了time.startTimer
如下:
func startTimer(*runtimeTimer)
其定义在src/runtime/time.go
如下:
func startTimer(t *timer) {
if raceenabled {
racerelease(unsafe.Pointer(t))
}
addtimer(t)
}
因此,您似乎可以在一个.go文件中声明一个函数,并在另一个.go文件中实现它。我尝试了相同的方法,例如,在a.go中声明一个函数并在b.go中实现它,但它在go run a.go
时总是失败。这是正确的方法吗?如何声明在另一个.go文件中实现的函数? import
或sleep.go
中没有time.go
。 Go怎么做?
由于
答案 0 :(得分:4)
如果查看startTimer
正文上方的行,您将看到go编译器的特殊指令:
//go:linkname stopTimer time.stopTimer
来自compile command documentation
//go:linkname localname importpath.name
// go:linkname指令指示编译器使用“importpath.name”作为源代码中声明为“localname”的变量或函数的目标文件符号名称。由于此指令可以破坏类型系统和包模块化,因此只能在已导入"不安全"的文件中启用它。