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

go中的函数

demo1:函数的几种定义方式

package mainimport ("errors""fmt"
)/*
函数的用法
跟其他语言的区别:支持多个返回值*///函数定义方法1
func add(a, b int) int {return a + b
}//函数定义方法2
func add2(a, b int) (sun int) {sun = a + breturn sun
}//函数定义方法3:返回多个值
func div(a, b int) (int, error) {var err errorvar result intif b == 0 {err = errors.New("除数不能为0")} else {result = a / b}return result, err
}func main() {res, err := div(12, 3)if err != nil {fmt.Println(err)} else {fmt.Println(res)}}

demo2: 参数传递的几种方式

package mainimport "fmt"/*
函数的用法
省略号参数用法1:
当有不定个值需要传入函数时,可以使用省略号。省略号参数用法2:
用slice实现*///方法1
func add3(a ...int) (sum int) {for _, v := range a {sum += v}return
}//方法2
func add4(a []int) (sum int) {for _, v := range a {sum += v}a[0] = 9return
}//方法3func main() {/*方法1fmt.Println(add3(1, 2))fmt.Println(add3(1, 2, 3))fmt.Println(add3(1, 2, 3, 4))*//*方法2slice1 := []int{1, 2}fmt.Println(slice1)fmt.Println(add4(slice1))fmt.Println(slice1) //可以发现调用完函数后,slice1的值发生变化,因为传递的是引用类型的参数*/arr := [...]int{1, 2, 3}fmt.Printf("%T", arr) // 数组类型fmt.Println()arr2 := []int{1, 2, 3}fmt.Printf("%T", arr2) // 切片类型}

demo3:函数作为变量的值或参数

1、函数可以当做其他变量的值

2、函数可以作为参数传递给其他函数

