如何使用 fmt.Sscan 将字符串中的整数批量解析到数组或切片中
技术百科
碧海醫心
发布时间:2026-01-22
浏览: 次 `fmt.sscan` 不支持直接将字符串解析到数组变量,需先将元素地址转为 `[]interface{}` 再展开传参;本文详解实现原理、完整示例及更推荐的替代方案。
fmt.Sscan 是

✅ 正确做法是:显式构造一个 []interface{},其中每个元素都是对应数组项的地址。以下是一个完整、健壮的示例:
package main
import (
"fmt"
"log"
)
func main() {
var nums [5]int
// 步骤1:创建 interface{} 切片,长度与 nums 一致
xnums := make([]interface{}, len(nums))
// 步骤2:将每个 &nums[i] 赋值给 xnums[i]
for i := range nums {
xnums[i] = &nums[i]
}
// 步骤3:使用 ... 展开切片,传递给 Sscan
n, err := fmt.Sscan("1 2 3 4 5", xnums...)
if err != nil {
log.Fatalf("解析失败(第 %d 个字段): %v", n+1, err)
}
if n < len(nums) {
fmt.Printf("警告:仅成功解析 %d 个值,预期 %d 个\n", n, len(nums))
}
fmt.Println("解析结果:", nums) // 输出: [1 2 3 4 5]
}⚠️ 注意事项:
- Sscan 按空格/制表符/换行符分隔字段,不支持逗号分隔(如 "1,2,3" 需先预处理);
- 若输入数字少于目标容量,未赋值的数组元素保持零值(0),且 n 返回实际成功解析的字段数;
- 错误类型为 *fmt.NumError,可精确判断是溢出还是语法错误;
- 此方法适用于固定长度数组;若需动态长度,建议改用 []int + strings.Fields() + strconv.Atoi 组合。
? 更推荐的现代实践(尤其对不确定长度或复杂分隔场景):
import (
"fmt"
"strconv"
"strings"
)
func parseInts(s string) ([]int, error) {
fields := strings.Fields(s) // 自动按空白分割,忽略多余空格
result := make([]int, 0, len(fields))
for _, f := range fields {
num, err := strconv.Atoi(f)
if err != nil {
return nil, fmt.Errorf("解析 '%s' 失败: %w", f, err)
}
result = append(result, num)
}
return result, nil
}
// 使用示例
nums, err := parseInts("1 2 3 4 5")
if err != nil {
log.Fatal(err)
}
fmt.Println(nums) // [1 2 3 4 5]该方式更清晰、可控性强、易于错误处理和扩展(例如支持十六进制 strconv.ParseInt(f, 0, 64)),是生产代码中的首选。而 fmt.Sscan + []interface{} 方案更适合教学演示或极简脚本中「已知固定结构」的快速解析。
# ai
# 的是
# 是一个
# 都是
# 多个
# 第一个
# 适用于
# 先将
# 而非
# 关键在于
# app
# 不支持
# go
# Error
# String
# int
# 标准库
# 指针
# 字符串
# Interface
# 切片
# 可变参数
# 字符串解析
相关栏目:
<?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; ?>
】
相关推荐
- Win10如何设置双wan路由器 Win10双wa
- Python数据挖掘进阶教程_分类回归与聚类案例解
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- C#如何使用Channel C#通道实现异步通信
- Win11文件扩展名怎么显示 Win11查看文件后
- Python配置文件操作教程_JSONINIYAM
- Win11如何设置计划任务 Win11定时执行程序
- 如何在JavaScript中动态拼接PHP的bas
- Python技术债务管理_长期维护解析【教程】
- mac怎么安装pip_MAC Python pip
- Win11怎么关闭内容自适应亮度_Windows1
- Win11怎么关闭用户账户控制UAC_Window
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘
- php能控制zigbee模块吗_php通过串口与c
- Python函数参数高级用法_默认值与可变参数解析
- Win11怎么忘记WiFi网络_Win11删除已保
- Win11开机速度慢怎么优化_Win11系统启动加
- 短链接还原php提示内存不足_调整PHP内存限制设
- windows系统找不到无线网络怎么办_windo
- Win11摄像头无法使用怎么办_Win11相机隐私
- 跨文件调用类方法怎么用_php作用域操作符与自动加
- Win11截图快捷键是什么_Win11自带截图工具
- 如何使用Golang实现云原生应用弹性伸缩_自动应
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- Go语言中slice追加操作的底层共享机制解析
- Win11任务栏怎么放到顶部_Win11修改任务栏
- Win11输入法切换快捷键怎么改_Windows
- php修改数据怎么批量改状态_批量更新status
- c++的STL算法库find怎么用 在容器中查找指
- Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱
- Python实现图数据库操作_Neo4j核心CRU
- 如何使用Golang管理模块版本_Golanggo
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- c++怎么编写动态链接库dll_c++ __dec
- 如何关闭Win10自动更新更新_Win10系统自动
- c++的static关键字有什么用 静态变量和静态
- Windows10如何更改鼠标灵敏度_Win10鼠
- c++怎么用jemalloc c++替换默认内存分
- Win10如何卸载WindowsDefender_
- Mac如何创建和管理多个桌面空间_Mac高效多任务
- Python并发安全问题_资源竞争说明【指导】
- Win11怎么开启空间音效_Windows11耳机
- Win11怎么设置任务栏图标大小_Windows1
- 本地php环境出现502错误_nginx或apac
- Windows10电脑怎么设置虚拟内存_Win10
- php订单日志怎么记录物流_php记录订单物流变更
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- 如何使用Golang实现容器自动化运维_Golan
- LINUX如何查看文件类型_Linux中file命
- Win11怎么设置多显示器任务栏 Win11扩展任

QQ客服