🐸 青蛙编程网
首页 / Go / Go 基础 / 3. 变量、类型与流程控制

3. 变量、类型与流程控制

这是什么:变量 = 给数据起的名字,一个贴了标签的盒子;类型 决定盒子装什么,流程控制 决定代码走哪条路。

为什么用:上一章我们让电脑说了第一句话,但它转头就忘——程序不会记数据,也不会看情况办事。没有变量,数值只能写死;没有分支循环,代码永远是一条直线。

如何用:先用 var 和 := 两种写法声明变量,再把 int、string、bool 这些基本类型挨个试一遍,最后用 if、for、switch 走一遍流程。

3.1 声明变量的两种方式

func main() {
    var name string = "青蛙"    // 传统式:var 名 类型 = 值
    var age = 11                // 类型可推断,可省
    city := "杭州"              // ☆ 短声明(: := ),只能在函数内用
}
写法 场景
var x int 零值默认(int → 0,string → "",bool→false)
x := 10 日常主力(函数内)
常量 const PI = 3.14

Go 的未使用变量会报编译错——「声明而不用」在 Go 里是错误,强迫代码整洁。

3.2 基本类型速查

var i  int     = 42      // 整数,默认 64 位平台 int64
var f  float64 = 3.14    // 浮点(默认 float64)
var s  string  = "hello" // 字符串(UTF-8 原生)
var b  bool    = true
var r  rune    = '蛙'     // rune = int32,存 Unicode 字符

字符串常用操作:

fmt.Println(len("青蛙"))                 // 6(字节数!中文 3 字节)
fmt.Println(len([]rune("青蛙")))         // 2(字符数)
fmt.Println(strings.ToUpper("go"))       // GO
fmt.Printf("%d %.2f %s\n", 42, 3.14, "ok")

3.3 条件:if(不需要括号)

if score >= 60 {
    fmt.Println("及格")
} else if score >= 0 {
    fmt.Println("不及格")
} else {
    fmt.Println("无效分数")
}

// 做初始化的 if(Go 特色)
if n := len(s); n > 5 {
    fmt.Println("长字符串", n)
}

大括号必写、跟 if 同行;Go 存在条件表达式,无三元。

3.4 循环:只有 for

for i := 0; i < 5; i++ {          // 1. 经典三段
    fmt.Println(i)
}

for {                              // 2. 无限(配 break)
    break
}

nums := []int{1, 2, 3}
for index, value := range nums {  // 3. 遍历(range)
    fmt.Println(index, value)
}

m := map[string]int{"a": 1}
for k, v := range m {             // 4. map 同理
    fmt.Println(k, v)
}

你会看到:for 一统天下——没有 while 没有 do-while,统一用 for。

3.5 switch(默认自带 break)

switch os := runtime.GOOS; os {
case "windows":
    fmt.Println("Windows")
case "linux", "darwin":     // 逗号=多值
    fmt.Println("类 Unix")
default:
    fmt.Println("其它")
}

口诀:if 无括号、for 一条、switch 默认 break。格式统一全体党员一致性。

3.6 动手改

  1. 用 for + range 打印字符串中每个字符(for i, ch := range str)
  2. 写「猜大小」switch 分支,默认 case 输出合理原因
  3. 故意声明不用变量,看编译器怎么教育你

3.7 小结

  • := 为日常,var 用于显式类型与包级
  • len 对中文按字节;需要字符数用 []rune
  • for 一条承担循环;switch 自带 break

下一章:函数与包 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。