1 获取命令行参数
核心说明
程序接收外部传入的命令行参数,全部以字符串类型存储。
go
Go
// 获取全部命令行参数列表
list := os.Args
// 获取参数总个数
n := len(list)
fmt.Println("参数总数 n = ", n)
2 变量作用域
2.1 局部变量 & 全局变量
- 局部变量 定义在
{}代码块内部的变量,仅当前代码块生效;程序执行到变量定义语句时分配内存,离开代码块(作用域)自动释放内存。 - 全局变量定义在所有函数外部的变量,整个包内均可访问。
2.2 不同作用域同名变量规则
go
Go
// 全局变量 a
var a byte
func main() {
// 局部变量 a,与全局同名
var a int
// 变量查找遵循就近原则,优先使用局部a
fmt.Printf("%T\n", a)
}
两条核心规则:
- 不同作用域下,允许定义名称相同的变量;
- 变量查找遵循就近原则,优先使用当前作用域内的变量。
3 Go 工程管理(GOPATH 工作区)
3.1 工作区三大目录
大型项目不能全部写在main函数内,需要按功能拆分代码,依靠 GOPATH 工作区管理:
src:存放所有源代码,Go 命令强制要求源码必须放在 src 下;pkg:编译生成的静态库文件,无需手动创建,go 工具自动生成;bin:编译生成的可执行程序,无需手动创建,go 工具自动生成。
导入包时,默认从GOPATH下的 src 目录查找对应代码。
3.2 包 package 基础
- 程序入口文件必须声明
package main; - 使用
import导入外部包,导入后必须使用,否则编译报错。
三种导入写法
- 单行导入
go
Go
import "fmt"
import "os"
- 批量括号导入(推荐)
go
Go
import (
"fmt"
"os"
)
- 特殊导入语法
go
Go
// 点导入:调用包内函数时,省略包名直接调用
import . "fmt"
// 包别名:给长包名自定义简写
import io "fmt"
// 空白导入:仅执行包内init函数,不使用包内任何标识符
import _ "fmt"
3.3 同目录 / 不同目录代码调用规则
① 同一目录(分文件编程)
- 多个源码文件放在
src下同一个文件夹; - 同目录所有文件包名必须完全一致;
- 同目录文件互相调用函数,直接写函数名,不需要加包名;
- 使用
go env查看本机 GOPATH、GOBIN 等环境变量。
② 不同目录(跨包调用)
目录结构示例:
plaintext
Go
src/
├─ main.go
└─ calc/
└─ calc.go
规则:
- 不同目录,包名必须不同;
- 跨包调用语法:
包名.函数名(); - 包外可访问的函数 / 变量,首字母必须大写导出;小写标识符仅当前包可见。
3.4 main 函数与 init 函数执行顺序
- 执行优先级:先执行所有包的 init (),再执行 main ();
- 空白导入
import _ "xxx"用途:仅触发目标包的 init 函数执行,不需要使用包内任何变量;
go
Go
import (
// 仅执行fmt包init,代码中不使用fmt任意方法
_ "fmt"
)
3.5 工程环境配置步骤
- 配置
GOPATH环境变量:值为 src 目录同级的工作区绝对路径; - 可选配置
GOBIN:自定义编译后可执行文件输出路径。