结构体成员访问修饰符

结构体成员默认是私有并且不可修改的(结构体模式是只读)。但是可以通过pub设置为公开的,通过mut设置为可写的。总体来说有以下五种组合类型:

  1. struct Foo {
  2. a int // private immutable (default)
  3. mut:
  4. b int // private mutable
  5. c int // (you can list multiple fields with the same access modifier)
  6. pub:
  7. d int // public immmutable (readonly)
  8. pub mut:
  9. e int // public, but mutable only in parent module
  10. pub mut mut:
  11. f int // public and mutable both inside and outside parent module
  12. } // (not recommended to use, that's why it's so verbose)

例如在builtin模块定义的字符串类型:

  1. struct string {
  2. str byteptr
  3. pub:
  4. len int
  5. }

可以看出字符串是一个只读类型。

字符串结构体中的byte指针在builtin模块之外不可访问。而len成员是模块外部可见的,但是外部是只读的。

  1. fn main() {
  2. str := 'hello'
  3. len := str.len // OK
  4. str.len++ // Compilation error
  5. }