当前位置: 首页 > news >正文

六、go函数

函数在任何语言中并不难理解,但是不论是有几年开发经验的人,真正想要写好一个函数并不是那么容易的

1、go语言中函数结构

func main() {fmt.Println(isEven(2))
}
func isEven(x int) bool {return x%2 == 0
}

(这里我写了一个简单的判断是否是偶数的函数)
在go函数中,func是关键字代表这是一个函数,isEven是自定义方法名,x int 是入参,bool是方法返回(对于java开发人员来说需要一定的时间去适应这种写法)

2、函数中返回多个值

func moreReturn() (int, string) {i := 2s := "test"return i, s
}

在上述案例中,按go的函数返回值写法将多个返回值如int与string包在括号中

2.1、将函数中返回值赋值给函数调用者

func main() {a, b := moreReturn()fmt.Println(a, b)
}func moreReturn() (int, string) {i := 2s := "test"return i, s
}

3、函数中的参数
**在go语言中可以选择定义或不定义参数,定义一个或者多个参数
但是有一种情况当我们自己也不知道入参多少的时候怎么办?

func main() {fmt.Println(add(1, 2, 3, 4, 5))
}func add(numbers ...int) int {total := 0for _, num := range numbers {total += num}return total
}

在函数的入参中添加numbers …[类型] 即可,在调用方法入参数中,每个值用,号进行分割。在java中也有类似的写法只是在go语言中参数类型顺序颠倒了而已

4、具名返回值
这个非常有意思,至少是在java语言中没有的一种写法
首先什么叫做具名,这个词不常见,指的是:

具名是指在文件、‌文本上签署姓名,‌通常涉及双方共同签署的情况。‌
这个词汇在法律、‌文件处理等领域中经常出现,‌用于确保文件的合法性和有效性。‌

那么具名返回值中的返回值具名(签署)就在函数的返回值中
例如

func ret() (a, b string) {a = "test"b = "test1"return
}

我们可以看到在上述的返回值中定义了a和b两个返回值名称,当函数中给a与b赋值后直接可以进行return关键字返回即可,若调用方法可以发现会按a,b的具名顺序进行返回。

5、递归函数

func forEach(a, b int) int {a += bif a > 5 {fmt.Println(a)return a}fmt.Println(a)return forEach(a, b)
}
#结果
2
3
4
5
6
6

这种写法在java中也可以完成

public static int forEach(int a, int b) {a += b;if (a > 5) {System.out.println(a);return a;}System.out.println(a);return forEach(a, b);}#结果23456

6、将函数作为值传递
6.1 将函数赋值给变量

func main() {fn := func() {fmt.Println("将函数做为值传递")}fn()
}

6.2 将函数作为参数传递

func main() {fn := func() string {return "将函数作为参数"}//这里的fn变量需要注意,这里拿到的不是方法的返回值,而是把方法赋给了fnfmt.Println(otherFunc(fn))
}func otherFunc(f func() string) string {return f()
}

这里otherFunc函数中,f是变量名,func()代表这个参数是方法 string是这个方法的返回值,括号外面的string是otherFunc的返回值

相关文章:

六、go函数

