golang 美化資料展示

wzshiming發表於2018-06-11

在開發除錯的時候經常要列印一大段資料 但是golang 預設的格式化會把資料堆在一坨很不友好 所以我做個可以美化資料輸出的庫

專案地址

API 文件

示例

package main

import (
    ffmt "gopkg.in/ffmt.v1"
)

func main() {
    example()
}

func example() {
    m := struct {
        String string
        Int    int
        Slice  []int
        Map    map[string]interface{}
    }{
        "hello world",
        100,
        []int{1, 2, 3, 4, 5, 6},
        map[string]interface{}{
            "A":  123,
            "BB": 456,
        },
    }

    fmt.Println(m) // fmt 預設輸出
    /*
        {hello world 100 [1 2 3 4 5 6] map[BB:456 A:123]}
    */

    ffmt.Puts(m) // 較為友好的輸出
    /*
        {
         String: "hello world"
         Int:    100
         Slice:  [
          1 2 3
          4 5 6
         ]
         Map: {
          "A":  123
          "BB": 456
         }
        }
    */

    ffmt.Print(m) // 同 Puts 但是字串不加引號
    /*
        {
         String: hello world
         Int:    100
         Slice:  [
          1 2 3
          4 5 6
         ]
         Map: {
          A:  123
          BB: 456
         }
        }
    */

    ffmt.P(m) // 友好格式化加上型別
    /*
        struct{
         String: string(hello world)
         Int:    int(100)
         Slice:  slice[
          int(1) int(2) int(3)
          int(4) int(5) int(6)
         ]
         Map: map{
          string(A):  int(123)
          string(BB): int(456)
         }
        }
    */

    ffmt.Pjson(m) // 以 json 風格輸出
    /*
        {
         "Int": 100
        ,"Map": {
          "A":  123
         ,"BB": 456
         }
        ,"Slice": [
          1,2,3
         ,4,5,6
         ]
        ,"String": "hello world"
        }
    */

    m0 := ffmt.ToTable(m, m) // 按欄位拆成表
    ffmt.Puts(m0)
    /*
        [
         [
          "String" "Int"
          "Slice"  "Map"
         ]
         [
          "hello world"   "100"
          "[1 2 3 4 5 6]" "map[A:123 BB:456]"
         ]
        ]
    */

    m1 := ffmt.FmtTable(m0) // [][]string 表格式化
    ffmt.Puts(m1)
    /*
        [
         "String      Int Slice         Map               "
         "hello world 100 [1 2 3 4 5 6] map[A:123 BB:456] "
        ]
    */

    ffmt.Mark("hello") // 標記輸出位置
    /*
        main.go:122  hello
    */
}

相關文章