Day01(Golang 入门介绍)
golang 基础入门、golang hellworld
Day01(Golang 入门介绍)
Golang 基础
初步认识 Golang
Go 语言的特点
- 跨平台编译: Go 支持 Linux、Windows、macOS 等多个平台,通过交叉编译可以轻松生成不同平台的可执行文件
- 简洁高效: 语法简单清晰,学习曲线平缓,关键字仅 25 个
- 原生并发: 内置 goroutine 和 channel,天生支持高并发编程
- 自动垃圾回收: 内置 GC 机制,无需手动管理内存
- 静态类型: 编译时类型检查,提高代码安全性
- 快速编译: 编译速度快,接近解释型语言的体验
- CGO 支持: 可以调用 C 语言代码,扩展性强
Go 的应用领域
- Web 开发: Gin、Echo、Beego 等框架广泛用于后端服务开发
- 微服务: gRPC、Go Micro 等支持构建分布式微服务架构
- 云原生: Docker、Kubernetes、Prometheus 等云原生工具均用 Go 编写
- 区块链: Hyperledger Fabric、Ethereum 等区块链项目
- 大数据: 分布式数据处理、日志收集系统
- 运维工具: Terraform、Consul、Etcd 等 DevOps 工具
- 网络编程: 高性能代理、负载均衡器、消息队列
Go 环境
Linux & MacOs
- 下载 Golang 安装包:在 Golang 官方网站上下载适合自己 Linux 发行版和架构的 Golang 安装包
-
解压安装包:将下载的安装包解压到系统的某个目录下,如 /usr/local。
1
sudo tar -C /usr/local -xzf go*.tar.gz
-
配置环境变量:编辑 ~/.bashrc 或者 ~/.profile 文件,添加以下内容:
1
export PATH=$PATH:/usr/local/go/bin
-
使环境变量生效:执行以下命令使环境变量生效
1
source ~/.bashrc或者
1
source ~/.profile - 检查安装:打开命令行终端,输入 go version 命令,如果输出 Golang 的版本号,则说明 Golang 安装成功
注意:不同的 Linux 发行版可能有所不同,以上是一个基本的安装步骤,具体步骤可以根据自己的情况进行调整
Windows 安装详解
方法一:安装包安装(推荐)
- 下载安装包: 访问 Golang 官方网站 下载 Windows 版本的 MSI 安装包
- 运行安装程序: 双击下载的
.msi文件,按照向导完成安装- 默认安装路径:
C:\Program Files\Go - 安装程序会自动配置环境变量
- 默认安装路径:
- 验证安装: 打开 PowerShell 或 CMD,执行:
1
go version
如果显示版本号(如
go version go1.21.0 windows/amd64),说明安装成功
方法二:手动配置环境变量
如果安装后无法识别 go 命令,需要手动配置环境变量:
- 打开”控制面板” → “系统和安全” → “系统” → “高级系统设置”
- 点击”环境变量”按钮
- 在”系统变量”中找到
Path,点击”编辑” - 添加 Go 的 bin 目录路径,例如:
C:\Program Files\Go\bin - 点击”确定”保存,重新打开终端窗口
注意: 配置环境变量后,需要重启终端才能生效
Go 环境变量详解
Go 的环境变量对开发和编译至关重要,以下是核心环境变量:
核心环境变量
| 变量名 | 说明 | 示例值 |
|---|---|---|
GOROOT |
Go 安装目录 | C:\Program Files\Go |
GOPATH |
工作空间目录(Go 1.11 前必需) | D:\gopath |
GOBIN |
可执行文件安装目录 | $GOPATH/bin |
GOOS |
目标操作系统 | windows, linux, darwin |
GOARCH |
目标架构 | amd64, arm64, 386 |
CGO_ENABLED |
是否启用 CGO | 0(禁用), 1(启用) |
Go Modules 相关(Go 1.11+)
| 变量名 | 说明 | 示例值 |
|---|---|---|
GO111MODULE |
Module 模式开关 | on, off, auto |
GOPROXY |
模块代理地址 | https://goproxy.cn,direct |
GONOSUMDB |
跳过校验的模块 | github.com/private/* |
GOFLAGS |
默认编译标志 | -mod=readonly |
常用命令
1
2
3
4
5
6
7
8
9
10
11
12
# 查看所有环境变量
go env
# 查看特定变量
go env GOPATH
# 设置环境变量(临时)
set GOOS=linux # Windows
export GOOS=linux # Linux/Mac
# 设置模块代理(加速国内下载)
go env -w GOPROXY=https://goproxy.cn,direct
建议: 中国大陆用户务必配置
GOPROXY,可显著提升依赖下载速度
Git 工具安装
Go 的模块管理依赖 Git 来下载代码包,确保已安装 Git:
1
2
3
4
# 检查 Git 是否安装
git --version
# 如果未安装,访问 https://git-scm.com/ 下载安装
推荐的开发工具
1. Visual Studio Code(免费,推荐)
- 优点: 轻量、免费、插件丰富
- 必备插件:
- Go (by Google): 官方 Go 语言支持
- Code Runner: 快速运行代码
- 配置: 安装 Go 插件后,按
Ctrl+Shift+P→ 输入Go: Install/Update Tools安装所有工具
2. GoLand(付费,专业)
- 优点: JetBrains 出品,功能强大,智能提示完善
- 适用场景: 大型项目开发,团队协作
- 获取: https://www.jetbrains.com/go/
3. Vim/Neovim(轻量级)
- 优点: 极致轻量,高度可定制
- 插件: vim-go, coc.nvim
- 适用人群: 熟悉 Vim 的高级用户
4. 其他编辑器
- Sublime Text + GoSublime
- Atom + go-plus
- Emacs + go-mode
Golang HelloWorld 详解
创建第一个 Go 程序
步骤 1: 创建项目目录
1
2
3
4
5
6
# 创建工作目录
mkdir hello-world
cd hello-world
# 初始化 Go Module(推荐)
go mod init hello-world
步骤 2: 编写代码
创建 main.go 文件:
1
2
3
4
5
6
7
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
代码解析:
package main: 声明包名,main包是可执行程序入口import "fmt": 导入格式化输出包func main(): 主函数,程序执行的起点fmt.Println(): 打印字符串并换行
步骤 3: 运行程序
有三种方式运行 Go 程序:
方式 1: 直接运行(开发阶段推荐)
1
2
go run main.go
# 输出: Hello, World!
方式 2: 编译后运行(生产环境推荐)
1
2
3
4
5
6
# 编译为可执行文件
go build -o hello.exe
# 运行可执行文件
./hello.exe # Linux/Mac
hello.exe # Windows
方式 3: 安装到 GOPATH/bin
1
2
go install
# 可执行文件会安装到 $GOPATH/bin 或 $GOBIN 目录
交叉编译示例
Go 的强大之处在于可以轻松编译为不同平台的可执行文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 编译为 Linux 64位
go env -w GOOS=linux GOARCH=amd64
go build -o hello-linux
# 编译为 macOS
go env -w GOOS=darwin GOARCH=amd64
go build -o hello-macos
# 编译为 Windows
go env -w GOOS=windows GOARCH=amd64
go build -o hello.exe
# 恢复本地环境
go env -u GOOS GOARCH
Go 基础语法要点
1. 语句分隔符
Go 语言不需要在每行末尾加分号 ;,编译器会自动添加。但以下情况需要分号:
1
2
3
4
5
6
7
// 一行多条语句时需要分号
x := 1; y := 2; z := 3
// for 循环的三个表达式之间需要分号
for i := 0; i < 10; i++ {
fmt.Println(i)
}
2. 注释规范
1
2
3
4
5
6
7
8
9
10
11
// 单行注释:用于简短说明
/*
多行注释:
用于较长的说明文档
*/
// 导出标识符的注释应该以标识符名称开头
type User struct { // User 表示用户信息
Name string
}
3. 标识符命名规则
- 必须以字母或下划线开头,不能以数字开头
- 区分大小写:
name和Name是不同的标识符 - 不能使用关键字: 见下方关键字列表
- 可见性规则:
- 首字母大写: 公开(Public),可被其他包访问
- 首字母小写: 私有(Private),仅当前包内可见
1
2
3
4
5
6
7
// 公开的函数和变量
func GetName() string { }
var Version = "1.0.0"
// 私有的函数和变量
func calculate() int { }
var count int
4. Go 语言关键字(25个)
包管理(2个)
package: 声明包import: 导入包
声明与定义(8个)
var: 声明变量const: 声明常量type: 定义类型func: 声明函数struct: 定义结构体interface: 定义接口map: 定义映射类型chan: 定义通道类型
流程控制(15个)
if,else: 条件分支switch,case,default: 多分支选择for: 循环range: 遍历集合break: 跳出循环continue: 继续下一次循环goto: 跳转到标签return: 返回函数defer: 延迟执行go: 启动协程select: 通道选择fallthrough: switch 穿透
5. 预定义标识符(36个)
基本类型
bool,byte,rune,stringint,int8,int16,int32,int64uint,uint8,uint16,uint32,uint64,uintptrfloat32,float64complex64,complex128
常量和零值
true,false,nil,iota
内置函数
append,cap,close,copy,deletelen,make,new,panic,recoverprint,println,real,imag,complex
6. 编码规范与最佳实践
代码风格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// ✅ 推荐:运算符两侧加空格
result := a + b * c
// ❌ 避免:缺少空格,可读性差
result:=a+b*c
// ✅ 推荐:使用 gofmt 格式化代码
gofmt -w filename.go
// ✅ 推荐:变量命名使用驼峰式
userName := "Alice"
userID := 123
// ✅ 推荐:短变量名在局部作用域
for i := 0; i < 10; i++ {
// i 的含义很明显
}
// ❌ 避免:未使用的变量(编译错误)
x := 10 // 如果 x 未使用,编译会失败
常见编译错误
1
2
3
4
5
6
7
8
9
10
11
// 错误 1: 未使用的变量
func test() {
x := 10 // compilation error: x declared and not used
}
// 错误 2: 未使用的导入
import "os" // compilation error: "os" imported and not used
// 解决方法:使用 _ 忽略
_ = x
import _ "os"
Go 学习路线与知识体系
基础知识体系
第一阶段:语言基础
- 数据类型: 整型、浮点型、布尔型、字符串、复数
- 变量与常量: 声明、初始化、作用域、iota 枚举
- 运算符: 算术、关系、逻辑、位运算
- 控制流程: if-else、switch-case、for 循环、break/continue
- 函数: 参数传递、返回值、可变参数、匿名函数、闭包
- 数组与切片: 声明、初始化、切片操作、扩容机制
- Map: 创建、增删改查、遍历、并发安全
- 结构体: 定义、方法、继承、JSON 序列化
- 指针: 基本概念、指针运算、内存管理
- 接口: 定义、实现、类型断言、空接口
第二阶段:高级特性
- 错误处理: error 接口、panic/recover、自定义错误
- 并发编程: goroutine、channel、sync 包、context
- 反射: reflect 包、类型检查、动态调用
- 测试: 单元测试、基准测试、表格驱动测试
- 标准库: io、net/http、encoding/json、time、os
第三阶段:工程实践
- Go Modules: 依赖管理、版本控制、私有仓库
- 项目结构: 标准布局、分层架构、设计模式
- 性能优化: 内存分配、GC 调优、profile 分析
- Web 开发: HTTP 服务器、路由、中间件、RESTful API
- 数据库: SQL、ORM、连接池、事务处理
Go 语言核心特性总结
1. 简洁的语法
Go 刻意保持语法简洁,只有 25 个关键字,降低了学习成本。相比其他语言:
- 没有类(class)、继承、泛型(Go 1.18 前)
- 没有异常处理(try-catch),使用 error 返回值
- 没有复杂的元编程能力
2. 强大的并发模型
Go 的并发基于 CSP(Communicating Sequential Processes)理论:
1
2
3
4
5
6
7
8
9
// 传统多线程(复杂、易出错)
// Java/C++: Thread, Lock, Mutex, Condition...
// Go 的并发(简洁、安全)
ch := make(chan int)
go func() {
ch <- compute()
}()
result := <-ch
3. 自动内存管理
- 垃圾回收(GC): 自动回收不再使用的内存
- 逃逸分析: 编译器决定变量分配在栈还是堆
- 内存分配器: tcmalloc 改进版,高效分配小对象
4. 快速的编译速度
- 编译速度接近解释型语言
- 依赖分析优化,只编译变更的部分
- 适合快速迭代开发
5. 丰富的标准库
Go 提供了”电池included”的标准库:
net/http: 完整的 HTTP 客户端和服务器encoding/json: JSON 编解码database/sql: 数据库抽象层crypto: 加密算法testing: 测试框架
学习资源推荐
官方资源
- Go 官网: https://go.dev/
- Go 官方博客: https://go.dev/blog/
- Go Tour: https://go.dev/tour/ (交互式教程)
- Effective Go: https://go.dev/doc/effective_go (最佳实践)
中文资源
- Go 语言中文网: https://studygolang.com/
- Go 语言圣经: https://books.studygolang.com/gopl-zh/
- Go 夜读: https://talks.godoc.org/ (社区技术分享)
书籍推荐
- 《The Go Programming Language》(Go 语言圣经)
- 《Go in Action》(Go 实战)
- 《Concurrency in Go》(Go 并发编程)
- 《Go 语言设计与实现》
学习资源推荐
官方资源
- Go 官网: https://go.dev/
- Go 官方博客: https://go.dev/blog/
- Go Tour: https://go.dev/tour/ (交互式教程)
- Effective Go: https://go.dev/doc/effective_go (最佳实践)
中文资源
- Go 语言中文网: https://studygolang.com/
- Go 语言圣经: https://books.studygolang.com/gopl-zh/
- Go 夜读: https://talks.godoc.org/ (社区技术分享)
书籍推荐
- 《The Go Programming Language》(Go 语言圣经)
- 《Go in Action》(Go 实战)
- 《Concurrency in Go》(Go 并发编程)
- 《Go 语言设计与实现》
下一步
完成入门后,建议按照以下顺序深入学习:
- ✅ Day01: Golang 入门介绍(本文)
- ➡️ Day02: 数据类型、变量、常量
- ➡️ Day03: 运算符与条件语句
- ➡️ Day04: 循环语句与函数基础
- ➡️ Day05: 函数进阶(闭包、递归、defer)
- ➡️ Day06: 变量作用域与数组
- ➡️ Day07: 指针与结构体
- ➡️ Day08: 切片与 range 遍历
- ➡️ Day09: Map 与容器
- ➡️ Day10: 接口与错误处理
- ➡️ Day11: 并发编程
- ➡️ Day12: 反射机制
- ➡️ Day13: 时间处理
- ➡️ Day14: 测试框架
祝你在 Go 语言的学习之路上取得成功!🚀
本文由作者按照
CC BY 4.0
进行授权