size
阅读提示
- 适用版本:Go 1.21+(示例在 Go 1.22 下验证)· 前置知识:语法基础-数据类型 · 阅读时长:约 8 分钟
dstgo/size 是一个很方便的将字符串与文件大小相互转换的库
仓库地址:dstgo/size: Fast conversion between file size and string (github.com)
文档地址:dstgo/size: Fast conversion between file size and string (github.com)
安装
$ go get https://github.com/dstgo/size使用
go
const (
B Size = 1
KB = B * 1024
MB = KB * 1024
GB = MB * 1024
TB = GB * 1024
PB = TB * 1024
)go
type SizeMeta struct {
Data float64
Unit Size
}该库使用起来相当简单,只有两个对外暴露的函数
go
func ParseSize(str string) SizeMetaParseSize将字符串转换成一个SizeMeta结构体,存储了数据大小,以及单位大小
go
func ParseTargetSize(str string, size Size) SizeMetaParseTargetSize将字符串转换成指定大小的SizeMeta
示例如下:
go
package main
import (
"fmt"
"github.com/dstgo/size"
)
func main() {
parseSize := size.ParseSize("1.2MB")
fmt.Printf("%+v\n", parseSize)
fmt.Printf("%+v\n", parseSize.Round(1))
parseSize1 := size.ParseSize("2.3-asdajl")
fmt.Printf("%+v\n", parseSize1)
targetSize := size.ParseTargetSize("2.65MB", size.KB)
fmt.Printf("%+v", targetSize)
fmt.Printf("%+v", targetSize.String())
}转换后可以使用Round方法来修改保留多少位,也可以使用String方法来获取其字符串形式,示例输出如下
1.20MB
1.2
2713.60KB完整示例
下面的程序可以直接运行:复制到文件后执行 go run main.go,或粘贴到 Go Playground 运行。
go
package main
import "fmt"
func human(n int64) string {
units := []string{"B", "KB", "MB", "GB", "TB"}
f := float64(n)
i := 0
for f >= 1024 && i < len(units)-1 {
f /= 1024
i++
}
return fmt.Sprintf("%.1f%s", f, units[i])
}
func main() {
fmt.Println(human(1000), human(1024), human(1536), human(10485760))
}预期输出:
text
1000.0B 1.0KB 1.5KB 10.0MB常见错误与踩坑
- KB 还是 KiB? 磁盘厂商用 1000,操作系统用 1024;界面上要说明采用哪一种。
- 四舍五入会隐藏细节。
1.5KB可能是 1499 也可能是 1536 字节,计算时必须保留原始值。 - 零与负值要定规则。 显示
0B还是0.0KB应事先约定。 - 只用于展示。 不要把人类可读字符串再解析回数字,始终保留整数。
- 本地化格式。 小数点符号各语言不同,机器可读输出应使用原始数字。
更新记录
- 2026-10-14:新增"阅读提示"、完整可运行示例(含预期输出)、常见错误与踩坑清单,以及本更新记录。
