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语言map与string的相互转换的实现
Apr 07 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
golang 实现Location跳转方式
May 02 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang map映射的用法
Apr 22 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
Go语言编译原理之变量捕获
Aug 05 Golang
Go语言编译原理之源码调试
Aug 05 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 a simple smtp class
2007/11/26 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
Python常用库推荐
2016/12/04 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
一套Delphi的笔试题二
2013/05/11 面试题
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
学校宣传标语
2014/06/18 职场文书
民事赔偿协议书
2014/11/02 职场文书
学术会议开幕词
2016/03/03 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
python基础之匿名函数详解
2021/04/21 Python