Golang中的自定义函数

_AlphaBaby_ · · 5066 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

不管是面向过程的编程,还是面向对象的编程,都离不开函数的概念,分别是,参数函数名返回值。接下来我们看看Go语言在这三个方面是做怎么操作的吧。

参数

谈到参数,我们在写函数或者是类中的方法的时候都需要考虑我们应该传递怎样的参数,或者是是否需要参数。
参数首先分为无参函数有参。无参也就是没有参数,也就不用写了。

有参

func functionTest() {  # 小括号内就是用来放参数的
    # 函数体内
}

Go语言是强数据类型的语言,参数是要指定类型的不然就报错。func 是函数的声明关键字。

func 函数名(参数列表) 返回值类型 {函数体内部}

func addTwoNumber(a int, b int) int {
    return a + b
}

我们这里写了一个很简单的函数,把两个数相加并返回结果
这里我们要注意,参数的类型是写在参数名的后面,和变量定义是一样的。

func addTwoNumber(a int, b int)  (sum int) {
    return a+b
}

返回值的定义,是可以给返回值取一个名称的,还有一点是和其他的编程语言不一样的是在Go语言中函数的返回值可以有多个的。

func addTwoNumber(a int, b int)  (int, int) {
    return a+b, a-b
}

同时可以给返回值取一个别名

func addTwoNumber(a int, b int)  (sum, dif int) {
    return a+b, a-b
}

像这样给返回值取完名字后可以给返回值直接赋值

func addTwoNumber(a int, b int)  (sum, dif int) {
    sum = a+b
    dif = a-b
    return
}

同样这样也是可以直接返回sum,和dif两个值的。

同时Go语言也具有和c语言一样的匿名参数只做占位的作用,Go语言还不仅如此,还有声明变量可以占位的功能。

func addTwoNumber(int, b int)  (int, int) {
    return b, b
}
func main() {
    a, _, c := 1, 2, 3
    fmt.Println(a, c)
}

其中_是用来占位的,并不可以使用。
可变参数列表

func sum(numbers ...int) int {
    s := 0
    for i := range numbers{
        s += i
    }
    return s
}
func main() {
    fmt.Println(sum(1,2,3,4,5))
}

像这样我们就可以传给sum函数多个值了。

Go中的值传递,地址传递

在很多语言中,在调用函数或者是方法的时候,都是要考虑我们是传递还是传递地址(在某些语言中叙述的是传递引用),到底是传递值还是传递地址这一概念是非常重要的,我们应该弄清楚。

我们用一个交换数的例子来讲解:
值传递

package main

import "fmt"

func swap(x, y int) {
    var temp = x
    x = y
    y = temp
}
func main() {
    a,b := 1,2
    swap(a,b)
    fmt.Println(a, b)
}
值传递

地址传递

package main

import "fmt"

func swap(a, b *int) {
    var temp = *a
    *a = *b
    *b = temp
}
func main() {
    a,b := 1,2
    swap(&a,&b)
    fmt.Println(a, b)
}
地址传递

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:_AlphaBaby_

查看原文:Golang中的自定义函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5066 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传