第二章:基础语法与数据类型

作者:Administrator 发布时间: 2026-03-13 阅读量:0 评论数:0

第二章:基础语法与数据类型

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 基本数据类型

整数类型

类型

大小

范围

int8

1字节

-128 ~ 127

int16

2字节

-32768 ~ 32767

int32/rune

4字节

-21亿 ~ 21亿

int64

8字节

很大

int/uint

平台相关

根据系统位数

浮点类型

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 -> string

2.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)

评论