写点什么

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

作者:梦想橡皮擦
  • 2022 年 8 月 22 日
    河北
  • 本文字数:1532 字

    阅读完需:约 5 分钟

⛳️ 实战场景

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


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


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


func 函数名(形参列表)(返回值类型){  函数体}
复制代码


从语法格式尚,可以看出一个与 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)}
复制代码


还是要记住第一篇博客我们就涉及的知识点,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)}
复制代码

⛳️ 其它实践

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


func format(name string) (string, int) {
var ret string
ret = fmt.Sprintf("传入的参数值是,%s", name) return ret, 18}
func format() {
fmt.Print("重载函数")}
复制代码


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)
}
复制代码


上述代码的写法就非常有趣,在函数首行声明时,直接指定了返回变量很返回值类型,使用 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)
}
复制代码


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


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


package main
import "fmt"
func add(a, b int) int {
return a + b}
func main() { c := add // 函数赋值给变量
sum := c(1, 2) fmt.Println(sum)}
复制代码

⛳️ Go 匿名函数

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


func (参数列表)(返回参数列表){  函数体}
复制代码


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


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


匿名函数直接使用


package main
import "fmt"
func main() { func(a, b int) { fmt.Println("匿名函数", a, b) }(1, 2)}
复制代码


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


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


package main
import "fmt"
func main() { add := func(a, b int) int { return a + b }
ret := add(1, 2) fmt.Print("匿名函数的使用,返回值是", ret)}
复制代码


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


发布于: 刚刚阅读数: 3
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
【Gopher 学个函数】边学边练,简单为 Go 上个分_Python_梦想橡皮擦_InfoQ写作社区