第二章:基础语法与数据类型
2.1 变量与常量
变量声明
Go语言有多种声明变量的方式:
package main
import "fmt"
func main() {
// 方式1:var声明(显式类型)
var name string = "张三"
var age int = 25
// 方式2:var声明(类型推断)
var city = "北京"
var score = 95.5
// 方式3:短变量声明(最常用)
country := "中国"
year := 2024
// 方式4:多变量声明
var a, b, c int = 1, 2, 3
var x, y = "hello", 100
m, n := 10, "world"
// 方式5:批量声明
var (
username string = "admin"
password string = "123456"
isActive bool = true
)
fmt.Println(name, age, city, score, country, year)
fmt.Println(a, b, c, x, y, m, n)
fmt.Println(username, password, isActive)
}零值
Go中声明但未初始化的变量有默认值:
var i int // 0
var f float64 // 0.0
var b bool // false
var s string // ""(空字符串)
var p *int // nil
var m map[string]int // nil
var sl []int // nil常量
const Pi = 3.14159
// 批量声明
const (
Monday = 1
Tuesday = 2
Wednesday = 3
)
// iota:常量计数器
const (
A = iota // 0
B // 1
C // 2
)2.2 基本数据类型
整数类型
浮点类型
var f32 float32 = 3.1415926 // 单精度
var f64 float64 = 3.141592653589793 // 双精度(推荐)
pi := 3.14159 // 默认float64字符串类型
s1 := "Hello, 世界"
s2 := `多行
字符串`
// 操作
length := len(s1) // 长度
sub := s1[0:5] // 切片
concat := s1 + s2 // 拼接类型转换
import "strconv"
// 数值转换
var i int = 100
var f float64 = float64(i)
// 字符串转换
num, _ := strconv.Atoi("123") // string -> int
str := strconv.Itoa(456) // int -> string2.3 复合数据类型
数组(固定长度)
var arr1 [5]int
arr2 := [5]int{1, 2, 3, 4, 5}
arr3 := [...]int{1, 2, 3}
// 遍历
for i := 0; i < len(arr2); i++ {
fmt.Println(arr2[i])
}
for index, value := range arr2 {
fmt.Printf("%d: %d\n", index, value)
}切片(动态数组)
// 声明
var s1 []int
s2 := []int{1, 2, 3}
s3 := make([]int, 5) // 长度5,容量5
s4 := make([]int, 3, 10) // 长度3,容量10
// 操作
s2 = append(s2, 4) // 追加
s2 = append(s2, []int{5,6}...) // 追加切片
// 复制
s5 := make([]int, len(s2))
copy(s5, s2)
// 切片
sub := s2[1:4]Map(映射)
// 声明
m1 := make(map[string]int)
m2 := map[string]int{
"apple": 5,
"banana": 3,
}
// 操作
m1["key"] = 100
value := m1["key"]
value, exists := m1["key"] // 检查存在
delete(m1, "key") // 删除
// 遍历
for k, v := range m2 {
fmt.Printf("%s: %d\n", k, v)
}指针
var x int = 10
var p *int = &x // 取地址
fmt.Println(*p) // 解引用,输出10
*p = 20 // 通过指针修改
// 空指针检查
if p != nil {
fmt.Println(*p)
}2.4 格式化输出
fmt.Printf("整数: %d\n", 100)
fmt.Printf("字符串: %s\n", "hello")
fmt.Printf("浮点数: %.2f\n", 3.14159)
fmt.Printf("布尔值: %t\n", true)
fmt.Printf("类型: %T\n", 100)
fmt.Printf("二进制: %b\n", 100)
fmt.Printf("十六进制: %x\n", 255)