gpt4 book ai didi

function - 在另一个包中定义函数

转载 作者:IT王子 更新时间:2023-10-29 01:26:20 27 4
gpt4 key购买 nike

我正在阅读 this发布有关 time.startTimer 声明和定义的信息。

从答案来看,time.startTimer声明在src/time/sleep.go如下:

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 文件中实现的函数? sleep.gotime.go 中都没有import。 Go 是如何做到的?

谢谢

最佳答案

如果您查看 startTimer 主体上方的行,您会看到一个针对 go 编译器的特殊指令:

//go:linkname stopTimer time.stopTimer

来自compile command documentation

//go:linkname localname importpath.name

The //go:linkname directive instructs the compiler to use “importpath.name” as the object file symbol name for the variable or function declared as “localname” in the source code. Because this directive can subvert the type system and package modularity, it is only enabled in files that have imported "unsafe".

关于function - 在另一个包中定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com