golang 实用库gotable的具体使用


Posted in Golang onJuly 01, 2021
目录
  • 一 背景
  • 二 库简介
  • 三 代码
    • 3.1 创建表格
    • 3.2 增加row
    • 3.3 增加column
    • 3.4 打印表格
    • 3.5 边框操作
    • 3.6 输出json
  • 四 测试
    • 4.1 创建表格
    • 4.2 输出json
  • 五 其他
  • 参考链接

一 背景

在使用cli打印结果的时候,对结果进行格式化输出,但限于内容较长的,不好自动排版,需要明确宽度等其他字段,可以使用gotable可以根据字段的长度自动调整每列的宽度,并且自动将字段居中显示。表格可以动态的新增列和数据。

二 库简介

gotable可以打印table到控制台,目前支持ASCII/Chinese characters 。
可以非常轻松实现根据内容自调整局中显示,非常方便。

三 代码

3.1 创建表格

func Create(columns ...string) (*table.Table, error)

3.2 增加row

增加单行

func (tb *Table) AddRow(row map[string]string) error

增加多行

func (tb *Table) AddRows(rows []map[string]string) []map[string]string

3.3 增加column

func (tb *Table) AddColumn(column string) error

3.4 打印表格

func (tb *Table) PrintTable()

3.5 边框操作

关闭边框

func (tb *Table) CloseBorder()

开启边框

func (tb *Table) OpenBorder()

3.6 输出json

func (tb *Table) Json(indent int) (string, error)

四 测试

4.1 创建表格

package main

import (
 "fmt"
 "github.com/liushuochen/gotable"
)

func main() {

 table, err := gotable.Create("country", "city")
 if err != nil {
  fmt.Println(err.Error())
  return
 }

 values := []map[string]string{{"country": "China", "city": "Beijing"},
  {"country": "Japan", "city": "Tokyo"},
  {"country": "North Korea", "city": "Pyongyang"}}
 for _, value := range values {
  err := table.AddRow(value)
  if err != nil {
   fmt.Println(err.Error())
   return
  }
 }
 r, _ := table.Json(4)
 fmt.Println(r)
 table.CloseBorder()
 table.PrintTable()
}

4.2 输出json

package main

import (
 "fmt"
 "github.com/liushuochen/gotable"
)

func main() {
 tb, err := gotable.Create("Name", "ID", "salary")
 if err != nil {
  fmt.Println("Create table failed: ", err.Error())
  return
 }

 rows := make([]map[string]string, 0)
 for i := 0; i < 3; i++ {
  row := make(map[string]string)
  row["Name"] = fmt.Sprintf("employee-%d", i)
  row["ID"] = fmt.Sprintf("00%d", i)
  row["salary"] = "60000"
  rows = append(rows, row)
 }

 jsonString, err := tb.Json(4)
 if err != nil {
  fmt.Println("ERROR: ", err.Error())
  return
 }
 fmt.Println(jsonString)
 // output: []

 tb.AddRows(rows)

 jsonString, err = tb.Json(4)
 if err != nil {
  fmt.Println("ERROR: ", err.Error())
  return
 }
 fmt.Println(jsonString)
 // output:
 // [
 //       {
 //              "ID": "000",
 //              "Name": "employee-0",
 //              "salary": "60000"
 //       },
 //       {
 //              "ID": "001",
 //              "Name": "employee-1",
 //              "salary": "60000"
 //
 //
 //              "ID": "002",
 //              "Name": "employee-2",
 //              "salary": "60000"
 //       }
 //]
}

五 其他

利用golang 的 tabwriter也可以去实现打印表格,不过定义比较麻烦,更多高级功能可以自己定义,gotable拿来即用,可以配合表格输出和json输出到控制台的场景。

参考链接

https://github.com/liushuochen/gotable

到此这篇关于golang 实用库gotable的具体使用的文章就介绍到这了,更多相关golang gotable内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
Go各时间字符串使用解析
Apr 02 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
golang goroutine顺序输出方式
Apr 29 Golang
解决Go gorm踩过的坑
Apr 30 Golang
golang中的并发和并行
May 08 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
Go语言应该什么情况使用指针
Jul 25 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang 切片(Slice)实现增删改查
Apr 22 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
Go gorilla/sessions库安装使用
Aug 14 Golang
试了下Golang实现try catch的方法
Jul 01 #Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 #Golang
Golang的继承模拟实例
Jun 30 #Golang
go select编译期的优化处理逻辑使用场景分析
Go 语言下基于Redis分布式锁的实现方式
Jun 28 #Golang
go语言使用Casbin实现角色的权限控制
Go语言设计模式之结构型模式
You might like
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
一个php作的文本留言本的例子(四)
2006/10/09 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
asp 取文本框名称代码
2008/12/02 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
js jquery数组介绍
2012/07/15 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
Vue表单实例代码
2016/09/05 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python操作csv文件实例详解
2017/07/31 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
有机童装:Toby Tiger
2018/05/23 全球购物
优秀公益广告词大全
2014/03/19 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
MySQL数据库必备之条件查询语句
2021/10/15 MySQL