Go 工程管理与作用域

Go 工程管理与作用域 1 获取命令行参数核心说明程序接收外部传入的命令行参数全部以字符串类型存储。go// 获取全部命令行参数列表 list : os.Args // 获取参数总个数 n : len(list) fmt.Println(参数总数 n , n)2 变量作用域2.1 局部变量 全局变量局部变量定义在{}代码块内部的变量仅当前代码块生效程序执行到变量定义语句时分配内存离开代码块作用域自动释放内存。全局变量定义在所有函数外部的变量整个包内均可访问。2.2 不同作用域同名变量规则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导入外部包导入后必须使用否则编译报错。三种导入写法单行导入goimport fmt import os批量括号导入推荐goimport ( fmt os )特殊导入语法go// 点导入调用包内函数时省略包名直接调用 import . fmt // 包别名给长包名自定义简写 import io fmt // 空白导入仅执行包内init函数不使用包内任何标识符 import _ fmt3.3 同目录 / 不同目录代码调用规则① 同一目录分文件编程多个源码文件放在src下同一个文件夹同目录所有文件包名必须完全一致同目录文件互相调用函数直接写函数名不需要加包名使用go env查看本机 GOPATH、GOBIN 等环境变量。② 不同目录跨包调用目录结构示例plaintextsrc/ ├─ main.go └─ calc/ └─ calc.go规则不同目录包名必须不同跨包调用语法包名.函数名()包外可访问的函数 / 变量首字母必须大写导出小写标识符仅当前包可见。3.4 main 函数与 init 函数执行顺序执行优先级先执行所有包的 init ()再执行 main ()空白导入import _ xxx用途仅触发目标包的 init 函数执行不需要使用包内任何变量goimport ( // 仅执行fmt包init代码中不使用fmt任意方法 _ fmt )3.5 工程环境配置步骤配置GOPATH环境变量值为 src 目录同级的工作区绝对路径可选配置GOBIN自定义编译后可执行文件输出路径。