go | 环境安装和快速入门
环境搭建与第一个程序
1. 安装与配置
- 下载 SDK:前往 Golang 官网或国内镜像下载对应系统的安装包。
网站:https://go.dev/dl/
- 配置环境变量:这是关键一步,配置好后才能在任意目录使用
go命令。GOROOT:SDK 的安装路径,例如D:\Program Files\Go。GOPATH:你的工作目录,存放项目代码的地方。PATH:添加%GOROOT%\bin,让系统能找到 Go 的可执行文件。
2. 第一个 Go 程序
在你的GOPATH下创建hello.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 推荐使用驼峰命名法。声明变量有多种方式:
// 方式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 不支持自动类型转换,必须显式转换。
var a int64 = 100 var b int32 = 20 // a + b 会报错,必须转换成同一类型 var sum = a + int64(b)流程控制:让代码“动”起来
程序的逻辑控制主要靠流程控制语句。
1. 条件判断 (if-else)
Go 的if语句条件不需要括号,且支持在条件前执行一个简单语句。
if score := 85; score >= 90 { fmt.Println("优秀") } else if score >= 60 { fmt.Println("及格") } else { fmt.Println("不及格") }2. 分支选择 (switch)
Go 的switch非常灵活,不需要写break,默认自带。如果想继续执行下一个 case,可以使用fallthrough。
switch day := "Monday"; day { case "Saturday", "Sunday": // 可以合并多个值 fmt.Println("周末") case "Monday": fmt.Println("工作日") default: fmt.Println("未知") }3. 循环 (for)
Go 只有for一种循环关键字,但它能实现所有循环功能。
// 标准 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 函数可以返回多个值,这是非常实用的特性。
// 函数定义:计算和与差 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)
长度固定,定义时必须指定大小。
var arr [3]int = [3]int{1, 2, 3}2. 切片 (Slice)
切片是数组的引用,长度可变,是 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 (键值对)
类似其他语言的字典或哈希表。
// 声明并初始化 heroes := map[string]string{ "hero1": "宋江", "hero2": "卢俊义", } // 增加/修改 heroes["hero3"] = "吴用" // 删除 delete(heroes, "hero1") // 遍历 for key, value := range heroes { fmt.Println(key, value) }特色语法:指针与结构体
Go 语言保留了指针,但比 C 语言更安全。
1. 指针
&:取地址。*:取值(解引用)。
var a int = 10 var p *int = &a // p 存储了 a 的地址 fmt.Println(*p) // 输出 10,取 p 指向的值2. 结构体 (struct)
Go 语言没有类 (class),而是使用结构体来组合数据,实现面向对象编程。
// 定义一个 Person 结构体 type Person struct { Name string Age int } // 创建结构体实例 p1 := Person{Name: "Bob", Age: 25} fmt.Println(p1.Name) // 输出 Bob