如何在 Go 中使用 var 关键字声明并初始化多个返回值的变量
技术百科
花韻仙語
发布时间:2026-01-28
浏览: 次 go 不支持在单条 `var` 语句中同时声明多变量并用多值函数调用初始化,必须拆分为显式声明 + 多变量赋值两步,或使用括号块声明后统一赋值。
在 Go 中,当函数返回多个值(如 func foo() (bool, string))时,若希望避免短变量声明语法(b, s := foo()),而坚持使用 var 显式声明类型,需注意:Go 语法不支持类似 var b bool, s string = foo() 的写法——这会触发编译错误 multiple assignment in declaration requires parenthesized type 或类似提示,因为 Go 的 var 声明语句不允许在单行中混合类型声明与多值初始化。
正确的替代方案有两种,均符合 Go 的语法规范且保持类型明确性:
✅ 方式一:分步声明 + 并行赋值
先分别声明变量,再通过空白标识符或完整接收进行赋值:
var b bool var s string b, s = foo() // 此处为纯赋值(非声明),类型已由 var 确定
✅ 方式二:var 块声明 + 统一赋值(推荐用于相关变量)
使用 var () 块提升可读性,尤其适合逻辑关联的多个变量:
var (
b bool
s string
)
b, s = foo()⚠️ 注意事项:
- b, s = foo() 是多变量赋值语句,不是声明;左侧变量必须已在作用域中声明(否则报错 undefined)。
- 不可写作 var b, s = foo()(缺少类型)或 var b bool, s string = foo()(语法非法)——Go 没有“带类型的多变量初始化 shorthand var”语法。
- 若函数返回值中某些值无需使用,可用空白标识符 _ 忽略,例如:b, _ = foo()(此时仍需先声明 b bool)。
? 总结:Go 的设计哲学强调简洁与明确。虽然 b, s := foo() 是最惯用、最符合语言习惯的写法,但当你因代码规范、教学演示或类型显式性要求必须使用 var 时,请始终遵循“先声明、后赋值”的两步原则。这是类型安全与语法合法性的双重保障。
# 这是
# 多个
# 当你
# 这会
# 有两种
# 已在
# 不支持
# go
# golang
# String
# 报错
# var
# 作用域
# 标识符
# bool
# undefined
# 两步
# 编译错误
# 已由
# 代码规范
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- C++如何使用std::optional?(处理可
- 如何使用Golang编写单元测试_创建Test函数
- 企业SEO优化选择网站建设模板的技巧
- WindowsUSB驱动安装异常怎么办_USB驱动
- Win11开机Logo怎么换_Win11自定义启动
- 新手学PHP架构总混淆概念咋办_重点梳理【教程】
- 微信企业付款回调PHP怎么接收_处理企业付款异步通
- Mac电脑进水了怎么办_MacBook进水后紧急处
- 如何在 Go 开发中正确处理本地包导入与远程模块路
- Windows10怎么查看硬件信息_Windows
- 如何处理“XML格式不正确”错误 常见XML we
- Win11怎么关闭触摸键盘图标_Windows11
- php订单日志怎么记录发货_php记录订单发货操作
- Win11怎么查看激活状态_查询Windows 1
- PythonWeb前后端整合项目教程_FastAP
- Python网络异常模拟_测试说明【指导】
- php后缀怎么变mp4能播放_让php伪装mp4正
- Win11怎么开启自动HDR画质_Windows1
- Win11怎么关闭粘滞键_彻底禁用Windows
- Windows执行文件被SmartScreen拦截
- 如何开启Windows的远程服务器管理工具(RSA
- Win11怎么更改输入法顺序_Win11调整语言首
- Win10如何更改开机密码_Windows10登录
- Win11如何设置文件关联 Win11修改特定文件
- php打包exe如何加密代码_防反编译保护方法【技
- Windows蓝屏错误0x00000018怎么处理
- Win10如何卸载预装Edge扩展_Win10卸载
- Win11怎么关闭透明效果_Windows11个性
- Windows如何拦截2345弹窗广告_Windo
- 如何使用Golang table-driven f
- php删除数据怎么软删除_添加is_del字段标记
- C++如何使用std::async进行异步编程?(
- Python代码测试策略_质量保障解析【教程】
- 如何在 Go 中比较自定义的数组类型(如 [20]
- Drupal 中 HTML 链接被重复转义导致渲染
- Win10如何卸载Skype_Win10卸载Sky
- Windows服务无法启动错误1067是什么_进程
- Go语言中slice追加操作的底层共享机制解析
- php命令行怎么运行_通过CLI模式执行PHP脚本
- Win11怎样安装钉钉客户端_Win11安装钉钉教
- c++如何打印函数堆栈信息_c++ backtra
- Win11怎么设置开机密码_Windows11账户
- Python数据挖掘核心算法实践_聚类分类与特征工
- c++怎么操作redis数据库_c++ hired
- Win11怎样安装微信开发者工具_Win11安装开
- Go语言中slice追加操作的底层共享机制详解
- MySQL 中使用 IF 和 CASE 实现查询字
- Python网页解析流程_html结构说明【指导】
- 如何解决Windows字体显示模糊的问题?(Cle


QQ客服