package mainimport "fmt"/*
函数的用法
1、函数当做值赋值给其他变量2、函数作为参数传递给其他函数*/type sub func(a, b int) intfunc filter(score []int) []int {res := make([]int, 0)for _, v := range score {if v >= 60 {res = append(res, v)}}return res
}//  将函数作为参数传递给其他函数
func filter2(score []int, f func(int2 int) bool) []int {res := make([]int, 0)for _, v := range score {if f(v) {res = append(res, v)}}return res
}func main() {/*函数当做值赋值给其他变量实现res := func(a, b int) int {return a + b}(1, 2)fmt.Println(res)fmt.Println(res + 3)*/var mySub = func(a, b int) int {return a - b}fmt.Println(mySub(1, 2))score := []int{10, 50, 70, 80, 95}fmt.Println(filter(score))//方法filter2调用fmt.Println(filter2(score, func(a int) bool {if a >= 60 {return true} else {return false}}))}

defer使用

demo

package mainimport "fmt"/*
defer的使用
go语言中,没有try...expect...finally机制,是用defer机制处理
注意:defer之后只能是函数调用,不能是表达式。一些应用的场景:
·文件的打开和关闭
·数据库连接的开启和关闭
·线程锁的获取和释放
·事务锁的添加和释放defer的本质是注册了一个延迟函数,
*/func f() int {x := 10defer func() {fmt.Println(x) //此处的x是外部的x,实际上就是闭包}()x++return 13
}func main() {/*面对异常defer依然执行fmt.Println("test1")defer fmt.Println("defer test")panic("error")fmt.Println("test2")*//*多个defer语句执行顺序是逆序的,遵循先进先出原则fmt.Println("test")defer fmt.Println("defer test1")defer fmt.Println("defer test2")defer fmt.Println("defer test3")*//*最终只会输入结果:test1  因为defer执行时候的拷贝机制test := func() {fmt.Println("test1")}defer test()test = func() {fmt.Println("test2")}*//*下面这段最终输出结果为10而不是11,这跟拷贝机制有关x:=10defer func(a int) {fmt.Println(a)}(x)x++下面这段最终输出结果为11x := 10defer func(a *int) {fmt.Println(*a)}(&x)x++下面这段最终输出结果为11x := 10defer func() {		//匿名函数fmt.Println(x)}()x++*///调用f(),这里输出结果为11,13,说明defer是在return之前执行fmt.Println(f())
}

相关文章:

go中的函数

demo1:函数的几种定义方式 package mainimport ("errors""fmt" )/* 函数的用法 跟其他语言的区别:支持多个返回值*///函数定义方法1 func add(a, b int) int {return a b }//函数定义方法2 func add2(a, b int) (sun int) {sun a breturn s…...

小试 InsCode AI 创作助手

个人理解: 自ChatGPT新版现世,一直被视面替代人工工作的世大挑战,各类人工智能语言生成工目层出不穷,也在不断影响着我们日常的工作和生活 小试CSDN的InsCode AI: - 基本概念查询方便,与个人了解&…...

粉丝经验分享:13:00 开始的面试,13:06 就结束了,问题真是变态

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

SASS的@规则

1,import sass扩展了import导入,对于css,import导入在页面加载的时候去下载导入的外部文件,而sass的导入,在编译成css文件的时候就将外部的sass文件导入合并编译成一个css文件。 他支持同时导入多个文件;…...

【C++初阶】模拟实现优先级队列priority_queue

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…...

如何为你的公司选择正确的AIGC解决方案?

如何为你的公司选择正确的AIGC解决方案? 摘要引言词汇解释(详细版本)详细介绍1. 确定需求2. 考虑技术能力3. 评估可行性4. 比较不同供应商 代码快及其注释注意事项知识总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…...

Windows下将nginx等可执行文件添加为服务

Windows下将nginx等可执行文件添加为服务 为什么将可执行文件添加为服务?将可执行文件添加为服务的步骤步骤 1:下载和安装 Nginx步骤 2:添加为服务方法一:使用 Windows 自带的 sc 命令方法二:使用 NSSM(Non…...

视觉SLAM14讲笔记-第4讲-李群与李代数

李代数的引出: 在优化问题中去解一个旋转矩阵,可能会有一些阻碍,因为它对加法导数不是很友好(旋转矩阵加上一个微小偏移量可能就不是一个旋转矩阵),因为旋转矩阵本身还有一些约束条件,那样再求…...

浅析Redis(1)

一.Redis的含义 Redis可以用来作数据库,缓存,流引擎,消息队列。redis只有在分布式系统中才能充分的发挥作用,如果是单机程序,直接通过变量来存储数据是更优的选择。那我们知道进程之间是有隔离性的,那么re…...

【每日一题】2337. 移动片段得到字符串

【每日一题】2337. 移动片段得到字符串 2337. 移动片段得到字符串题目描述解题思路 2337. 移动片段得到字符串 题目描述 给你两个字符串 start 和 target ,长度均为 n 。每个字符串 仅 由字符 ‘L’、‘R’ 和 ‘_’ 组成,其中: 字符 ‘L’…...

MySQL 数据库常用命令大全(详细)

文章目录 1. MySQL命令2. MySQL基础命令3. MySQL命令简介4. MySQL常用命令4.1 MySQL准备篇4.1.1 启动和停止MySQL服务4.1.2 修改MySQL账户密码4.1.3 MySQL的登陆和退出4.1.4 查看MySQL版本 4.2 DDL篇(数据定义)4.2.1 查询数据库4.2.2 创建数据库4.2.3 使…...

中国移动加大布局长三角,打造算力产业新高地

8月27日,以“数实融合算启未来”为主题的2023长三角算力发展大会在苏州举办,大会启动了长三角算力调度枢纽,携手各界推动算力产业高质量发展。 会上,移动云作为第一批算力资源提供方,与苏州市公共算力服务平台签订算力…...

话费、加油卡、视频会员等充值接口如何对接?

现在很多商家企业等发现与用户保持粘性是越来越难了,大多数的用户活跃度都很差,到底该怎么做才能改善这种情况呢? 那么我们需要做的就是投其所好,在与用户保持粘性的app或者积分商城中投入大家感兴趣的物品或者虚拟产品&#xff…...

服务器重启MongoDB无法启动

文章目录 服务器重启MongoDB无法启动背景规划实施 总结 服务器重启MongoDB无法启动 背景 数据库服务器的CPU接近告警值了,需要添加CPU资源,于是乎就在恰当的时间对服务器进行关机,待添加完资源后开机,这样就完成了CPU资源的添加…...

深度刨析数据在内存中的存储

✨博客主页:小钱编程成长记 🎈博客专栏:进阶C语言 深度刨析数据在内存中的存储 1.数据类型介绍1.1 类型的基本归类 2.整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍 3.浮点型在内存中的存储3.1 一个例子3.2 浮点数的存储规则3.3指数…...

理解FPGA中的亚稳态

一、前言 大家应该经常能听说到亚稳态这个词,亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态,过了这段时间触发器的输出随机选择输出0/1,这是我们在设计时需要避免的。本文主要讲述了FPGA中的亚稳态问题,可以帮助…...

Leetcode86. 分隔链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台…...

如何处理 Flink 作业中的数据倾斜问题?

分析&回答 什么是数据倾斜? 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点。 举例:一个 Flink 作业包含 200 个 Task 节点,其中有 199 个节点可以在很短的时间内完成计算。但是有一个节点执行时间…...

cobbler自动化安装CentOS、windows和ubuntu

环境介绍 同时玩cobbler3.3和cobbler2.8.5 cobbler3.3 系统CentOS8.3 VMware虚拟机 桥接到物理网络 IP: 192.168.1.33 cobbler2.8.5 系统CentOS7.9 VMWare虚拟机 桥接到物理网络 IP:192.168.1.33 安装cobbler3.3 yum源修改 cat /etc/yum.repo.d/Cento…...

springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4

一 工程结构 1.1 工程 1.2 搭建gatewayapi工程 1.pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--gateway--&g…...

终极Kando多语言指南:如何快速实现跨平台饼状菜单的国际化支持

终极Kando多语言指南&#xff1a;如何快速实现跨平台饼状菜单的国际化支持 【免费下载链接】kando &#x1f338; Do things with utmost efficiency. 项目地址: https://gitcode.com/gh_mirrors/ka/kando Kando是一款高效的跨平台饼状菜单工具&#xff0c;通过直观的径…...

Gemma-3-12b-it Streamlit应用实战:顶部像素控制面板CSS3定制详解

Gemma-3-12b-it Streamlit应用实战&#xff1a;顶部像素控制面板CSS3定制详解 1. 引言&#xff1a;从传统侧边栏到像素控制面板 如果你用过Streamlit&#xff0c;肯定对那个默认的侧边栏不陌生。它很方便&#xff0c;但有时候也挺碍事——特别是当你想要一个全屏、沉浸式的对…...

LTR308环境光传感器驱动开发与嵌入式集成指南

1. LTR308环境光传感器库技术解析与工程实践指南Lite-On LTR-308 是一款高精度、低功耗的环境光传感器&#xff08;Ambient Light Sensor, ALS&#xff09;&#xff0c;专为智能手机、平板电脑、可穿戴设备及工业人机界面等对光照感知精度和能效比要求严苛的应用场景设计。其核…...

Diablo Edit2实战解决方案:从存档修复到角色定制的完整指南

Diablo Edit2实战解决方案&#xff1a;从存档修复到角色定制的完整指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神II的冒险旅程中&#xff0c;每位玩家都可能遭遇存档损坏、属性…...

DICOM序列实时渲染从28fps到126fps:C++无锁队列+GPU命令缓冲复用+ROI局部重绘的工业级调优日志

第一章&#xff1a;DICOM序列实时渲染性能跃迁全景概览 现代医学影像工作流对DICOM序列的实时可视化提出严苛要求&#xff1a;从百层CT扫描到高分辨率MRI动态序列&#xff0c;传统CPU软渲染方案常遭遇帧率跌破15 FPS、交互延迟超300ms的瓶颈。近年来&#xff0c;GPU加速管线、零…...

Transformer 原理与实现(二):从代码看透 Transformer

在上一篇文章 [Transformer 原理与实现&#xff08;一&#xff09;&#xff1a;从 Attention 到编码解码机制](https://blog.csdn.net/Cha0DD/article/details/159753362) 中&#xff0c;我们从概念层面深入理解了 Transformer 的核心机制。 今天&#xff0c;我们将通过实际的…...

再次了解 AI Harness

这其实是一次 tenantId 联调 bug&#xff0c;暴露了 AI 项目最缺的不是模型&#xff0c;而是Harness前面没整理完的关于Harness Engineering 的文章&#xff0c;为啥整理这一篇是因为这让我意识到一个趋势正在形成&#xff1a;AI 开发正在从"写提示词"转向"构建…...

MinIO实战指南:Linux环境下的部署、配置与防火墙调优

1. MinIO是什么&#xff1f;为什么选择它&#xff1f; 如果你正在寻找一个轻量级、高性能的对象存储解决方案&#xff0c;MinIO绝对值得一试。作为一个开源的分布式对象存储系统&#xff0c;它兼容Amazon S3 API&#xff0c;这意味着你可以用极低的成本搭建私有云存储服务。我在…...

Linux下C/C++高效调试工具与技巧全解析

1. Linux终端下C/C调试工具演进史作为一名长期在Linux环境下开发C/C程序的老兵&#xff0c;我深刻理解调试工作对开发效率的影响。很多人对GDB的印象还停留在原始的命令行界面&#xff0c;实际上经过多年发展&#xff0c;终端下的调试工具已经形成了完整的生态体系。从最基础的…...

深入解析RPN(区域生成网络):从原理到Faster RCNN的实战应用

1. RPN的前世今生&#xff1a;从Selective Search到神经网络革命 第一次接触物体检测时&#xff0c;我对着Selective Search算法输出的杂乱无章的建议框直挠头。这个传统方法就像在图片上撒豆子&#xff0c;不仅速度慢&#xff08;CPU处理单张图要2秒&#xff09;&#xff0c;…...