Go语言学习笔记(二)——变量、数据类型与流程控制详解
在掌握了 Go 的基本环境和程序结构后,接下来就要进入最核心的基础语法部分:变量、常量、数据类型、运算符以及流程控制。这一部分是后续学习函数、结构体、接口和并发的基础。
一、变量的定义与使用
在 Go 中,变量用于存储数据。变量定义有几种常见方式。
1. 标准声明方式
var name string = "Tom"
var age int = 20
这种写法最完整,明确指定了变量名、类型和值。
2. 类型推导
var name = "Tom"
var age = 20
Go 会根据右侧的值自动推导类型。
3. 短变量声明
name := "Tom"
age := 20
这是 Go 中最常用的变量定义方式,但只能在函数内部使用,不能用于全局变量。
4. 多变量声明
var a, b, c int = 1, 2, 3
x, y := 10, 20
多变量声明在接收函数返回值时非常常见。
二、常量的定义
常量是值不可修改的数据,使用 const 定义。
const PI = 3.14159
const appName string = "GoDemo"
Go 中的常量还可以配合 iota 使用,快速定义枚举值。
const (
Monday = iota
Tuesday
Wednesday
Thursday
Friday
)
这里 Monday 的值是 0,后面依次递增。
三、Go 的基本数据类型
Go 是静态类型语言,每个变量都有明确类型。
1. 整型
常见整型有:
intint8int16int32int64uintuint8uint16uint32uint64
示例:
var a int = 10
var b int64 = 100000
2. 浮点型
Go 提供两种浮点类型:
float32float64
var price float64 = 99.99
通常更常用 float64,因为精度更高。
3. 布尔型
只有两个值:
var isOk bool = true
var isFail bool = false
4. 字符串
字符串在 Go 中是不可变的字节序列。
var str string = "Hello Go"
字符串常用操作:
fmt.Println(len(str))
fmt.Println(str[0])
需要注意,Go 字符串如果包含中文,一个汉字通常占多个字节,处理时要特别小心。
四、数据类型转换
Go 不允许隐式类型转换,必须显式转换。
var a int = 10
var b float64 = float64(a)
fmt.Println(b)
这种严格的类型系统可以减少很多隐性 bug。
五、运算符
Go 中常见运算符有以下几类:
1. 算术运算符
+ - * / %
示例:
a := 10
b := 3
fmt.Println(a + b)
fmt.Println(a - b)
fmt.Println(a * b)
fmt.Println(a / b)
fmt.Println(a % b)
2. 比较运算符
== != > < >= <=
3. 逻辑运算符
&& || !
4. 赋值运算符
= += -= *= /= %=
六、流程控制语句
流程控制决定程序如何执行,Go 中主要有 if、for、switch。
1. if 语句
age := 18
if age >= 18 {
fmt.Println("已成年")
} else {
fmt.Println("未成年")
}
Go 的 if 不需要加括号,但条件后必须跟大括号。
if 的特殊写法
if score := 85; score >= 60 {
fmt.Println("及格")
}
这种写法可以在条件判断前定义一个临时变量。
2. for 循环
Go 中没有 while 和 do while,循环统一使用 for。
普通 for
for i := 0; i < 5; i++ {
fmt.Println(i)
}
类似 while
i := 0
for i < 5 {
fmt.Println(i)
i++
}
无限循环
for {
fmt.Println("循环中")
}
3. switch 语句
day := 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
default:
fmt.Println("未知")
}
Go 的 switch 默认自带 break,不需要手动写。
七、输入输出基础
Go 使用 fmt 包进行输入输出。
1. 输出
name := "Alice"
age := 22
fmt.Println(name, age)
fmt.Printf("姓名:%s,年龄:%d\n", name, age)
2. 输入
var name string
fmt.Print("请输入姓名:")
fmt.Scan(&name)
fmt.Println("你输入的是:", name)
输入时需要传入变量地址,所以要使用 &。
八、示例:简单成绩判断程序
package main
import "fmt"
func main() {
var score int
fmt.Print("请输入成绩:")
fmt.Scan(&score)
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
}
这个小程序综合使用了变量、输入输出和 if-else 语句,是非常典型的练习案例。
九、总结
Go 的基础语法设计得非常克制,很多地方看起来都很“朴素”,但正是这种朴素让代码更容易理解和维护。变量定义简单直接,类型系统严格,流程控制也没有太多花哨语法,非常适合用来构建高质量工程代码。
打基础阶段,一定要多写小程序练习,比如计算器、成绩判断、猜数字游戏等,这样能更快熟悉 Go 的语言风格。

浙公网安备 33010602011771号