Golang中的自定义函数详解

 更新时间:2018年10月07日 09:50:28   作者:_AlphaBaby_  
函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

不管是面向过程的编程,还是面向对象的编程,都离不开函数的概念,分别是,参数,函数名,返回值。接下来我们看看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)
}

相关文章

  • go micro微服务proto开发安装及使用规则

    go micro微服务proto开发安装及使用规则

    这篇文章主要为大家介绍了go micro微服务proto开发中安装Protobuf及基本规范字段的规则详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Go整合ElasticSearch的示例代码

    Go整合ElasticSearch的示例代码

    这篇文章主要介绍了Go整合ElasticSearch的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • golang 生成二维码海报的实现代码

    golang 生成二维码海报的实现代码

    这篇文章主要介绍了golang 生成二维码海报的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 一文搞懂Golang 值传递还是引用传递

    一文搞懂Golang 值传递还是引用传递

    最多人犯迷糊的就是 slice、map、chan 等类型,都会认为是 “引用传递”,从而认为 Go 语言的 xxx 就是引用传递。正因为它们还引用类型(指针、map、slice、chan等这些),这样就可以修改原内容数据,这篇文章主要介绍了Golang 值传递还是引用传递,需要的朋友可以参考下
    2023-01-01
  • victoriaMetrics库布隆过滤器初始化及使用详解

    victoriaMetrics库布隆过滤器初始化及使用详解

    这篇文章主要为大家介绍了victoriaMetrics库布隆过滤器初始化及使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • go语言执行等待直到后台goroutine执行完成实例分析

    go语言执行等待直到后台goroutine执行完成实例分析

    这篇文章主要介绍了go语言执行等待直到后台goroutine执行完成的方法,实例分析了Go语言中WaitGroup的使用技巧,需要的朋友可以参考下
    2015-03-03
  • Go语言中使用flag包对命令行进行参数解析的方法

    Go语言中使用flag包对命令行进行参数解析的方法

    这篇文章主要介绍了Go语言中使用flag包对命令行进行参数解析的方法,文中举了一个实现flag.Value接口来自定义flag的例子,需要的朋友可以参考下
    2016-04-04
  • 从并发到并行解析Go语言中的sync.WaitGroup

    从并发到并行解析Go语言中的sync.WaitGroup

    Go 语言提供了许多工具和机制来实现并发编程,其中之一就是 sync.WaitGroup。本文就来深入讨论 sync.WaitGroup,探索其工作原理和在实际应用中的使用方法吧
    2023-05-05
  • 一文详解Go语言中的有限状态机FSM

    一文详解Go语言中的有限状态机FSM

    有限状态机(Finite State Machine,FSM)是一种数学模型,用于描述系统在不同状态下的行为和转移条件。本文主要来和大家简单讲讲Go语言中的有限状态机FSM的使用,需要的可以参考一下
    2023-04-04
  • 使用Go语言创建静态文件服务器问题

    使用Go语言创建静态文件服务器问题

    这篇文章主要介绍了使用Go语言创建静态文件服务器,本文通过试了代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论