首页  >  文章  >  后端开发  >  golang函数 方法

golang函数 方法

WBOY
WBOY原创
2023-05-16 12:08:39392浏览

Golang是当前最热门的编程语言之一,其特点之一就是函数及方法的设计非常出色。本文将详细介绍Golang函数及方法的相关知识。

一、函数

Golang函数的基本语法:

func function_name( [parameter list] ) [return_types] {
   //函数体
}

函数的参数列表与其返回值类型都是可选的,可以不写。如果函数只有一个返回值且其类型为非接口类型,则可省略括号。

例如:

func add(x int, y int) int {
   return x + y
}

func main() {
   fmt.Println(add(1, 2))
}

函数add接收两个int类型的参数,返回值类型也为int,通过表达式add(1, 2)调用该函数并输出其返回值。输出结果为3。

Golang函数支持多个返回值。例如:

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("hello", "world")
   fmt.Println(a, b)
}

函数swap接收两个string类型的参数,返回值类型为两个string类型,即返回值为两个字符串,通过多重赋值a, b := swap("hello", "world")将函数返回值分别赋值给a和b,最终输出hello world。

二、方法

在Golang语言中,方法是指某个类型的接收器(receiver)上的一个函数,该类型就是一个类。这种类型可以是一个结构体(struct),也可以是任何自定义类型。

方法的定义格式如下:

func (variable_name type) function_name([parameter list]) [return_types] {
    //函数体  
}

其中,variable_name 是类型(type)的一个实例(instance),function_name是该类型的方法(method)。

例如:

type Rectangle struct {
   length, width int
}

func (r Rectangle) area() int {
   return r.length * r.width
}

func main() {
   r := Rectangle{length: 10, width: 5}
   fmt.Println("area: ", r.area())
}

上述代码定义了类型Rectangle,该类型有length和width两个字段,同时定义了方法area(),因此它是一个类。在方法的声明中,接收器为Rectangle类型,方法名为area(),返回值为int类型。

下面的语句通过创建一个名为r的Rectangle实例并调用其area()方法来对这个类进行测试。

执行输出结果为:

area: 50

方法还可以有指针接收器,即指向该类型的指针。例如:

type Circle struct {
   radius float64
}

func (c *Circle) area() float64 {
   return math.Pi * c.radius * c.radius
}

func main() {
   c := Circle{radius: 5}
   fmt.Println("area:", c.area())
}

上述代码定义了类型Circle,该类型有radius一个字段,同时定义了方法area(),并通过指针接收器指向该类型。因此,area()方法将会更改Circle实例上的值。

最后,我们需要注意到,除非被明确地标记为复制类型(receicer),否则Golang中的所有类型都可以具有方法。然而,在某些情况下,尤其是在高性能行业时,方法使用指针接收器(receiver)在性能上更加高效。然而,你需要记住这些规则,因为如果你不小心写了错误的方法,则会导致程序出现错误。

三、总结

在Golang语言中,函数和方法(类)是基本的编程单元。通过学习函数的语法结构,我们可以很方便地定义和调用函数,使程序结构更加清晰简洁。同时,方法内置于类中,是类的一部分,因此封装了该类中的实例变量和方法。这样,我们可以更加方便地管理程序的各种信息和方法,并且避免了资源的浪费。

以上是golang函数 方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:golang 高级用法下一篇:golang 做除法