Go 带有 go:noescape 和 go:linkname 的源码怎么编译?

想用一下这两个 annotation, 然后就写了一个样例。

目录结构:

[test]$ tree

.

├── main.go

├── pri

│   └── a.go

└── pub

└── b.go

pri/a.go:

package pri 

import (

"fmt"

)

func rua() int64 {

fmt.Println("rua in pri")

return 1

}

pub/b.go

package pub 

import (

"unsafe"

)

var _ = unsafe.Sizeof(0)

//go:noescape

//go:linkname rua test/pri.rua

func rua() int64

func Rua() int64 {

return rua()

}

main.go

package main

import (

"test/pub"

)

func main() {

println(pub.Rua())

}

然后我 go run main.go 提示编译错误

# test/pub

pub/b.go:11: missing function body for "rua"

然后我去查了一下,发现这是个 known issue,于是我就用了 workaround, 在 pub 里加了个空汇编文件。

[test]$ tree

.

├── main.go

├── pri

│   └── a.go

└── pub

├── issue15006.s

└── b.go

结果重新编译还是不行:

# command-line-arguments

test/pub.Rua: test/pri.rua: not defined

test/pub.Rua: undefined: test/pri.rua

等于说对包名还有限制或是怎么着?

回答:

只发图片不说话

以上是 Go 带有 go:noescape 和 go:linkname 的源码怎么编译? 的全部内容, 来源链接: utcz.com/p/183929.html

回到顶部