x :=i64(3) // x是i64类型,而不是默认推断的inty :=f32(3.0) // y是f32类型,而不是默认推断的f64
这个显示指定类型的风格,跟其他语言确实不太一样,一般的风格都是:
let x int =1let x:int=1//或者var x int =1var x:int=1
判断变量类型
通过使用typeof内置函数,可以判断变量类型:
x :=3s :='abc'println(typeof(x)) // intprintln(typeof(s)) // string
默认不可变
跟rust一样,变量默认不可变,要声明为可变,使用mut关键字:
mut age :=20println(age)age =21println(age)
要注意区分 := 和 = 的不同之处:
:= 的含义是为变量声明并赋值。
= 的含义是为变量绑定一个新的值,也可以理解为修改变量值。
变量声明后,如果没有被使用:
开发编译(v run):编译器只是会警告,但仍然继续编译,方便开发调试,而不用去临时注释掉。
生产编译(v -prod):编译器会报错,停止编译。
以下几种情况,会编译不通过:
fnmain() { age =21//变量还未声明}
fnmain() { age :=21//变量声明和赋值后,没有使用,开发编译,只会警告,生产编译,会报错}
fnmain() { a :=10iftrue { a :=20//跟其他语言不一样,没有上级变量隐藏,在函数内部,同名的变量只能定义一个 }}
多变量赋值
fnmain() {f1()f2()f3()f4()}fnf1() { a, b, c :=1,3,5// 多变量声明并赋值println(a)println(b)println(c)}fnf2() {mut a :=1mut b :=2 a, b = b, a // 交换}fnf3() {mut a :=11mut b :=22mut c :=33mut d :=44 a, b, c, d = b, a++, d +1,-c // 多变量赋值println(a) // 22println(b) // 11println(c) // 45println(d) // -33}fnf4() {mut x, y :=1,3//注意,只有x是可以变的,y不可变mut a,mut b,mut c :=1,2,3//a,b,c都是可变的println(a)println(b)println(c)}
条件赋值
d, e, f :=iftrue {1,'awesome', [13] } else {0,'bad', [0] }
匹配赋值
a, b, c :=matchfalse {true { 1,2,3 }false { 4,5,6 }else { 7,8,9 }}
强制类型转换
可以通过T( ) 对类型进行显示声明,或者强制类型转换:
module mainfnmain() { x :=int(3) y :=u8(x)println('y is $y') z :=f32(x)println('z is $z') f :=1.2 i :=int(f)println(i) // 输出1,强制转换丧失精度}