环境搭建与第一个程序
1. 安装与配置
- 下载 SDK:前往 Golang 官网或国内镜像下载对应系统的安装包。

- 配置环境变量 :这是关键一步,配置好后才能在任意目录使用
go命令。GOROOT:SDK 的安装路径,例如D:\Program Files\Go。GOPATH:你的工作目录,存放项目代码的地方。PATH:添加%GOROOT%\bin,让系统能找到 Go 的可执行文件。
2. 第一个 Go 程序
在你的 GOPATH 下创建 hello.go 文件,输入以下代码:
Go
package main
import "fmt"
func main() {
fmt.Println("Hello, Shenzhen!")
}
代码解析:
package main:声明这是一个主包,程序的入口。import "fmt":引入格式化输入输出包。func main():主函数,程序从这里开始执行。fmt.Println():打印内容到控制台。
编译运行:
打开终端(Windows 下是 CMD 或 PowerShell),进入文件所在目录,执行:
go build hello.go:编译生成可执行文件(如hello.exe),然后运行hello.exe。- 或者直接
go run hello.go:一键编译并运行。
核心基础:变量与数据类型
Go 是强类型语言,变量使用前必须先声明。
1. 变量声明与赋值
Go 推荐使用 驼峰命名法。声明变量有多种方式:
Go
// 方式1:指定类型,先声明后赋值
var age int
age = 18
// 方式2:类型推导,根据值自动判断类型
var name = "Alice"
// 方式3:短变量声明,仅限函数内部使用
address := "Shenzhen"
2. 基本数据类型
- 整数类型 :
int8,int16,int32,int64。通常直接用int,系统会自动匹配 32 位或 64 位。 - 浮点类型 :
float32,float64。Go 默认使用float64,因为精度更高。 - 字符类型 :Go 中没有专门的 char 类型,通常用
byte(保存 ASCII)或int(保存 Unicode)来存储。 - 字符串类型:Go 使用 UTF-8 编码,完美支持中文。字符串一旦赋值不可变,但可以进行拼接。
- 布尔类型 :
bool,只有true和false两个值。
3. 数据类型转换
Go 不支持自动类型转换,必须显式转换。
Go
var a int64 = 100
var b int32 = 20
// a + b 会报错,必须转换成同一类型
var sum = a + int64(b)
流程控制:让代码"动"起来
程序的逻辑控制主要靠流程控制语句。
1. 条件判断 (if-else)
Go 的 if 语句条件不需要括号,且支持在条件前执行一个简单语句。
Go
if score := 85; score >= 90 {
fmt.Println("优秀")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
2. 分支选择 (switch)
Go 的 switch 非常灵活,不需要写 break,默认自带。如果想继续执行下一个 case,可以使用 fallthrough。
Go
switch day := "Monday"; day {
case "Saturday", "Sunday": // 可以合并多个值
fmt.Println("周末")
case "Monday":
fmt.Println("工作日")
default:
fmt.Println("未知")
}
3. 循环 (for)
Go 只有 for 一种循环关键字,但它能实现所有循环功能。
Go
// 标准 for 循环
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// while 循环的实现
j := 0
for j < 5 {
fmt.Println(j)
j++
}
// 无限循环
for {
// do something
break // 需要手动 break
}
函数与包管理
当代码量变大时,我们需要函数和包来组织代码。
1. 函数定义
Go 函数可以返回多个值,这是非常实用的特性。
Go
// 函数定义:计算和与差
func calc(n1, n2 int) (int, int) {
sum := n1 + n2
sub := n1 - n2
return sum, sub
}
// 调用函数
s, d := calc(10, 5)
fmt.Println("和:", s, "差:", d)
2. 包 (package)
- 定义包 :每个文件开头都要写
package 包名。 - 导入包 :使用
import "包路径"。 - 可见性 :首字母大写 的变量或函数是公开的 (可被其他包访问),首字母小写是私有的(仅本包可用)。
复合数据类型:数组、切片与 Map
除了基本类型,我们还需要处理复杂数据。
1. 数组 (Array)
长度固定,定义时必须指定大小。
Go
var arr [3]int = [3]int{1, 2, 3}
2. 切片 (Slice)
切片是数组的引用,长度可变,是 Go 中最常用的数据结构。
Go
// 方式1:基于数组创建
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:3] // 引用 arr 的第1到第2个元素
// 方式2:使用 make 创建
slice2 := make([]int, 3, 10) // 类型,长度,容量
3. Map (键值对)
类似其他语言的字典或哈希表。
Go
// 声明并初始化
heroes := map[string]string{
"hero1": "宋江",
"hero2": "卢俊义",
}
// 增加/修改
heroes["hero3"] = "吴用"
// 删除
delete(heroes, "hero1")
// 遍历
for key, value := range heroes {
fmt.Println(key, value)
}
特色语法:指针与结构体
Go 语言保留了指针,但比 C 语言更安全。
1. 指针
&:取地址。*:取值(解引用)。
Go
var a int = 10
var p *int = &a // p 存储了 a 的地址
fmt.Println(*p) // 输出 10,取 p 指向的值
2. 结构体 (struct)
Go 语言没有类 (class),而是使用结构体来组合数据,实现面向对象编程。
Go
// 定义一个 Person 结构体
type Person struct {
Name string
Age int
}
// 创建结构体实例
p1 := Person{Name: "Bob", Age: 25}
fmt.Println(p1.Name) // 输出 Bob