如何在 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; ?>
】
相关推荐
- 如何在Golang中实现WebSocket广播_使
- 如何在 Go 中调用动态链接库(.so)中的函数
- Windows服务启动类型恢复方法_错误修改导致的
- php485读数据时阻塞怎么办_php485非阻塞
- Win11怎么设置按流量计费_Win11限制后台流
- Win11怎么设置夜间模式_Windows11显示
- Windows怎样关闭开始菜单推荐广告_Windo
- Win11如何更新显卡驱动 Win11检查和安装设
- Linux如何安装Tomcat应用服务器_Linu
- Windows10怎么用“讲述人”读屏辅助 Win
- Win10路由器怎么隐藏ssid Win10隐藏w
- PyTorch DDP 多进程训练在 Kaggle
- mac怎么安装pip_MAC Python pip
- 如何使用 Selenium 正确获取篮球参考网站球
- Win10怎样清理C盘爱奇艺缓存_Win10清理爱
- SAX解析器是什么,它与DOM在处理大型XML文件
- Win10怎样设置多显示器_Win10多显示器扩展
- Windows10怎么查看硬件信息_Windows
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Mac如何设置动态壁纸?(让桌面动起来)
- 如何使用Golang实现路由分组管理_Golang
- windows 10应用商店区域怎么改_windo
- PythonDocker高级项目部署教程_多容器管
- Win11麦克风没声音怎么设置_Win11麦克风权
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- Windows电脑如何截屏?(四种快捷方法)
- Python正则表达式实战_模式匹配说明【教程】
- PHP主流架构如何处理会话管理_Session与C
- Linux怎么查找死循环进程_Linux系统负载分
- 为什么本地php环境运行php脚本卡顿_php执行
- php会话怎么开启_session_start函数
- Win11搜索栏无法输入_解决Win11开始菜单搜
- Win11怎么设置快速访问主页_Windows11
- Windows10系统怎么查看显卡驱动_Win10
- 如何更改Windows资源管理器的默认启动位置?(
- Win10怎样卸载DockerDesktop_Wi
- 如何使用Golang指针与接口结合_实现方法调用和
- Python脚本参数接收_sys与argparse
- php485能和物联网模块通信吗_php485对接
- Windows蓝屏错误0x00000018怎么处理
- Win11怎么设置指纹解锁 Win11笔记本录入指
- Mac自带的词典App怎么用_Mac添加和使用多语
- Win11怎么关闭通知消息_屏蔽Windows 1
- Win11怎么快速锁屏_Win11一键锁屏快捷键W
- Win11开始菜单打不开_修复Windows 11
- Windows如何查看和管理已安装的字体?(字体文
- Win11怎么开启空间音效_Windows11耳机
- C++如何获取CPU核心数?(std::threa
- 如何使用Golang实现容器健康检查_监控和自动重
- C++友元类使用场景_C++类间协作设计方式讲解


QQ客服