go 私有方法调用
通过 go:linkname 标签, 导出struct的私有的方法
a1/a.go
package a1
type MyStruct struct {
a string
b string
}
func (t *MyStruct) hello() string {
return t.a+t.b
}
func New(a, b string) *MyStruct {
return &MyStruct{
a: a,
b: b,
}
}
main.go
package main
import (
"fmt"
"github.com/pubgo/gotests/testmonkey/a1"
_ "unsafe"
)
//go:linkname hello github.com/pubgo/gotests/testmonkey/a1.(*MyStruct).hello
func hello(t *a1.MyStruct) string
func main() {
b := a1.New("hello", "hello")
fmt.Println(hello(b))
}
viper 私有方法调用
//go:linkname unMarshalReader github.com/spf13/viper.(*Viper).unmarshalReader
func unMarshalReader(v *viper.Viper, in io.Reader, c map[string]interface{}) error
func UnMarshal(path string) map[string]interface{} {
dt, err := ioutil.ReadFile(path)
xerror.Next().ExitF(err, path)
var c = make(map[string]interface{})
xerror.Next().ExitF(unMarshalReader(GetCfg().Viper, bytes.NewBuffer(dt), c), path)
return c
}
作者:百里求一
出处:http://www.cnblogs.com/bergus/
我的语雀: https://www.yuque.com/barry.bai
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。