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

网友投稿 348 2022-08-22


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

@[toc]

⛳️ 实战场景

今天我们要完成的核心内容是 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) }

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 匿名函数

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) }


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用gRPC微服务的内部通信优化
下一篇:compute nova日志报错403(computer science)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~