枚举 enum 关键字允许创建一个从数个不同取值中选其一的枚举类型(enumeration)。任何一个在 struct 中合法的取值在 enum 中也合法。
在日常生活中很常见。比如:1 年有 12 个月,1 周有 7 天。
枚举的定义
代码语言:txt复制enum 枚举名称{
variant1,
variant2,
...
}
使用枚举
代码语言:txt复制枚举名称::variant
#[derive(Debug)]
enum RoadMap {
Go语言极简一本通,
Go语言微服务架构核心22讲,
从0到Go语言微服务架构师,
}
//这是Go语言学习3个阶段
fn main() {
let level = RoadMap::从0到Go语言微服务架构师;
println!("level---{:?}",level);
}
#[derive(Debug)]
注解的作用,就是让 派生自
Debug`。
Option 枚举
代码语言:txt复制enum Option<T> {
Some(T), // 用于返回一个值
None // 用于返回 null,用None来代替。
}
Option
枚举经常用在函数中的返回值
,它可以表示有返回值,也可以用于表示没有返回值。如果有返回值。可以使用返回 Some(data),如果函数没有返回值,可以返回 None。
fn getDiscount(price: i32) -> Option<bool> {
if price > 100 {
Some(true)
} else {
None
}
}
let p=666; //输出 Some(true)
// let p=6;//输出 None
let result = getDiscount(p);
println!("{:?}",result)
match 语句
判断一个枚举变量的值,唯一操作符就是 match。
代码语言:txt复制fn print_road_map(r:RoadMap){
match r {
RoadMap::Go语言极简一本通=>{
println!("Go语言极简一本通");
},
RoadMap::Go语言微服务架构核心22讲=>{
println!("Go语言微服务架构核心22讲");
},
RoadMap::从0到Go语言微服务架构师=>{
println!("从0到Go语言微服务架构师");
}
}
}
print_road_map(RoadMap::Go语言极简一本通);//输出 Go语言极简一本通
print_road_map(RoadMap::Go语言微服务架构核心22讲);//输出 Go语言微服务架构核心22讲
print_road_map(RoadMap::从0到Go语言微服务架构师);//输出 从0到Go语言微服务架构师
带数据类型的枚举
代码语言:txt复制enum 枚举名称{
variant1(数据类型1),
variant2(数据类型2),
...
}
代码语言:txt复制#[derive(Debug)]
enum StudyRoadMap{
Name(String),
}
let level3 = StudyRoadMap::Name(String::from("从0到Go语言微服务架构师"));
match level3 {
StudyRoadMap::Name(val)=>{
println!("{:?}",val);
}
}
//输出 "从0到Go语言微服务架构师"