Go 工程管理与作用域

1 获取命令行参数

核心说明

程序接收外部传入的命令行参数,全部以字符串类型存储。

go

Go 复制代码
// 获取全部命令行参数列表
list := os.Args
// 获取参数总个数
n := len(list)
fmt.Println("参数总数 n = ", n)

2 变量作用域

2.1 局部变量 & 全局变量

  1. 局部变量 定义在{}代码块内部的变量,仅当前代码块生效;程序执行到变量定义语句时分配内存,离开代码块(作用域)自动释放内存。
  2. 全局变量定义在所有函数外部的变量,整个包内均可访问。

2.2 不同作用域同名变量规则

go

Go 复制代码
// 全局变量 a
var a byte
func main() {
    // 局部变量 a,与全局同名
    var a int
    // 变量查找遵循就近原则,优先使用局部a
    fmt.Printf("%T\n", a)
}

两条核心规则:

  1. 不同作用域下,允许定义名称相同的变量;
  2. 变量查找遵循就近原则,优先使用当前作用域内的变量。

3 Go 工程管理(GOPATH 工作区)

3.1 工作区三大目录

大型项目不能全部写在main函数内,需要按功能拆分代码,依靠 GOPATH 工作区管理:

  1. src:存放所有源代码,Go 命令强制要求源码必须放在 src 下;
  2. pkg:编译生成的静态库文件,无需手动创建,go 工具自动生成;
  3. bin:编译生成的可执行程序,无需手动创建,go 工具自动生成。

导入包时,默认从GOPATH下的 src 目录查找对应代码。

3.2 包 package 基础

  1. 程序入口文件必须声明 package main;
  2. 使用import导入外部包,导入后必须使用,否则编译报错。
三种导入写法
  1. 单行导入

go

Go 复制代码
import "fmt"
import "os"
  1. 批量括号导入(推荐)

go

Go 复制代码
import (
    "fmt"
    "os"
)
  1. 特殊导入语法

go

Go 复制代码
// 点导入:调用包内函数时,省略包名直接调用
import . "fmt"

// 包别名:给长包名自定义简写
import io "fmt"

// 空白导入:仅执行包内init函数,不使用包内任何标识符
import _ "fmt"

3.3 同目录 / 不同目录代码调用规则

① 同一目录(分文件编程)
  1. 多个源码文件放在src下同一个文件夹;
  2. 同目录所有文件包名必须完全一致;
  3. 同目录文件互相调用函数,直接写函数名,不需要加包名;
  4. 使用go env查看本机 GOPATH、GOBIN 等环境变量。
② 不同目录(跨包调用)

目录结构示例:

plaintext

Go 复制代码
src/
├─ main.go
└─ calc/
   └─ calc.go

规则:

  1. 不同目录,包名必须不同;
  2. 跨包调用语法:包名.函数名();
  3. 包外可访问的函数 / 变量,首字母必须大写导出;小写标识符仅当前包可见。

3.4 main 函数与 init 函数执行顺序

  1. 执行优先级:先执行所有包的 init (),再执行 main ();
  2. 空白导入import _ "xxx"用途:仅触发目标包的 init 函数执行,不需要使用包内任何变量;

go

Go 复制代码
import (
    // 仅执行fmt包init,代码中不使用fmt任意方法
    _ "fmt"
)

3.5 工程环境配置步骤

  1. 配置GOPATH环境变量:值为 src 目录同级的工作区绝对路径;
  2. 可选配置GOBIN:自定义编译后可执行文件输出路径。
相关推荐
紧跟先前的步伐3 小时前
Go AI Agent 实战 08|HTTP 模型 API 的工作原理与请求流程
人工智能·http·ai·golang
紧跟先前的步伐3 小时前
Go AI Agent 实战 07|模型幻觉、能力边界与成本控制
大数据·人工智能·golang
利威尔xu6 小时前
Go GMP 调度器 10 个高频追问:3 个线上故障让 P99 从 80ms 飙到 2s、10 万 goroutine 泄漏
开发语言·后端·面试·性能优化·golang
FfHUCisI6 小时前
无锁 Reactor 网络模型与 gnet / evio 架构拆解
服务器·开发语言·后端·golang
紧跟先前的步伐16 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
浮尘笔记1 天前
我用 Go 写了个手机端「远程 AI 开发控制台」(开源)
人工智能·智能手机·golang
microrain1 天前
专业版守核心,企业版做增量:SagooIoT 的跨模块能力出口
物联网·架构·golang·sagooiot
紧跟先前的步伐1 天前
Go AI Agent 实战 04|Prompt 与消息角色:System、User、Assistant
人工智能·golang·prompt
念何架构之路1 天前
go-grpc逻辑架构图
开发语言·后端·golang
FfHUCisI1 天前
Linux 网络 IO 模型演进与 Epoll 内部机制
golang