函数在任何语言中并不难理解,但是不论是有几年开发经验的人,真正想要写好一个函数并不是那么容易的 1、go语言中函数结构 func main() {fmt.Println(isEven(2)) } func isEven(x int) bool {return x%2 0 }(这里我写了一个简单的判断是否是…...

高原型垂直起降高速无人机技术详解

1. 技术概述 高原型垂直起降高速无人机(High-Altitude Vertical Take-off and Landing High-Speed Unmanned Aerial Vehicle, HAVTHS UAV)是针对高原复杂环境设计的一种先进无人机系统。它结合了垂直起降的灵活性与高速飞行的能力,能够克服高…...

Selenium + Python 自动化测试10(unittest概念)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上几篇我们讨论了元素的定位方法、操作方法以及一些特殊元素的操作。 在实际的测试项目组中每个模块会写多条案例,如第一条用例那里我们的登录。登录的话就可以有多…...

大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用

文章目录 引言ADetailer插件介绍插件安装常用模型控制提示词参数配置参数详解 实践建议 示例插件的对比:1. ADetailer插件2. Photoshop插件(如Nik Collection)3. GIMP插件(如GMIC)4. Affinity Photo插件 结语 引言 无…...

【Pytorch】topk函数

topk 是 PyTorch 中的一个函数,用于从张量中选取最大(或最小)的 k 个元素及其对应的索引。其定义如下: values, indices torch.topk(input, k, dimNone, largestTrue, sortedTrue, *, outNone)参数说明 input (Tensor): 输入张…...

使用mybatis注解和xml映射执行javaWeb中增删改查等操作

Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解) Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…...

SpringBoot3 响应式编程

Spring Boot 3 中的响应式编程是一个重要的特性,它允许开发者构建非阻塞、异步和基于事件的应用程序,这对于处理高并发和实时数据流的应用场景尤为重要。以下是对Spring Boot 3响应式编程的详细解析: 一、响应式编程概述 响应式编程是一种编…...

【C++ 面试 - 基础题】每日 3 题(二)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

Modelica建模,Modelica语言的学习,技术调研工作

Modelica建模,Modelica语言的学习,技术调研工作 参考资料: 苏州同元软控信息技术有限公司 - 同元 Modelica 再探冷却 modelica学习-CSDN博客 1、 Modelica简介 Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规…...

Oracle数据字典之——v$lock 和v$locked_object

v$lock视图 v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下: 11g如下: 字段名称类型说明ADDRRAW(8)锁定状态对象的地址KADDRRAW(8)锁的地址SIDNUMBER会话(SESSION)标识;TYPE…...

solidity 以太坊(Ether) 单位(很基础)

一个字面常数可以带一个后缀 wei, gwei 或 ether 来指定一个以太坊的数量, 其中没有后缀的以太数字被认为单位是wei。 在以太坊和许多其他基于以太坊的区块链系统中,以太币(Ether)是网络中的主要加密货币。 以太可以被…...

关于elementUI 分页 table 使用 toggleRowSelection

