..
Go 调用包私有方法
Go 定义公有方法和私有方法的在于方法的首字母大小写。通常情况下,Go 不允许调用其他 package 的私有方法。当然,使用go:linkname
,调用私有方法也是可以做到的。
使用的时候有几个注意点:
- 必须import
unsafe
package - 注释方式
//go:linkname localname packagename
举个例子
import (
"fmt"
_ "runtime"
_ "unsafe"
)
//go:linkname dolockOSThread runtime.dolockOSThread
func dolockOSThread()
func main() {
dolockOSThread()
fmt.Println("Hello world")
}
如果用的是非标准库的私有方法,packagename 必须写完整的名字。比如要用 testify 的私有方法,需要写成 github.com/stretchr/testify/assert.<funcname>