go访问私有函数或变量

[TOC]

参考文档

compile command - cmd/compile - Go Packages

访问私有函数

  • 代码
package main

import (
	"fmt"
	"time"
	_ "unsafe"
)

//go:linkname daysIn time.daysIn
func daysIn(m time.Month, year int) int

func main() {
	fmt.Println(daysIn(time.February, 2024))
}

  • 运行结果

    image-20220827212416803

访问私有变量

  • 代码
package main

import (
	"fmt"
	_ "unsafe"
)

//go:linkname t time.zoneSources
var t []string


func main() {
	fmt.Println(t)
}

  • 运行结果

    image-20220827212447683

总结

  1. 使用go:linkname将没有实现的函数变量链接到指定函数变量

  2. go:linkname前不能有空格

  3. 必须导入unsafe

  4. 无法访问const变量