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

【golang】go 返回参数 以及go中 裸返

一、Go 返回参数命名

在Golang中,命名返回参数通常称为命名参数。

  • Golang允许在函数签名或定义中为函数的返回或结果参数指定名称。或者可以说这是函数定义中返回变量的显式命名。基本上,它解决了在return语句中提及变量名称的要求。 通过使用命名返回参数或命名参数,只能在函数末尾使用return关键字将结果返回给调用方。

  • 当函数必须返回多个值时,通常使用此概念。 因此,为了使用户感到舒适并增强代码的可读性,Golang提供了此功能。

1、声明命名的返回参数

package mainimport "fmt"// Main Method
func main() {//在这里调用函数//函数返回两个值m, d := calculator(105, 7)fmt.Println("105 x 7 = ", m)fmt.Println("105 / 7 = ", d)
}// 具有命名参数的函数
func calculator(a, b int) (mul int, div int) {//在这里,简单的赋值就可以//并初始化它的值mul = a * bdiv = a / b//这里有return关键字//没有任何结果参数return
}

输出:
105 x 7 = 735
105 / 7 = 15

2、重要事项

2.1、公共命名参数类型的函数

如果所有命名的返回参数的类型是公共的或相同的,则可以指定公共数据类型。将下面的代码与上面阅读的示例进行比较,以便更好地理解。

