Learn
Go/02-variables-and-types

变量与类型

Go 是静态类型语言:变量类型在编译时确定,编译器会检查类型错误。

1. 三种声明方式

var name string = Alice  // 完整
var age int                // 零值:0
name2 := Bob             // 短声明(函数内)
变量声明
package main
 
import "fmt"
 
func main() {
    var name string = "Alice"
    var age int
    city := "北京"
 
    age = 30
    fmt.Println(name, age, city)
    fmt.Printf("%T %T %T\n", name, age, city)
}
💡:= 的限制
  • 只能在函数内部使用
  • 左侧至少有一个新变量
  • 等价于 var x = 表达式(带类型推断)

2. 基本类型

类型说明零值
bool布尔false
string字符串(不可变)empty
int, int8/16/32/64整数0
uint, uint8/16/32/64无符号0
float32, float64浮点0.0
byteuint8 别名0
runeint32 别名(Unicode 码点)0
类型零值
package main
 
import "fmt"
 
func main() {
    var b bool
    var s string
    var i int
    var f float64
    var by byte
    var r rune
 
    fmt.Printf("bool: %v\n", b)
    fmt.Printf("string: %q\n", s)
    fmt.Printf("int: %v\n", i)
    fmt.Printf("float: %v\n", f)
    fmt.Printf("byte: %v\n", by)
    fmt.Printf("rune: %v\n", r)
}

3. 常量 const

常量不能用 :=,必须显式声明;可以是无类型常量(更灵活)。

常量与无类型常量
package main
 
import "fmt"
 
const Pi = 3.14159
const (
    StatusOK    = 200
    StatusError = 500
)
 
func main() {
    const x = 10
    var i int = x
    var f float64 = x
    fmt.Println(i, f)
    fmt.Println(StatusOK, StatusError)
}

4. 类型转换(必须显式)

Go 不做隐式类型转换,必须用 T(v)。

类型转换
package main
 
import (
    "fmt"
    "strconv"
)
 
func main() {
    var i int = 42
    f := float64(i)
    s := strconv.Itoa(i)
    n, _ := strconv.Atoi("123")
 
    fmt.Printf("%T %v\n", f, f)
    fmt.Printf("%T %v\n", s, s)
    fmt.Printf("%T %v\n", n, n)
}

5. 摄氏↔华氏

温度转换
package main
 
import "fmt"
 
func main() {
    c := 25.0
    f := c*9/5 + 32
    fmt.Printf("%.1fC = %.1fF\n", c, f)
}

🎯 练习

圆面积
// 任务:输入半径 r,输出圆面积
// 公式:Pi * r^2,保留 2 位
// 期望:r=5 -> 78.54
 
package main
 
import "fmt"
 
func main() {
    var r int = 5
    // 补全代码
}

小结

  • var 完整声明;:= 短声明(仅函数内)
  • 静态类型 + 显式转换
  • 零值机制:未初始化变量有默认值
  • const 声明常量,无类型常量更灵活
  • strconv.Itoa/Atoi 是字符串与 int 的常用桥

下一章 流程控制。