如何在 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; ?>
】
相关推荐
- 如何在 Go 结构体中正确初始化 map 字段
- 如何使用Golang处理网络超时错误_Golang
- Linux如何安装Golang环境_Linux下G
- Win11怎么设置DNS服务器_Windows11
- Win11怎么关闭触控板_Win11笔记本禁用触摸
- 短链接还原php提示内存不足_调整PHP内存限制设
- Windows10怎么备份注册表_Windows1
- PhpStorm怎么调试PHP代码_PhpStor
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- 如何使用Golang sort排序切片_Golan
- Windows电脑如何进入安全模式?(多种按键方法
- 如何使用Golang reflect检查方法数量_
- Win11如何设置系统声音_Win11系统声音调整
- 当网站SEO排名下降时,如何应对?
- Mac如何将HEIC图片格式转为JPG_Mac批量
- Win11如何设置开机问候语 Win11修改登录界
- 如何解决Windows时间不准的问题?(自动同步设
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- 如何使用Golang实现跨域请求支持_Golang
- 如何使用Golang table-driven f
- Python包结构设计_大型项目组织解析【指导】
- C++中的constexpr和const有什么区别
- Windows怎样关闭锁屏广告_Windows关闭
- Windows电脑如何截屏?(四种快捷方法)
- Win11怎么更改计算机名_Windows11系统
- LINUX下如何配置VLAN虚拟局域网_在LINU
- Windows7怎么找回经典开始菜单_Window
- LINUX怎么进行文本内容搜索_Linux gre
- C#如何序列化对象为XML XmlSerializ
- Win10路由器怎么隐藏ssid Win10隐藏w
- PHP主流架构如何处理会话管理_Session与C
- Python面向对象实战讲解_类与设计模式深入理解
- Win10如何关闭安全中心所有通知 Win10禁用
- 如何在Golang中使用replace替换模块_指
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- Python函数缓存机制_lru_cache解析【
- Windows怎样关闭开始菜单广告_Windows
- 如何使用Golang安装依赖库_管理模块和第三方包
- Win11关机界面怎么改_Win11自定义关机画面
- Win10怎样清理C盘浏览器缓存_Win10清理浏
- PHP 中如何在函数内持久化修改引用变量的指向
- 如何使用Golang实现路由参数绑定_使用Mux和
- C#怎么创建控制台应用 C# Console Ap
- Win11输入法切换快捷键怎么改_Windows
- Django 密码修改后会话失效的解决方案
- Win10怎么卸载鲁大师_Win10彻底卸载鲁大师
- Python对象生命周期管理_创建销毁说明【指导】
- Python随机数生成_random模块说明【指导
- Win11怎样安装剪映专业版_Win11安装剪映教
- Win11开始菜单打不开_修复Windows 11


QQ客服