go与其他语言对比,有些特性还是比较好用的,例如:
第一、switch break可省略
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。
这点可以避免了忘记写break后多次匹配,尤其添加了default后造成的错误
第二、 函数可以返回多个值
其他语言定义多个返回值时比较麻烦,go里直接定义多个返回值即可
func swap(x, y string) (string, string) {
return y, x
}
第三、 函数可以定义成引用传递
默认函数都是采用值传递,这样在使用时不改变传递的参数,但是有时候需要在函数体内修改参数值,并将修改后的状态带出函数体外,则可定义类似C语言的指针形式,采用引用传递
/* 定义交换值函数*/
func swap(x *int, y *int) {
var temp int
temp = *x /* 保持 x 地址上的值 */
*x = *y /* 将 y 值赋给 x */
*y = temp /* 将 temp 值赋给 y */
}
使用时:
var a int = 100
var b int= 200
swap(&a, &b)
第四、可以很灵活的创建函数,并作为值使用
Go 语言可以很灵活的创建函数,并作为值使用。以下实例中我们在定义的函数中初始化一个变量,该函数仅仅是为了使用内置函数 math.sqrt() ,实例为:
/* 声明函数变量 */
getSquareRoot := func(x float64) float64 {
return math.Sqrt(x)
}
/* 使用函数 */
fmt.Println(getSquareRoot(9))
第五、函数方法
一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针
go与其他语言不同,在定义某个类似class的方法时,不是直接包含在类定义里,而是另外定义的,有点类似c++的方法定义,感觉像四不像。
/* 定义函数 */
type Circle struct {
radius float64
}
//该 method 属于 Circle 类型对象中的方法
func (c Circle) getArea() float64 {
//c.radius 即为 Circle 类型对象中的属性
return 3.14 * c.radius * c.radius
}