当前位置:网站首页>【Gopher 学个函数】边学边练,简单为 Go 上个分
【Gopher 学个函数】边学边练,简单为 Go 上个分
2022-08-04 15:17:00 【华为云】
️ 实战场景
今天我们要完成的核心内容是 Go 函数的学习,Go 中支持普通函数,匿名函数和闭包函数,对于学过 Python 的同学来说,都不是新鲜概念。
首先接触的依旧是普通函数的使用,在 Go 中,函数的基本组成有 func 关键字,函数名,参数列表,函数体,返回值几个部分。
转换成语法格式如下所示:
func 函数名(形参列表)(返回值类型){ 函数体}从语法格式尚,可以看出一个与 Python 比较大的差异,就是形参列表后跟了返回值类型列表,当然该值非必须,毕竟有些场景下的函数是不需要返回值的。
接下来我们就编写一个简单的函数,其实现的需求是:传入一个名称 name,返回格式化的语句,代码如下:
package mainimport "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 mainimport "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 mainimport "fmt"func add(a, b int) (c int) { c = a + b return}func main() { c := add(1, 2) fmt.Println(c)}上述代码的写法就非常有趣,在函数首行声明时,直接指定了返回变量很返回值类型,使用 return 语句即可直接返回对应值,多个返回值也可以使用该写法。
package mainimport "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 mainimport "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 mainimport "fmt"func main() { func(a, b int) { fmt.Println("匿名函数", a, b) }(1, 2)}需要注意匿名函数如果直接使用,要在其它函数内部调用,其不能单独成一块代码存在。
匿名函数赋值给变量
匿名函数声明完毕,可以将其赋值给任意变量,后续该变量等同于该函数。
package mainimport "fmt"func main() { add := func(a, b int) int { return a + b } ret := add(1, 2) fmt.Print("匿名函数的使用,返回值是", ret)}
你正在阅读 【梦想橡皮擦】 的博客
阅读完毕,可以点点小手赞一下
发现错误,直接评论区中指正吧
橡皮擦的第 703 篇原创博客
边栏推荐
- 动态数组底层是如何实现的
- Online Excel based on Next.js
- 华为云 & 达达,帮有情人“一键送达”
- Oracle 数据库用户创建、重启、导入导出
- 明明加了唯一索引,为什么还是产生重复数据?
- 程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房
- 指数族分布与最大熵
- 【Web技术】1401- 图解 Canvas 入门
- Bluetooth Technology|In the first half of the year, 1.3 million charging piles were added nationwide, and Bluetooth charging piles will become the mainstream of the market
- 关于pnpm包管理器的版本问题
猜你喜欢

Pisanix v0.2.0 发布|新增动态读写分离支持

Redis-哨兵模式

基于 Next.js实现在线Excel

手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果

MVCC实现过程

365天挑战LeetCode1000题——Day 049 非递增顺序的最小子序列 贪心

Hangzhou Electric School Competition (Counter Attack Index)

IP第十八天笔记

This week to discuss the user experience: Daedalus Nemo to join Ambire, explore the encryption of the ocean

什么是 DevOps?看这一篇就够了!
随机推荐
Redis-哨兵模式
动态数组底层是如何实现的
Cisco - Small Network Topology (DNS, DHCP, Web Server, Wireless Router)
16、学习MySQL 正则表达式
【Harmony OS】【FAQ】鸿蒙问题合集2
IP第十六天笔记
Redis-哨兵模式
【云原生 | 从零开始学Kubernetes】kubernetes之StatefulSet详解
C# 判断文件编码
C端折戟,转战B端,联想的元宇宙梦能成吗?
性能提升400倍丨外汇掉期估值计算优化案例
Technology sharing | Description of the electronic fence function in the integrated dispatching system
如何和程序员谈恋爱
Latex 去掉行号
numpy入门详细代码
1401 - Web technology 】 【 introduction to graphical Canvas
多线程编程之优先级翻转问题
华为云 & 达达,帮有情人“一键送达”
微软表示将向内部网络安全专家共享数据 为企业提供更安全保护
Technology sharing | Mini program realizes audio and video calls