Go初学对比其他语言之——新特性

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

}

 

You May Also Like

About the Author: daidai5771

发表评论

电子邮件地址不会被公开。 必填项已用*标注