官方地址:http://docs.studygolang.com/doc/code.html
在Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个:
- src 包含项目的源代码文件;
- pkg 包含编译后生成的包/库文件;
- bin 包含编译后生成的可执行文件。
目录结构如下:
E:\project\go\proj
└─<src>
├─<a>
│ ├─<a1>
│ │ a1.go
│ │
│ └─<a2>
│ a2.go
│
├─<b>
│ b1.go
│ b2.go
│
└─<c>
c.go
其中,带<>的表示是目录,不带<>的表示是普通文件。
各文件代码:
a1.go:
package a1
import "fmt"
func PrintA1() {
fmt.Println("a/a1")
}
a2.go:
package a2
import "fmt"
func PrintA2() {
fmt.Println("a/a2")
}
b1.go:
package b
import "fmt"
func printB1() {
fmt.Println("b.b1")
}
b2.go:
package b
import "fmt"
func PrintB() {
printB1()
fmt.Println("b.b2")
}
c.go:
package main
import (
"a/a1"
"a/a2"
"b"
)
func main() {
a1.PrintA1()
a2.PrintA2()
b.PrintB()
}
执行如下命令:
go install a/a1
go install a/a2
go install b
go install c
可以看到,当前目录下多了以下几个文件:
E:\project\go\proj
├─<bin>
│ c.exe
│
├─<pkg>
│ └─<windows_amd64>
│ │ b.a
│ │
│ └─<a>
│ a1.a
│ a2.a
│
└─<src>
├─<a>
│ ├─<a1>
│ │ a1.go
│ │
│ └─<a2>
│ a2.go
│
├─<b>
│ b1.go
│ b2.go
│
└─<c>
c.go
其中,<bin>和<pkg>文件夹是自动生成的,a1.a、a2.a、b.a是生成的二进制包文件,c.exe就是最终的可执行文件。
运行下c.exe:
E:\project\go\proj>.\bin\c.exe
a/a1
a/a2
b.b1
b.b2
注意:package中的名称最好与目录名一样,这样在import的时候直接import目录名就好了。如果两者不一致,例如上面的b1.go、b2.go里面的package是package bbbbb,则在c.go里import的时候要import "b",然后下面的b.PrintB(),则需要改为bbbbb.PrintB()