golang 实用库之gotable「终于解决」

golang 实用库之gotable「终于解决」一 背景 在使用cli打印结果的时候,对结果进行格式化输出,但限于内容较长的,不好自动排版,需要明确宽度等其他字段,可以使用gotable可以根

这是我参与更文挑战的第27天,活动详情查看: 更文挑战

一 背景

在使用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()
}

golang 实用库之gotable「终于解决」

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://daima100.com/12931.html

(0)

相关推荐

  • Python 删除指南

    Python 删除指南Python 是一种优秀的编程语言,广泛应用于人工智能、数据挖掘、物联网等众多领域。在编写 Python 程序时,删除操作是非常常见的。删除是指移除某些对象、文件和数据元素等。Python 提供了各种删除方法,它们各有特点,应根据具体情况选择适当的方法。

    2024-09-15
    22
  • 荣耀笔记本装win11_荣耀笔记本装win10

    荣耀笔记本装win11_荣耀笔记本装win10     最近PC圈讨论最激烈的问题,当属荣耀笔记本如何安装Win10系统了。很多朋友都觉得装系统是一种非常专业的技术,非专业装电脑的工作人员不可。其实不然,就算是对电脑一点都不了解的小白也可以轻松…

    2022-12-23
    148
  • mysql事务详解_mysql事物的理解

    mysql事务详解_mysql事物的理解本文将会介绍MySQL的事务`ACID`特性和MySQL事务控制流程的语法,并介绍事务并发处理中可能出现的异常情况,比如脏读、幻读、不可重复读等等,最后介绍事务隔离级别。

    2023-04-02
    160
  • 用Python绘制五角星的简单方法

    用Python绘制五角星的简单方法五角星是一种常见的几何形状,被广泛应用于各种场合,从印章、标志、纹身到飞舞的国旗。在这篇文章中,我们将介绍如何使用Python绘制五角星。

    2024-08-21
    35
  • mysql group by 日期_MySQL的配置

    mysql group by 日期_MySQL的配置本文来自 codeday ,作者 codeday 我正在尝试从表中获取日志数据.我选择时间跨度的地方(“ maandag”到“ vrijdag”).这样可以得到我想要的结果,但是现在我得到的问题是每…

    2023-02-25
    150
  • login timed out(手机errtimedout解决)

    login timed out(手机errtimedout解决)

    2023-09-13
    228
  • HBase Filter 过滤器之RowFilter详解「建议收藏」

    HBase Filter 过滤器之RowFilter详解「建议收藏」前言: 本文详细介绍了HBase RowFilter过滤器Java&Shell API的使用,并贴出了相关示例代码以供参考。RowFilter 基于行键进行过滤,在工作中涉及到需要通过HBas

    2023-02-24
    142
  • 使用PyCharm创建Python项目

    使用PyCharm创建Python项目Python是一种高级、面向对象的解释型编程语言。随着Python在学校、企业和社区的普及,这门语言变得越来越受欢迎。为了使Python程序员的编程生涯更容易,JetBrains公司为Python装上了一套强大的Python IDE,即PyCharm。在PyCharm中,可以轻松创建、调试搭建Python项目。

    2024-09-06
    24

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注