Go语言中switch语句支持可比较类型,如基本类型、可比较的结构体、指针和接口类型,用于值判断或类型断言;不支持slice、map、func等不可比较类型。

Go语言中的switch语句非常灵活,支持多种类型。只要表达式结果是可比较的类型,就可以用于switch。
支持的基本类型
布尔型、整型、浮点型、字符串、字符(rune)等基本类型都可以作为switch的判断条件。
var status string = "active"
switch status {
case "active":
fmt.Println("状态正常")
case "inactive":
fmt.Println("已停用")
default:
fmt.Println("未知状态")
}
支持复合类型:指针、结构体(需可比较)
如果结构体的所有字段都可比较,那么该结构体也可以用于switch。
指针类型也可以直接使用,比较的是地址是否相等。
立即学习“go语言免费学习笔记(深入)”;
具有服装类网店的常用的功能和完善的商品类型管理、商品管理、配送支付管理、订单管理、会员分组、会员管理、查询统计和多项商品促销功能。系统具有静态HTML生成、UTF-8多语言支持、可视化模版引擎等技术特点,适合建立服装、鞋帽、服饰类网店。系统具有以下主要功能模块: 网站参数设置 - 对网站的一些参数进行个性化定义 会员类型设置 - 可以任意创建多个会员类型,设置不同会员类型的权限和价格级别 货币类型
type Point struct {
X, Y int
}
p := Point{1, 2}
switch p {
case Point{1, 2}:
fmt.Println("在原点附近")
default:
fmt.Println("位置不同")
}
接口类型(interface{})
当switch作用于接口时,常用于类型断言,判断接口底层的具体类型。
var x interface{} = "hello"
switch v := x.(type) {
case string:
fmt.Println("字符串:", v)
case int:
fmt.Println("整数:", v)
default:
fmt.Println("未知类型")
}
不支持的类型
以下类型不能用于switch,因为它们不可比较:
- 切片(slice)
- 映射(map)
- 函数(func)
- 包含不可比较字段的结构体(如含切片字段)
尝试对这些类型做switch会编译报错。
基本上就这些。只要类型支持相等判断,就能用在switch里。注意区分值比较和类型判断两种常见用法。









