cat test.go

package main

import "builtin"

func main() {
    return
}
go run test.go
can't find import: "builtin"

我很好奇,因为该文件存在且已正确打包。但是不能像其他软件包一样导入。
/usr/local/go/src/pkg/builtin/builtin.go

最佳答案

导入软件包时,编译器(或至少是gc编译器)将搜索已编译的软件包。

您可以在源代码中看到此代码:http://golang.org/src/cmd/gc/lex.c?#L578

特别是,它不会搜索.go文件:假定这些文件已经生成。与C++相比,这是一个很大的胜利,因为每个软件包都可以编译一次,并且依赖于它的代码可以使用已经编译的版本。

那么,为什么即使内置了“buildin”,它也没有被构建呢?好吧,这是特殊情况,在构建源文件之前先构建依赖关系的代码部分将被忽略:http://golang.org/src/cmd/go/build.go?#L558

10-08 13:05