在Golang中一个文件大小一般是int64类型的整数,这个类型的对程序而言是好的,不过如果提供前端展示性的数据的话,直接返回过去多少有点太那什么了……这个还需要你和前端同学协商,不官怎么说总得有一方去处理,那这么Go在如何优雅的处理这个转换过程序呢?
可定义如下函数以进行转换操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// ByteCountBinary format byte size to human readable format.
func ByteCountBinary(size int64) string {
const unit int64 = 1024
if size < unit {
return fmt.Sprintf("%dB", size)
}
div, exp := unit, 0
for n := size / unit; n >= unit; n /= unit {
div *= unit
exp++
}
return fmt.Sprintf("%.1f%cB", float64(size)/float64(div), "KMGTPE"[exp])
}
|
具体的程序测试结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
func TestFileSuite(t *testing.T) {
suite.Run(t, new(FileSuite))
}
type FileSuite struct {
suite.Suite
}
func (f *FileSuite) Test_CalculateFileSize() {
assert.Equal(f.T(), "1.8MB", ByteCountBinary(int64(1933728)))
assert.Equal(f.T(), "18.3MB", ByteCountBinary(int64(19233728)))
assert.Equal(f.T(), "123.2MB", ByteCountBinary(int64(129233728)))
assert.Equal(f.T(), "1.1GB", ByteCountBinary(int64(1229233728)))
}
|
没有问题,也很好用✌️