pubconst ( // 公共常量 pi =3.14)pubenum Color { // 公共枚举 blue green red}pub fnmy_fn() { // 公共函数println('my_fn is public')}pubstructPoint { // 公共结构体mut: x int y int}pub fn (mut p Point) move(x int, y int) { // 公共方法 p.x += x p.y += y}pubinterface MyReader { // 公共接口read() int}pubtypeMyint=int// 公共类型别名
结构体字段访问控制
结构体字段默认是:私有且不可变,
pub可以变为公有,mut可以变为可变,
有以下4种常用的组合,以及1种不推荐使用的全局字段:__global。
structFoo { a int// 私有,不可变(默认).在模块内部可访问,不可修改;模块外不可访问,不可修改mut: b int// 私有,可变.在模块内部可访问,可修改,模块外部不可访问,不可修改 c int// (相同访问控制的字段可以放在一起)pub: d int// 公共,不可变,只读.在模块内部和外部都可以访问,但是不可修改pubmut: e int// 公共,模块内部可访问,可修改;模块外部可访问,但是不可修改__global: f int// 全局字段,模块内部和外部都可访问,可修改,这样等于破坏了封装性,不推荐使用}
看看string结构体的定义:
structstring {pub: str &u8//都是公共,不可变 len int//都是公共,不可变}
所以以下代码会报错:
fnmain() { str :='hello' len := str.len //len公共可访问 str.len++// 不可变,不可修改,尝试修改会编译报错}