如何在 Go 中使用 var 关键字声明并初始化多个返回值变量
技术百科
花韻仙語
发布时间:2026-01-28
浏览: 次 go 不支持在单条 `var` 语句中同时声明多变量并赋值多个返回值;正确做法是分步声明类型后,再用多重赋值完成初始化。
在 Go 中,当函数返回多个值(如 func foo() (bool, string))时,开发者常希望以显式类型声明的方式初始化多个变量,而非使用短变量声明 :=。遗憾的是,Go 不提供类似 var b bool, s string = foo() 的语法——该写法会触发编译错误 multiple assignment in single var declaration not allowed,因为 Go 的 var 声明语句不支持“声明 + 多值解构赋值”一体化操作。
✅ 正确且符合 Go 风格的替代方案有两种:
方案一:分步声明 + 多重赋值(推荐,清晰直观)
var b bool var s string b, s = foo() // 类型已声明,此处仅执行赋值(非声明)
方案二:使用 var 块批量声明 + 后续赋值(适合变量较多时)
var (
b bool
s string
)
b, s = foo()⚠️ 注意事项

- b, s = foo() 是纯赋值语句,要求 b 和 s 已预先声明(类型明确),否则会报错 undefined: b;
- 不可写作 var b, s = foo()(缺少类型,且 = 在 var 中仅允许单值初始化);
- 也不可混合类型写成 var b bool, s = foo() —— Go 不允许在同一 var 语句中混用显式类型与类型推导。
? 补充说明:虽然 b, s := foo() 是最简洁、最惯用的方式(尤其在函数局部作用域),但若因代码规范、教学演示或需提前声明变量作用域等原因必须使用 var,上述两种分步方式是唯一合法且可读性强的选择。Go 的设计哲学强调明确性与简洁性的平衡,因此“先声明类型,再赋值”正是这种理念的体现。
# 的是
# 多个
# 两种
# 则会
# 而非
# 有两种
# 不支持
# 再用
# 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; ?>
】
相关推荐
- Win11怎样安装剪映专业版_Win11安装剪映教
- Win11怎么设置桌面图标间距_Windows11
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- 静态属性修改会影响所有实例吗_php作用域操作符下
- Win10怎么关闭自动更新错误弹窗_Win10策略
- Win11怎么设置应用分屏_Windows11贴靠
- php删除数据怎么软删除_添加is_del字段标记
- Win11怎么关闭定位服务 Win11禁止应用获取
- Windows10电脑怎么设置防火墙出站规则_Wi
- Win10怎样安装Excel数据分析工具_Win1
- 如何在Golang中操作嵌套切片指针_Golang
- Win11怎么卸载Photos应用_Win11卸载
- 如何在Mac上搭建Golang开发环境_使用Hom
- Windows蓝屏错误0x0000001E怎么修复
- Mac如何备份到iCloud_Mac桌面与文稿文件
- 如何在Golang中处理云原生事件_使用Event
- Golang如何遍历目录文件_Golang fil
- LINUX的SELinux是什么_详解LINUX强
- mac本地php环境如何开启curl_curl扩展
- Win11怎么格式化U盘_Win11系统U盘格式化
- 短链接怎么自定义还原php_修改解码规则适配需求【
- 如何使用 Python 合并文件夹内多个 Exce
- 微信里的php文件怎么变mp4_微信接收php转m
- Win11怎么更改系统语言_Win11中文语言包下
- Win11怎么设置环境变量_Win11配置Path
- php485返回空数组怎么回事_php485数据接
- c++的STL算法库find怎么用 在容器中查找指
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- 如何使用Golang写入二进制文件_Golang
- Win11怎么解压RAR文件 Win11自带解压功
- phpstudy本地环境mysql忘记密码_重置m
- LINUX如何查看文件类型_Linux中file命
- Win11怎样安装搜狗输入法_Win11安装搜狗输
- Mac的“预览”如何合并多个PDF_Mac文件处理
- Win10怎么关闭自动更新错误重启 Win10策略
- Win11怎么开启HDR模式_Windows 11
- Win11怎么设置系统还原_Windows11系统
- Win10怎么查看内存时序参数_Win10CPU-
- 如何使用Golang实现Web表单数据绑定_自动映
- php中self::能调用子类重写的方法吗_静态绑
- Win11怎么用设置清理回收站_Win11设置清理
- Windows蓝屏错误0x0000002C怎么解决
- Win11怎么设置任务栏大小_Windows11注
- Python与MongoDB NoSQL开发实战_
- Win11用户账户控制怎么关_Win11关闭UAC
- Windows10如何重置此电脑_Windows1
- c++ nullptr与NULL区别_c++11空
- 零基础学会Python自动化办公_高效处理Exce
- XSLT怎么生成动态的HTML属性名和标签名
- php打包exe如何加密代码_防反编译保护方法【技

QQ客服