以下实例中将整型转化为浮点型,并计算结果,将结果赋值给浮点型变量: var sum int = 17 var count int = 5 var mean float32
mean = float32(sum)/float32(count) fmt.Printf("mean 的值为: %f\n",mean)
变量声明
var identifier type
第一种,指定变量类型,声明后若不赋值,使用默认值。 var v_name v_type v_name = value 第二种,根据值自行判定变量类型。 var v_name = value 第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。 只能被用在函数体内 v_name := value // 例如 var a int = 10 var b = 10 c : = 10 声明多个变量 var x, y int
全局变量就是在函数作用域外定义的变量。 //定义全局变量 var ( a string = "hello" b string = "world" c int d int32 )
switch var1 { case val1: ... case val2: ... default: ... }
select 语句 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。
select { case communication clause : statement(s); case communication clause : statement(s); /* 你可以定义任意数量的 case */ default : /* 可选 */ statement(s); }
循环语句
go 语言只有 for 循环一种
for initialization; condition; post { // zero or more statements } initialization: 一般为赋值表达式,给控制变量赋初值; condition: 关系表达式或逻辑表达式,循环控制条件; post: 一般为赋值表达式,给控制变量增量或减量。
// a traditional "while" loop for condition { // ... }
// a traditional infinite loop Like a C for(;;) for { // ... // use break or return to exit }
/* for 循环 */ for a := 0; a < 10; a++ { fmt.Printf("a 的值为: %d\n", a) }
for a < b { a++ fmt.Printf("a 的值为: %d\n", a) }
如果需要遍历array, slice, string, or map, or reading from a channel 可以使用range for key, value := range oldMap { newMap[key] = value } 如果只需要第一个返回值,就扔掉第二个 for key := range m { if key.expired() { delete(m, key) } } 如果只需要第二个,那么使用'_'来扔掉第一个返回值 sum := 0 for _, value := range array { sum += value }
接口
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
func(nokiaPhone NokiaPhone)call() { fmt.Println("I am Nokia, I can call you!") }
type IPhone struct { }
func(iPhone IPhone)call() { fmt.Println("I am iPhone, I can call you!") }
funcmain() { var phone Phone
phone = new(NokiaPhone) phone.call()
phone = new(IPhone) phone.call()
}
在上面的例子中,我们定义了一个接口Phone,接口里面有一个方法call()。然后我们在main函数里面定义了一个Phone类型变量,并分别为之赋值为NokiaPhone和IPhone。然后调用call()方法,输出结果如下: I am Nokia, I can call you! I am iPhone, I can call you!
空interface
数组
声明使用数组
var variable_name [SIZE] variable_type
var balance [10] float32
初始化数组 var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 根据元素的个数来设置数组的大小 var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
多维数组 var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type 以下实例声明了三维的整型数组: var threedim [5][10][4]int
/* 使用 key 输出 map 值 */ for country := range countryCapitalMap { fmt.Println("Capital of",country,"is",countryCapitalMap[country]) }
// 遍历map for k, v := range m1 { fmt.Println(k, v) }
/* 查看元素在集合中是否存在 */ captial, ok := countryCapitalMap["United States"] /* 如果 ok 是 true, 则存在,否则不存在 */ if(ok){ fmt.Println("Capital of United States is", captial) }else { fmt.Println("Capital of United States is not present") }
简化写法 if v, ok := m1["a"]; ok { fmt.Println(v) } else { fmt.Println("Key Not Found") }
delete
delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key
/* 删除元素 */ delete(countryCapitalMap,"France");
Type Alias
用途
type alias这个特性的主要目的是用于已经定义的类型,在package之间的移动时的兼容。 比如我们有一个导出的类型flysnow.org/lib/T1,现在要迁移到另外一个package中, 比如flysnow.org/lib2/T1中。