一.目录结构

一个Go语言项目的目录一般包含以下三个子目录

1.src 目录

放置项目和库的源文件,用于以包(package)的形式组织并存放 Go 源文件,这里的包与 src 下的每个子目录是一一对应。例如,若一个源文件被声明属于 log 包,那么它就应当保存在 src/log 目录中。 并不是说 src 目录下不能存放 Go 源文件,一般在测试或演示的时候也可以把 Go 源文件直接放在 src 目录下,但是这么做的话就只能声明该源文件属于 main 包了。正常开发中还是建议大家把 Go 源文件放入特定的目录中。 包是Go语言管理代码的重要机制,其作用类似于Java中的 package 和 C/C++ 的头文件。
Go 源文件中第一段有效代码必须是package <包名> 的形式,如 package hello。
另外需要注意的是,Go语言会把通过go get 命令获取到的库源文件下载到 src 目录下对应的文件夹当中

2.pkg 目录

放置编译后生成的包/库的归档文件,用于存放通过 go install 命令安装某个包后的归档文件。归档文件是指那些名称以“.a”结尾的文件。 该目录与 GOROOT 目录(也就是Go语言的安装目录)下的 pkg 目录功能类似,区别在于这里的 pkg 目录专门用来存放项目代码的归档文件。 编译和安装项目代码的过程一般会以代码包为单位进行,比如 log 包被编译安装后,将生成一个名为 log.a 的归档文件,并存放在当前项目的 pkg 目录下。

3.bin 目录

放置编译后生成的可执行文件,与 pkg 目录类似,在通过go install 命令完成安装后,保存由 Go 命令源文件生成的可执行文件。在类 Unix 操作系统下,这个可执行文件的名称与命令源文件的文件名相同。而在 Windows 操作系统下,这个可执行文件的名称则是命令源文件的文件名加 .exe 后缀。

其中
命令源文件:如果一个 Go 源文件被声明属于 main 包,并且该文件中包含 main 函数,则它就是命令源码文件。命令源文件属于程序的入口,可以通过Go语言的go run 命令运行或者通过go build 命令生成可执行文件。
库源文件:库源文件则是指存在于某个包中的普通源文件,并且库源文件中不包含 main 函数。

 


二.程序结构

下面我们以 Hello world 来作为我们第一个 go 程序作为例子

package main // 声明 main 包

import (
"fmt" // 导入 fmt 包,打印字符串是需要用到
)
func main() { // 声明 main 包
fmt.Println("hello world!")
}

 

package(创建包)

Go语言以“包”作为管理单位,每个 Go 源文件必须先声明它所属的包,所以我们会看到每个 Go 源文件的开头都是一个 package 声明

Go语言的包与文件夹是一一对应的,它具有以下几点特性:

一个目录下的同级文件属于同一个包。 包名可以与其目录名不同。

main 包是Go语言程序的入口包,一个Go语言程序必须有且仅有一个 main 包。如果一个程序没有 main 包,那么编译时将会出错,无法生成可执行文件。

 

import(导入包)

在包声明之后,是 import 语句,用于导入程序中所依赖的包,导入的包名使用双引号””包围

import "name"

代码第 4 行导入了 fmt 包,这行代码会告诉 Go 编译器,我们需要用到 fmt 包中的函数或者变量等,fmt 包是Go语言标准库为我们提供的,用于格式化输入输出的内容,类似的还有 os 包、io 包等

另外有一点需要注意,导入的包中不能含有代码中没有使用到的包,否则Go编译器会报编译错误

也可以使用一个 import 关键字导入多个包,此时需要用括号( )将包的名字包围起来,并且每个包名占用一行

import(
  "name1"
  "name2"
)

 

main 函数

代码的第 7 行创建了一个 main 函数,它是Go语言程序的入口函数,也即程序启动后运行的第一个函数。main 函数只能声明在 main 包中,不能声明在其他包中,并且,一个 main 包中也必须有且仅有一个 main 函数。

main 函数是自定义函数的一种,在Go语言中,所有函数都以关键字 func 开头的,定义格式如下所示:

func 函数名 (参数列表) (返回值列表){
函数体
}

格式说明如下:
函数名:由字母、数字、下画线_组成,其中,函数名的第一个字母不能为数字,并且,在同一个包内,函数名称不能重名。
参数列表:一个参数由参数变量和参数类型组成,例如func foo( a int, b string )。
返回值列表:可以是返回值类型列表,也可以是参数列表那样变量名与类型的组合,函数有返回值时,必须在函数体中使用 return 语句返回。
函数体:能够被重复调用的代码片段。

注意:Go语言函数的左大括号 { 必须和函数名称在同一行,否则会报错。

代码

fmt.Println("Hello World!")

的结尾,不需要使用 ; 来作为结束符,Go 编译器会自动帮我们添加,当然,在这里加上 ; 也是可以的。

 


三.基础命令

最后,在 VSCode 编辑器中通过 go run 执行一下,其中如果有提示需要安装支持包,根据提示安装即可,最终运行效果如下

 

go 基础命令结束(执行的单位是对应的包)

1.go run 快速执行 go 文件

2.go build 编译程序,生成二进制可执行文件(如 hello world.exe)

3.go isntall 安装可执行文件到 bin 目录

4.go test 执行单元测试或压力测试

5.go env 显示 go 相关的环境变量

6.go fmt 格式化源代码(需要将对应的包文件重新打开才生效)