内容简介:一直挺想用 go 的,但是没想到能干啥,前段时间正好有个任务导入 Excel 到后台数据库,用 Python 的话我可能分分钟就写好了,但是作死的我就想试下 go,因为 go 可以打包成可执行程序包,然后就可以不依赖 go 的环境。这里定义了 path 路径和服务器地址 url,唯一需要注意的是,这里变量返回都是指针。flag 有个好处,他的参数都是形如(这个包用起来还是很舒服,唯一一点只支持
一直挺想用 go 的,但是没想到能干啥,前段时间正好有个任务导入 Excel 到后台数据库,用 Python 的话我可能分分钟就写好了,但是作死的我就想试下 go,因为 go 可以打包成可执行程序包,然后就可以不依赖 go 的环境。
直接编码
使用 flag 获取终端参数解析
path := flag.String("path", "", "excel 路径") url := flag.String("url", "**", "服务器地址") flag.Parse()
这里定义了 path 路径和服务器地址 url,唯一需要注意的是,这里变量返回都是指针。flag 有个好处,他的参数都是形如(
defaultValue,$description),所以在执行 -h
的时候,都会返回 key 以及对应的 description。
使用 Luxurioust/excelize 读取Excel文件
xlsx, err := excelize.OpenFile(*path) rows := xlsx.GetRows("Sheet1") for r, row := range rows { fmt.Println(r) for c, col := range row { fmt.Println(c) fmt.Println(col) } }
这个包用起来还是很舒服,唯一一点只支持 xlsx 格式,对于老版本的 xls 格式可能需要先转化了才能使用。rows 为一个二维数组,参数为 sheet 名称,默认的名称都是 Sheet1
使用自带的 net/http 发送请求
str, _ := json.Marshal(data) resp, err := http.Post(url, "application/json", strings.NewReader(string(str))) if err != nil { fmt.Println(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println(string(body))
go 自带的的 http 就是这么好用,post 形式发送了一个 json 包,这个 jsonEncode 用起来稍微有点不爽但是也还好。
打包程序
$ go build main.go
就可以将这个脚本打包成一个可执行文件了,但是发现文件还挺大的,我以为只有几百 k 呢,都 8m 多了
压缩程序
$ brew install upx $ upx main
upx 是一个专门的压缩打包可执行文件的程序,可以优化包体积。
这里压缩过的包不能使用了,暂时没有深究什么原因。所以寻找其他方式
再次优化
$ go build -ldflags -w main.go
发现这样弄就可以减少 1m 的体积,还是挺可观的,现在有一个可执行文件了,不用对方有 golang 环境,拿过去直接可以运行跑起来。go 就是优秀!
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ASP.NET Aries 高级开发教程:Excel导入之多表高级导入配置(中)
- 将Excel文件导入数据库(POI+Excel+MySQL+jsp页面导入)第一次优化
- [MySQL]备份和导入
- Android Studio 导入源码
- Python导入订单是否重要
- hive 导入 mysql文本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C和C++代码精粹
阿林森 / 董慧颖 / 人民邮电出版社 / 2003-4-1 / 59.00
《C和C++代码精粹》基于作者备受好评的C/C++ User Journal杂志上的每月专栏,通过大量完全符合ISO标准C++的程序集合,说明了C++真正强大的威力,是C和C++职业程序员的实践指南。可以帮助有一定经验的C和C++程序员深入学习这两种密切相关的语言,对书中代码的参悟和应用,可以帮助他们从根本上提高使用程序的效率。一起来看看 《C和C++代码精粹》 这本书的介绍吧!