我出现问题的前提 在table表格第一页全选 ,第二页全选 回到第一页 点击按钮 取消 第一页,第二页我不要的勾选 初始实现 this.selectedPeraonal是表格 selection-change方法返回的值 handleSelectionChange(val) {this.selectedPeraonal val || []…...

K8s部署RocketMQ

准备工作 我是win电脑,本地安装了Podman,并使用Kind创建了一个K8s本地环境,并在 win 电脑上安装了 Helm。 部署RocketMQ 1. add rocketmq helm repo 2. deploy rocketmq cluster 3. verify the rocketmq cluster 4. Create Topic by api a…...

Linux服务管理-Nginx配置

静态解析主要解析html、css动态解析需要解析php 动态资源通过轮询分配到后端的Apache服务器处理 apache是同步阻塞,nginx是异步非阻塞...

C语言典型例题31

《C程序设计教程(第四版)——谭浩强》 习题2.8 请编写程序将China译为密码,密码的规律是:用原来字母后面的第4个字母代替原来的字母。 例如:C后面的4个字母是G,h后面第4个字母为l 代码: //《C程序设计教程…...

FFMPEG 工具方法

av_strerror int av_strerror ( int errnum, char * errbuf, size_t errbuf_size )ffmpeg获取与设置mp4文件旋转方向方法 设置与获取都是对AVStream的dict操作. 设置 for (i 0; i < ifmt_ctx_v->nb_streams; i) { //Create output AVStream according to input A…...

Qt QML 使用QPainterPath绘制弧形曲线和弧形文本

Qt并没有相关api直接绘制弧形文字&#xff0c;但提供了曲线绘制相关类&#xff0c;所以只能另辟蹊径&#xff0c;使用QPainterPath先生成曲线&#xff0c;然后通过曲线上的点来定位每个文字并draw出来。 QML具体做法为从QQuickPaintedItem继承&#xff0c;在派生类中实现paint…...

VMware虚拟机和Docker的备份与恢复

目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…...

新加坡服务器延迟大吗?如何进行优化

新加坡服务器延迟大吗&#xff1f;新加坡服务器的延迟通常在全国平均延迟111ms左右&#xff0c;其中移动网络约为90ms&#xff0c;联通网络106ms&#xff0c;电信网络最低约为85ms。为了进行优化&#xff0c;一般可以采取使用CDN、优化路由线路、增加带宽和服务器升级等方法。 …...

uniapp——列表图片加载太多且空间占用太大的处理方法(降低清晰度)

解决方法 列表默认显示的降低清晰度&#xff0c;预览图片的时候加载原图。 如果图片是上传到阿里云的OSS上&#xff0c;可以快速获取图片缩略图的方法 直接在后端返回的URL后面拼接字符串&#xff1a; XXX.png?x-oss-process 缩略图方法介绍&#xff1a; ?x-oss-proces…...

spring+SSM+Mybatis面试题(上)(30道)

目录 1. 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗?2. Spring IOC 如何理解?3. Spring DI 如何理解?4. Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?1.配置作用域需要注解Scope(“Singleton”)2.开启延迟加载&#xff1a;La…...

odoo17 翻译一个小bug

odoo17 翻译一个小bug 用户界面的没译过来 标红处&#xff0c;但在zh_CN.po中明显已经翻译过来了&#xff0c;采取暴力点的&#xff0c;直接把base下的base.pot删除&#xff0c;再更新一下&#xff0c;可以正常显示了...

sqli-labs-php7-master第5-10关

第五关&#xff1a; 根据提示输入ID,随便来个一 输入100&#xff0c;因为数据库没有&#xff0c;所以这里没输出内容 还是先找注入点&#xff1a;输入单引号试试 注入点找到了‘ 查询数据库列数&#xff1b;&#xff1f;id1 order by 4 -- 测试发现order by 3时页面正常&…...

全方位教程:接入视频美颜SDK与直播美颜插件的完整步骤

今天&#xff0c;小编将为您详细介绍如何接入视频美颜SDK与直播美颜插件的完整步骤。 一、准备工作 开发环境的搭建 在开始集成之前&#xff0c;确保您的开发环境已配置完毕。无论是使用iOS、Android&#xff0c;还是Web开发&#xff0c;您都需要准备好对应的开发工具链&…...

Apache Curator 分布式锁的介绍,以及案例

可重入锁&#xff08;InterProcessMutex&#xff09;&#xff1a;这种锁允许同一个客户端多次获取同一把锁而不会被阻塞&#xff0c;类似于Java中的ReentrantLock。它通过在Zookeeper的指定路径下创建临时序列节点来实现锁的功能。如果获取锁失败&#xff0c;当前线程会监听前一…...

自动化测试 — selenium + Java

什么是自动化测试 将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括UI 自动化&#xff0c;接口自动化&#xff0c;单元测试自动化。按照这个金字塔模型来进行自动化测试规划&#xff0c;可以产生最佳的自贡话测试产出投入比&#xff08;ROI &#xff09;&#xff0c…...

【SpringBoot系列】接口参数的默认值与必要性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

茶余饭后(五)

真正出类拔萃的人 往往都是狠角色&#xff0c; 他们具备着一种独特的特质 那就是&#xff1a; 目标清晰 意志如铁 底线分明 同时手段又极为高明 且勤奋不屑 在处于劣势时 他们表现的极为谦逊和低调 像一只温顺无害的小羊羔 然而一旦时机成熟 他们便会毫不犹豫的展现出强…...

【网络编程详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &#x1f525…...