可选项
类型系统概述中提到,所有原始类型、结构体和消息都可以为空。也就是说,除了 null
(一种特殊值,表示故意没有任何其他值)之外,它们不一定持有任何值。
变量或结构和消息中可容纳 null
的字段被称为”可选项”。当变量不一定被使用时,它们对减少状态大小很有用。
在变量或字段的类型声明后添加问号 (?
),就可以将其设为可选变量或字段。唯一的例外是 map<K, V>
和 bounced<Msg>
,你不能让它们、内部键/值类型(如果是 map)或内部消息(如果是 bounced)成为可选项。
未定义的可选变量或可选字段默认为 null
值。如果不先检查 null
,就无法访问它们。但如果你确定它们在某一时刻不是 null
,可以使用非空断言操作符 !!
访问它们的值。
在未使用 !!
或未事先检查 null
的情况下尝试访问可选变量或可选字段的值,如果编译器可以跟踪,则会导致编译错误;如果不能跟踪,则会导致退出代码 128异常:空引用异常。
可选项举例: