如何在 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 中可靠地测试含 time.Time
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- C++中的Pimpl idiom是什么,有什么好处
- Win11如何设置鼠标灵敏度_Win11鼠标灵敏度
- php打包exe后无法读取环境变量_变量配置方法【
- Win11怎么设置鼠标宏_Win11鼠标按键自定义
- php485返回空数组怎么回事_php485数据接
- Win11系统占用空间大怎么办 Win11深度瘦身
- Win11怎么更改任务栏颜色_Windows11个
- Win11怎么更改任务栏位置_修改注册表将Win1
- 如何使用Golang benchmark测量函数延
- Windows蓝屏错误0x0000001E怎么修复
- 如何在 Go 中正确反序列化多个同级 XML 元素
- Win11怎么设置默认终端应用_Windows11
- Win11怎么开启智能存储_Windows11存储
- windows 10专注助手怎么关闭_window
- Win11怎么开启游戏模式_Win11优化游戏帧数
- c++协程和线程的区别 c++异步编程模型对比【核
- c# 在高并发下使用反射发射(Reflection
- Windows怎样拦截WPS弹窗广告_Window
- Win11怎么清理C盘系统日志_Win11清理系统
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- 如何在 Pandas 中按元素交集合并两列字符串
- Windows10系统更新错误0x80070002
- Windows10如何更改鼠标灵敏度_Win10鼠
- 用lighttpd能运行php吗_lighttpd
- Win10如何卸载Skype_Win10卸载Sky
- Windows如何查看和管理已安装的字体?(字体文
- Windows如何拦截2345弹窗广告_Windo
- Windows10如何更改桌面背景_Win10个性
- Windows10系统服务优化指南_Win10禁用
- php怎么下载安装后设置错误日志_phpini l
- Win11如何设置电源计划_Win11电源计划优化
- Windows10如何更改开机密码_Win10登录
- Windows蓝屏错误0x00000018怎么处理
- 当网站SEO排名下降时,如何应对?
- php下载安装包怎么选_threadsafe与nt
- Win11怎么关闭任务栏小组件_Windows11
- Windows电脑如何截屏?(四种快捷方法)
- Win11怎么卸载Photos应用_Win11卸载
- php做exe支持多线程吗_并发处理实现方式【详解
- 如何使用Golang反射将map转换为struct
- Win11如何暂停系统更新 Win11暂停更新最长
- php嵌入式日志记录怎么实现_php将硬件数据写入
- 如何使用Golang安装依赖库_管理模块和第三方包
- Win11怎样安装微信开发者工具_Win11安装开
- Win10怎么查看内存时序参数_Win10CPU-
- 如何使用 Python 合并文件夹内多个 Exce
- VSC怎样在Linux运行PHP_Ubuntu系统
- Go语言中slice追加操作的底层共享机制详解


QQ客服