基础
示例
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
知识点总结
变量声明
- var 变量名 类型 = 值
- 类型推断:var 变量名 = 值
- 短声明:变量名 := 值(仅函数内)
常量
- const 常量名 = 值
- 常量组:const ( ... )
- iota:从0开始的自增枚举值
基本数据类型
- 整数:int, int8, int16, int32, int64
- 无符号整数:uint, uint8, uint16, uint32, uint64
- 浮点数:float32, float64
- 复数:complex64, complex128
- 布尔:bool
- 字符串:string
- 字符:rune (int32), byte (uint8)
零值
- 数值类型:0
- 字符串:""
- 布尔:false
- 指针、切片、映射、通道、函数、接口:nil
类型转换
- 必须显式转换:类型(值)
- 不支持隐式转换