Go 项目工程结构
配置好工作目录后,就可以编码开发了,在这之前,我们看一下 go 的通用项目结构,这里的结构主要是源代码相应地资源文件存放目录结构。
GOPATH 目录
GOPATH
目录就是我们存储我们所编写源代码的目录。该目录下往往要有三个子目录:src、bin、pkg。
- src: 里面每一个子目录,就是一个包。包内是Go的源码文件
- pkg: 编译后生成的,包的目标文件
- bin: 生成的可执行文件。
编写第一个程序
在
HOME/go
的目录下(就是GOPATH
目录),创建一个 src 目录,然后在该目录下创建一个 hello 文件夹,在 hello 目录下创建一个文件叫 helloworld.go,文件内容如下1
2
3
4
5
6
7package main
import "fmt"
func main() {
fmt.Println("HelloWorld")
}
执行 Go 程序
执行 Go 程序有几种方式
方式一: 使用
go run
命令1
2% go run helloworld.go
HelloWorld方式二: 使用
go build
命令step1:打开终端:在任意文件路径下,运行:
1
go install hello
也可以进入项目(应用包)的路径,然后运行:
1
go install
注意,在编译生成go程序的时,go实际上会去两个地方找程序包:
GOROOT
下的 src 文件夹下,以及GOPATH
下的src文件夹下。在程序包里,自动找 main 包的 main 函数作为程序入口,然后进行编译。step2:运行go程序,在 /home/go/bin/ 下(如果之前没有bin目录则会自动创建),会发现出现了一个hello的可执行文件,用如下命令运行:
1
./hello
第一个程序的解释说明
package
Go 语言以“包”作为管理单位,每个 Go 源文件必须先声明它所属的包,所以我们会看到每个 Go 源文件的开头都是一个 package 声明,Go 语言的包与文件夹是一一对应的,它具有以下几点特性:
- 在同一个包下面的文件属于同一个工程文件,不用 import 包,可以直接使用
- 在同一个包下面的所有文件的 package 名,都是一样的
- 在同一个包下面的文件 package 名都建议设为是该目录名,但也可以不是
import
import "fmt"
告诉 Go 编译器这个程序需要使用 fmt 包的函数,fmt 包实现了格式化 IO(输入/输出)的函数
导入包可以是相对路径也可以是绝对路径,推荐使用绝对路径(起始于工程根目录)
点操作,我们有时候会看到如下的方式导入包
1
2
3import (
. "fmt"
)这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面调用的
fmt.Println("hello world")
可以省略的写成Println("hello world")
.别名操作,别名操作顾名思义就是我们可以把包命名成另一个我们用起来容易记忆的名字
1
2
3import (
f "fmt"
)别名操作的话调用包函数时前缀变成了我们的前缀,即
f.Println("hello world")
_(下划线) 操作,这个操作经常是让很多人费解的一个操作符,请看下面这个 import
1
2
3
4import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)下划线(_) 操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的
init
函数.
main
main()
是程序运行的入口