”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么 Go 函数不能直接返回多个值?

为什么 Go 函数不能直接返回多个值?

发布于2024-11-20
浏览:807

Why Can't Go Functions Return Multiple Values Directly?

Go 返回多个值问题

当尝试在 Go 中返回多个值时,为什么某些语法有效而其他语法无效似乎令人困惑。为了说明这一点,请考虑以下两个代码片段:

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}

第一个代码片段有效并返回 Info 和 bool 值。但是,第二个片段无效:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}

这就提出了一个问题:为什么第一个片段有效而第二个片段无效。此外,人们可能想知道是否有一种方法可以避免使用像 it 和present 这样的临时变量。

解释“Comma Ok”模式

理解这种行为的关键在于“comma好的”模式。在 Go 中,访问映射时,结果是一对值:与键关联的值和指示该键是否存在于映射中的布尔值。这通常用于区分丢失的键和零值。

在第一个代码片段中,all[id] 表达式返回一对值,这些值被分配给它并存在。然后 return 语句返回这些值。

编译器注意事项

编译器在确定多值赋值是否有效方面发挥着作用。如果函数返回多个值,但左侧的接收者只有一个变量,编译器将发出错误。这是因为编译器期望返回的值的数量与接收它们的变量的数量相匹配。

在第二个代码片段的情况下,return all[id] 表达式仅返回一个值,这是不兼容的左侧有两个变量。因此,编译器会报告错误。

避免临时变量

不幸的是,在 Go 函数中返回多个值时,无法避免使用临时变量。这是因为编译器要求返回值的数量与接收它们的变量的数量相匹配。但是,可以通过使用命名返回值或返回结构来最大限度地减少临时变量的使用。

最新教程 更多>
  • 使用 PrimeFaces 时如何避免 jQuery 冲突?
    使用 PrimeFaces 时如何避免 jQuery 冲突?
    jQuery 和 jQuery 插件:避免与 PrimeFaces 冲突将 jQuery 及其插件集成到现有 PrimeFaces Web 应用程序中时,用户可能会遇到意外的情况PrimeFaces 组件失去功能和样式的问题。罪魁祸首在于存在多个 jQuery 实例。PrimeFaces 包含 jQ...
    编程 发布于2024-11-20
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-11-20
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-20
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-20
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-20
  • 为什么我的 d3.json() 回调中的代码未在 D3 v5 中执行?
    为什么我的 d3.json() 回调中的代码未在 D3 v5 中执行?
    d3.json() 回调中的代码执行中断在 D3 v5 中,d3.json() 回调中的代码无法执行,让开发人员感到困惑。这种差异的出现是由于自 D3 v4 以来 d3.json() 的签名发生了重大变化。D3 v5 中向 Promises 的迁移D3 v5 已放弃 XMLHttpRequest 并...
    编程 发布于2024-11-20
  • 如何使用 C++ 高效访问文本文件中的特定行?
    如何使用 C++ 高效访问文本文件中的特定行?
    在 C 中获取文本文件中的特定行 在 C 中,从文本文件中检索特定行可以通过遍历来实现文件。通过利用漏洞并迭代各行,您可以有效地查明所需位置。为了演示这一点,请考虑以下代码片段:#include <fstream> #include <limits> std::fstream...
    编程 发布于2024-11-20
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-20
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-20
  • 如何在 Pandas 中读取没有标题的 CSV 文件中的特定列?
    如何在 Pandas 中读取没有标题的 CSV 文件中的特定列?
    将表数据读入没有标题的 Pandas处理表格格式的数据(例如 CSV 文件)时,可能有必要在不存在标题的情况下读取特定列。使用 Pandas(一个强大的用于数据操作的 Python 库),可以通过使用选项组合来实现。要从不带标题的 CSV 文件中读取列的子集,您可以使用 read_csv() 函数以...
    编程 发布于2024-11-20
  • 为什么在 PHP 中回显 MySQL 查询会返回“资源 id #6”而不是字符串?
    为什么在 PHP 中回显 MySQL 查询会返回“资源 id #6”而不是字符串?
    将 MySQL 查询结果回显为字符串在 PHP 中,一个常见的任务是从 MySQL 数据库中检索数据并将其显示在 Web 上页。但是,当尝试回显 MySQL 查询的结果时,您可能会遇到错误“Resource id #6”,而不是预期的字符串。了解资源 ID当使用 mysql_query() 等函数执...
    编程 发布于2024-11-20
  • 为什么我的 Java Socket 客户端收不到服务器回复?
    为什么我的 Java Socket 客户端收不到服务器回复?
    Java Socket: 处理无响应的服务器回复客户端请求在所呈现的场景中,客户端成功向服务器发送字符串,提示服务器进行处理和响应。然而,客户端无法收到服务器的回复。根本原因:问题源于缺少添加行终止符(“\r\n”)写入输出流的字符串末尾。这会阻碍客户端和服务器之间的通信,导致客户端无法注意到服务器...
    编程 发布于2024-11-20
  • 为什么我在 C# 中遇到“无法连接到指定的 MySQL 主机”的问题?
    为什么我在 C# 中遇到“无法连接到指定的 MySQL 主机”的问题?
    C# 中“无法连接到指定的 MySQL 主机”错误的故障排除遇到错误“无法连接到任何指定的 MySQL 主机”时MySQL 主机”在 C# 中执行 MySQL 连接代码时,检查几个方面至关重要:连接字符串参数:如提供的答案中所述,顺序和连接字符串内参数的间距可能很关键。确保连接字符串符合标准格式:S...
    编程 发布于2024-11-20
  • 如何防止恶意 PHP 文件上传:综合指南
    如何防止恶意 PHP 文件上传:综合指南
    缓解恶意 PHP 上传:综合指南为了解决某人通过在线表单上传恶意 PHP 文件的问题,本文深入研究了PHP 文件上传领域以及与恶意内容相关的风险。PHP 文件上传:超越图像格式虽然最初的目的是仅上传图片,但问题是:如何防止恶意 PHP 文件在压缩文件夹中上传?这种担忧超出了图像文件类型的范围,因为有...
    编程 发布于2024-11-20
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-20

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3