//有命名参数的函数
func calculator(a, b int) (mul, div int) {

此处,mul和div变量均为int类型。因此,您还可以声明具有通用数据类型的命名参数,例如函数变量(即a和b)

2.2、增加可读性

使用命名返回参数将增强代码的可读性,因为只需读取函数签名就可以知道返回参数。

2.3、使用“裸返”

使用命名的返回参数后,return语句通常称为"裸返"。
如下的return

func calculator(a, b int) (mul int, div int) {//在这里,简单的赋值就可以//并初始化它的值mul = a * bdiv = a / b//这里有return关键字//没有任何结果参数return
}

2.4、返回变量默认零值

默认情况下,Golang用零值定义所有命名变量,函数将能够使用它们。如果函数未修改值,则将自动返回零值

2.5、不要重复赋值

如果您将使用短声明运算符(:=)初始化命名的返回参数,则将给出错误,因为它们已被Go编译器初始化。因此,您可以使用简单的赋值方式(=)将值分配给命名的返回参数。

//具有命名参数的函数
func calculator(a, b int) (mul int, div int) {//在这里,它将抛出一个错误//因为已经定义了参数//在函数签名中mul := a * bdiv := a / b//这里有return关键字//没有任何结果参数return
}

编译都不通过,goland中直接爆红

二、裸返 应用场景

1、与defer使用

1.1、错误示例

下面代码返回什么?
知识点:goland中return不是一个原子操作

package mainimport "fmt"func test01() (result int) {defer func() {result++}()return 0
}func main() {fmt.Println(test01())
}

输出结果:
1

1.2、正确示例

func f() (result int) {result = 0  //return语句不是一条原子调用,return xxx其实是赋值+ret指令func() { //defer被插入到return之前执行,也就是赋返回值和ret指令之间result++}()return
}

输出结果:
1

相关文章:

【golang】go 返回参数 以及go中 裸返

一、Go 返回参数命名 在Golang中,命名返回参数通常称为命名参数。 Golang允许在函数签名或定义中为函数的返回或结果参数指定名称。或者可以说这是函数定义中返回变量的显式命名。基本上,它解决了在return语句中提及变量名称的要求。 通过使用命名返回参…...

elasticsearch深度分页问题

一、深度分页方式from size es 默认采用的分页方式是 from size 的形式,在深度分页的情况下,这种使用方式效率是非常低的,比如我们执行如下查询 1 GET /student/student/_search 2 { 3 "query":{ 4 "match_all":…...

32、Flink table api和SQL 之用户自定义 Sources Sinks实现及详细示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Java练习题-用冒泡排序法实现数组排序

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…...

【SV中的多线程fork...join/join_any/join_none】

SV中fork_join/fork_join_any/fork_join_none 1 一目了然1.1 fork...join1.2 fork...join_any1.3 fork...join_none 2 总结 SV中fork_join和fork_join_any和fork_join_none; Note: fork_join在Verilog中也有,只有其他的两个是SV中独有的; 1 一目了然 1.…...

翻译:网站整站翻译 / 网站国际化 / 极简实现

一、本文目标 以极简单的方法实现整站翻译,轻松实现国际化。 二、js 文件 https://res.zvo.cn/translate/translate.js 三、代码 代码放在浏览器控制台即可实现 var head document.getElementsByTagName(head)[0];var script document.createElement(script);sc…...

深度森林(deep-forest)安装

深度森林(deep-forest)安装 1、打开https://pypi.org/,搜索deep-forest,下载wheel文件 在下载好之后,打开文件下载的位置 首先对下载好的wheel文件进行改名,原名是: deep_forest-0.1.7-cp39-c…...

ping.pe ping 检测IP全球延迟

可以把结果保存为照片 https://ping.pe/全球ping ping ip端口检测 IP:PORT路由追踪 mtr IP 参考 ping.pe...

nodejs 16版本

Index of /download/release/latest-v16.x/...

NSSCTF做题(7)

[第五空间 2021]pklovecloud 反序列化 <?php include flag.php; class pkshow { function echo_name() { return "Pk very safe^.^"; } } class acp { protected $cinder; public $neutron; …...

【GIT版本控制】--高级分支策略

一、分支合并策略 在Git中&#xff0c;高级分支策略是为了有效地管理和整合分支而设计的。其中一个关键方面是分支合并策略&#xff0c;它定义了如何将一个分支的更改合并到另一个分支。以下是几种常见的分支合并策略&#xff1a; 合并提交策略&#xff08;Merge Commit Stra…...

【Qt控件之QDialog】使用及技巧

简介 QDialog是Qt中的一个类&#xff0c;继承自QWidget类&#xff0c;用于创建对话框窗口&#xff0c;可以显示模态&#xff08;阻塞当前窗口&#xff09;或非模态的对话框。对话框可以包含各种控件&#xff0c;如按钮、文本框等&#xff0c;用于与用户进行交互。 主要函数说…...

Transformer预测 | Python实现基于Transformer的股票价格预测(tensorflow)

文章目录 效果一览文章概述程序设计参考资料效果一览 文章概述 Transformer预测 | Python实现基于Transformer的股票价格预测(tensorflow) 程序设计 import numpy as np import matplotlib.pyplot...

spark sql如何行转列

在数据仓库中&#xff0c;行转列通常称为”变形”(Pivoting) 或 “透视”(Pivoting)&#xff0c;可使用Spark SQL的pivot语句实现。下面是一个简单的示例&#xff1a; 假设我们有如下表格&#xff1a; -------------------- | name | brand | year | -------------------- |…...

Prompt-Tuning(一)

一、预训练语言模型的发展过程 第一阶段的模型主要是基于自监督学习的训练目标&#xff0c;其中常见的目标包括掩码语言模型&#xff08;MLM&#xff09;和下一句预测&#xff08;NSP&#xff09;。这些模型采用了Transformer架构&#xff0c;并遵循了Pre-training和Fine-tuni…...

域信息收集

DMZ&#xff0c;是英文“demilitarized zone”的缩写&#xff0c;中文名称为“隔离区”&#xff0c;也称“非军事化区”。它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题&#xff0c;而设立的一个非安全系统与安全系统之间的缓冲区。该缓冲区位于企业…...

MySQ 学习笔记

1.MySQL(老版)基础 开启MySQL服务: net start mysql mysql为安装时的名称 关闭MySQL服务: net stop mysql 注: 需管理员模式下运行Dos命令 . 打开服务窗口命令 services.msc 登录MySQL服务: mysql [-h localhost -P 3306] -u root -p****** Navicat常用快捷键 键动作CTRLG设…...

pdf文档内容提取pdfplumber、PyPDF2

测试pdfplumber识别效果好些&#xff1b;另外pdf这两个如果超过20多页就没法识别了&#xff0c;结果为空 1、pdfplumber 安装&#xff1a;pip install pdfplumber -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com代码&#xff1a; import pdfpl…...

运算符

目录 算术运算符 比较运算符 逻辑运算符 位运算符 运算符的优先级 MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 数据库中的表结构确立后&#xff0c;表中的数据代表的意义就已经确定。而…...

利用freesurfer6进行海马分割的环境配置和步骤,以及获取海马体积

利用freesurfer6进行海马分割的环境配置和步骤 Matlab Runtime 安装1. 运行recon-all:2. 利用 recon-all -s subj -hippocampal-subfields-T1 进行海马分割3. 结束后需要在/$SUBJECTS_DIR/subject/的文件夹/mri路径下输入下面的代码查看分割情况4. 在文件SUBJECTS_DIR路径下输…...

快速原型:用快马一键生成win11右键菜单传统样式恢复工具

快速原型&#xff1a;用快马一键生成win11右键菜单传统样式恢复工具 最近升级到Windows 11后&#xff0c;最让我不习惯的就是那个右键菜单了。新版的设计把所有选项都折叠起来&#xff0c;每次想找个功能还得点"显示更多选项"&#xff0c;效率大打折扣。作为一个习惯…...

别再死记硬背了!用‘借位法’5分钟搞定子网划分,网工面试必看

别再死记硬背了&#xff01;用‘借位法’5分钟搞定子网划分&#xff0c;网工面试必看 刚入行的网络工程师最怕什么&#xff1f;十个人里有九个会说是子网划分。那些密密麻麻的二进制数字、复杂的计算公式&#xff0c;简直像天书一样让人望而生畏。但今天我要告诉你一个秘密&…...

颠覆式数据处理解决方案:CyberChef实现复杂数据转换的全流程优化

颠覆式数据处理解决方案&#xff1a;CyberChef实现复杂数据转换的全流程优化 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef …...

3大核心价值:Path of Building离线构建规划工具全解析

3大核心价值&#xff1a;Path of Building离线构建规划工具全解析 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building&#xff08;简称PoB&#xff09;是《…...

Ostrakon-VL扫描终端部署案例:单卡A10G跑通全任务链(上传→推理→终端输出)

Ostrakon-VL扫描终端部署案例&#xff1a;单卡A10G跑通全任务链&#xff08;上传→推理→终端输出&#xff09; 1. 项目背景与价值 在零售与餐饮行业&#xff0c;每天需要处理大量商品识别、货架巡检等重复性视觉任务。传统方案通常面临两个痛点&#xff1a;一是专业级识别系…...

从零部署RT-DETR:手把手教你训练自定义目标检测数据集

1. RT-DETR简介与环境配置 RT-DETR是百度推出的实时目标检测Transformer模型&#xff0c;相比传统CNN架构的YOLO系列&#xff0c;它在保持高精度的同时实现了更快的推理速度。我第一次接触这个模型时&#xff0c;就被它的"端到端检测"特性吸引了——不需要复杂的后处…...

技术深度解析:logitech-pubg项目实现PUBG后坐力控制的Lua脚本架构设计

技术深度解析&#xff1a;logitech-pubg项目实现PUBG后坐力控制的Lua脚本架构设计 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在竞技射击游戏…...

XGantt:Vue3项目管理的终极可视化解决方案

XGantt&#xff1a;Vue3项目管理的终极可视化解决方案 【免费下载链接】gantt A powerful and flexible Gantt chart component library for developers, written in native JS Canvas. Supports TypeScript. 中文文档 项目地址: https://gitcode.com/gh_mirrors/gantt/gant…...

SpringBoot 整合 MyBatis 完整实战

SpringBoot MyBatis 可以说是国内后端开发最经典、最常用的组合了。本篇文章就来介绍一下SpringBoot如何整合MyBatis&#xff0c;实现数据表的增删改查。一、引言SpringBoot 整合 MyBatis 是国内 Java 后端最主流的持久层方案&#xff1a;• 灵活可控&#xff0c;SQL 可优化、…...

QT老版本下载被拒?手把手教你用迅雷搞定5.12.12和4.8.7离线安装包

QT老版本下载难题破解&#xff1a;从地址拼接到离线安装全指南 遇到QT老版本下载被拒的提示&#xff1f;别急着放弃。对于需要维护遗留系统或确保项目兼容性的开发者来说&#xff0c;获取特定版本的QT框架往往成为一道必须跨越的门槛。本文将带你深入理解QT官方下载机制&#…...