Skip to content

基础

示例

go
// 02_basics.go
// Go语言基础:变量、常量、数据类型

package main

import "fmt"

func main() {
    fmt.Println("=== 变量声明 ===")
    
    // 1. 使用 var 声明变量(显式类型)
    var name string = "Alice"
    var age int = 30
    var height float64 = 1.75
    var isStudent bool = true
    
    fmt.Printf("姓名: %s, 年龄: %d, 身高: %.2f, 学生: %t\n", 
        name, age, height, isStudent)
    
    // 2. 类型推断(省略类型)
    var city = "Beijing"      // 推断为 string
    var year = 2023           // 推断为 int
    var temperature = 23.5    // 推断为 float64
    
    fmt.Printf("城市: %s, 年份: %d, 温度: %.1f\n", city, year, temperature)
    
    // 3. 短变量声明(函数内部使用)
    country := "China"
    population := 1400000000
    fmt.Printf("国家: %s, 人口: %d\n", country, population)
    
    // 4. 多变量声明
    var x, y, z int = 1, 2, 3
    var a, b, c = 10, "hello", 3.14
    fmt.Println("x,y,z:", x, y, z)
    fmt.Println("a,b,c:", a, b, c)
    
    // 5. 变量组声明
    var (
        firstName string = "John"
        lastName  string = "Doe"
        score     int    = 95
    )
    fmt.Printf("%s %s 得分: %d\n", firstName, lastName, score)
    
    fmt.Println("\n=== 常量 ===")
    
    // 常量声明(编译时确定,不可修改)
    const Pi = 3.141592653589793
    const MaxSize = 1024
    const AppName = "GoLearning"
    
    fmt.Println("Pi:", Pi)
    fmt.Println("MaxSize:", MaxSize)
    fmt.Println("AppName:", AppName)
    
    // 常量组
    const (
        StatusOK      = 200
        StatusCreated = 201
        StatusError   = 500
    )
    fmt.Println("状态码:", StatusOK, StatusCreated, StatusError)
    
    // iota 常量生成器(枚举)
    const (
        Monday = iota + 1  // 1
        Tuesday            // 2
        Wednesday          // 3
        Thursday           // 4
        Friday             // 5
        Saturday           // 6
        Sunday             // 7
    )
    fmt.Println("星期:", Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
    
    fmt.Println("\n=== 数据类型 ===")
    
    // 基本类型
    var intVar int = 42
    var int8Var int8 = 127
    var int16Var int16 = 32767
    var int32Var int32 = 2147483647
    var int64Var int64 = 9223372036854775807
    
    var uintVar uint = 42
    var uint8Var uint8 = 255
    var uint16Var uint16 = 65535
    var uint32Var uint32 = 4294967295
    var uint64Var uint64 = 18446744073709551615
    
    var float32Var float32 = 3.141592653589793
    var float64Var float64 = 3.141592653589793
    
    var complex64Var complex64 = 1 + 2i
    var complex128Var complex128 = 3 + 4i
    
    var boolVar bool = true
    var stringVar string = "Hello, Go!"
    var runeVar rune = 'A'  // rune是int32的别名,表示Unicode码点
    var byteVar byte = 65   // byte是uint8的别名
    
    fmt.Println("int:", intVar)
    fmt.Println("float64:", float64Var)
    fmt.Println("complex128:", complex128Var)
    fmt.Println("bool:", boolVar)
    fmt.Println("string:", stringVar)
    fmt.Println("rune:", runeVar, "对应字符:", string(runeVar))
    fmt.Println("byte:", byteVar, "对应字符:", string(byteVar))
    
    fmt.Println("\n=== 零值 ===")
    // 未初始化的变量会有零值
    var zeroInt int
    var zeroFloat float64
    var zeroString string
    var zeroBool bool
    var zeroSlice []int
    var zeroMap map[string]int
    
    fmt.Println("零值int:", zeroInt)           // 0
    fmt.Println("零值float64:", zeroFloat)     // 0
    fmt.Println("零值string:", zeroString)     // "" (空字符串)
    fmt.Println("零值bool:", zeroBool)         // false
    fmt.Println("零值slice:", zeroSlice)       // nil
    fmt.Println("零值map:", zeroMap)           // nil
    
    fmt.Println("\n=== 类型转换 ===")
    // Go需要显式类型转换
    var i int = 42
    var f float64 = float64(i)
    var u uint = uint(f)
    
    fmt.Printf("int %d -> float64 %.1f -> uint %d\n", i, f, u)
    
    // 字符串与数值转换
    var numStr string = "123"
    // 需要 strconv 包,这里先演示概念
    fmt.Println("字符串转数字示例:", numStr)
}

运行:go run 02_basics.go

知识点总结

  1. 变量声明

    • var 变量名 类型 = 值
    • 类型推断:var 变量名 = 值
    • 短声明:变量名 := 值(仅函数内)
  2. 常量

    • const 常量名 = 值
    • 常量组:const ( ... )
    • iota:从0开始的自增枚举值
  3. 基本数据类型

    • 整数:int, int8, int16, int32, int64
    • 无符号整数:uint, uint8, uint16, uint32, uint64
    • 浮点数:float32, float64
    • 复数:complex64, complex128
    • 布尔:bool
    • 字符串:string
    • 字符:rune (int32), byte (uint8)
  4. 零值

    • 数值类型:0
    • 字符串:""
    • 布尔:false
    • 指针、切片、映射、通道、函数、接口:nil
  5. 类型转换

    • 必须显式转换:类型(值)
    • 不支持隐式转换