• 【Gopher 学个函数】边学边练,简单为 Go 上个分


    ⛳️ 实战场景

    今天我们要完成的核心内容是 Go 函数的学习,Go 中支持普通函数,匿名函数和闭包函数,对于学过 Python 的同学来说,都不是新鲜概念。

    首先接触的依旧是普通函数的使用,在 Go 中,函数的基本组成有 func 关键字,函数名,参数列表,函数体,返回值几个部分。

    转换成语法格式如下所示:

    func 函数名(形参列表)(返回值类型){
    	函数体
    }
    
    • 1
    • 2
    • 3

    从语法格式尚,可以看出一个与 Python 比较大的差异,就是形参列表后跟了返回值类型列表,当然该值非必须,毕竟有些场景下的函数是不需要返回值的。

    接下来我们就编写一个简单的函数,其实现的需求是:传入一个名称 name,返回格式化的语句,代码如下:

    package main
    
    import "fmt"
    
    func format(name string) string {
    
    	var ret string
    
    	ret = fmt.Sprintf("传入的参数值是,%s", name)
    	return ret
    }
    
    func main() {
    	ret := format("橡皮擦")
    	fmt.Println(ret)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    还是要记住第一篇博客我们就涉及的知识点,Go 语言最少有 1 个 main() 函数,而且还要注意 main() 函数无参数和返回值。

    如果希望函数有多个返回值,仅需要在函数声明时,初始化多个返回类型即可。

    package main
    
    import "fmt"
    
    func format(name string) (string, int) {
    
    	var ret string
    
    	ret = fmt.Sprintf("传入的参数值是,%s", name)
    	return ret, 18
    }
    
    func main() {
    	ret, age := format("橡皮擦")
    	fmt.Println(ret)
    	fmt.Println(age)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ⛳️ 其它实践

    在 Go 中不支持重载,而且一个包不能有两个名字一样的函数,例如下述代码是错误的。

    func format(name string) (string, int) {
    
    	var ret string
    
    	ret = fmt.Sprintf("传入的参数值是,%s", name)
    	return ret, 18
    }
    
    func format() {
    
    	fmt.Print("重载函数")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Go 的返回值,可以不指定内容,即下述代码:

    package main
    
    import "fmt"
    
    func add(a, b int) (c int) {
    	c = a + b
    	return
    }
    
    func main() {
    	c := add(1, 2)
    	fmt.Println(c)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    上述代码的写法就非常有趣,在函数首行声明时,直接指定了返回变量很返回值类型,使用 return 语句即可直接返回对应值,多个返回值也可以使用该写法。

    package main
    
    import "fmt"
    
    func add(a, b int) (c, d int) {
    	c = a + b
    	d = a
    	return
    }
    
    func main() {
    	c, _ := add(1, 2)
    	fmt.Println(c)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    以上代码展示了多个变量返回,并且使用标识符 _ 忽略了第二个返回值。

    由于函数也是一种类型,所以函数也可以赋值给任意变量,具体代码如下所示:

    package main
    
    import "fmt"
    
    func add(a, b int) int {
    
    	return a + b
    }
    
    func main() {
    	c := add // 函数赋值给变量
    
    	sum := c(1, 2)
    	fmt.Println(sum)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ⛳️ Go 匿名函数

    在 Go 语言中,匿名函数是由一个不带函数名的函数声明和函数体组成,其语法格式如下所示:

    func (参数列表)(返回参数列表){
    	函数体
    }
    
    • 1
    • 2
    • 3

    从语法格式也能发现,仅缺少函数名。

    接下来我们进行二种实践,其一是在匿名函数声明之后,直接使用,其二是将匿名函数赋值给变量使用。

    匿名函数直接使用

    package main
    
    import "fmt"
    
    func main() {
    	func(a, b int) {
    		fmt.Println("匿名函数", a, b)
    	}(1, 2)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    需要注意匿名函数如果直接使用,要在其它函数内部调用,其不能单独成一块代码存在。

    匿名函数赋值给变量
    匿名函数声明完毕,可以将其赋值给任意变量,后续该变量等同于该函数。

    package main
    
    import "fmt"
    
    func main() {
    	add := func(a, b int) int {
    		return a + b
    	}
    
    	ret := add(1, 2)
    	fmt.Print("匿名函数的使用,返回值是", ret)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    📢📢📢📢📢📢
    💗 你正在阅读 【梦想橡皮擦】 的博客
    👍 阅读完毕,可以点点小手赞一下
    🌻 发现错误,直接评论区中指正吧
    📆 橡皮擦的第 703 篇原创博客

    从订购之日起,案例 5 年内保证更新

  • 相关阅读:
    Kettle安装初始化问题
    前端Vue 页面滑动监听 拿到滑动的坐标值
    stm32-----定时中断基本结构
    Linux命令查看CPU、内存、IO使用情况简单介绍
    微软和Red Hat合体:帮助企业更方便部署容器
    大数据之巅:深入分析数据湖架构的优势
    IO模型介绍(select、poll、epoll)
    jvm参数顺序问题
    基于Echarts实现可视化数据大屏3D元素周期表(1页)
    [LiteratureReview]A Collaborative Visual SLAM Framework for Service Robots
  • 原文地址:https://blog.csdn.net/hihell/article/details/126082673