網頁

2022/6/25

Golang struct格式化字串

Go印出struct的格式化字串的方式如下。


使用fmt.Printf()搭配格式化符號%v%+v%#v即印出struct的格式化內容。

  • %v - 印出欄位型設格式化的值。
  • %+v - 印出欄位名稱及欄位型態格式化的值。
  • %#v - 印出Go語法表示的值。

main.go

package main

import (
    "fmt"
    "time"
)

type Employee struct {
    ID        int64     // default format %d
    Name      string    // default format %s
    Age       int       // default format %d
    IsDeleted bool      // default format %t
    CreatedAt time.Time // default format %v
}

func main() {
    emp := Employee{
        ID:        1,
        Name:      "John",
        Age:       33,
        IsDeleted: false,
        CreatedAt: time.Now(),
    }

    fmt.Printf("%v\n", emp)  // {1 John 33 false 2022-06-26 11:22:57.396769 +0800 CST m=+0.000364415}
    fmt.Printf("%+v\n", emp) // {ID:1 Name:John Age:33 IsDeleted:false CreatedAt:2022-06-26 11:22:57.396769 +0800 CST m=+0.000364415}
    fmt.Printf("%#v\n", emp) // main.Employee{ID:1, Name:"John", Age:33, IsDeleted:false, CreatedAt:time.Date(2022, time.June, 26, 11, 22, 57, 396769000, time.Local)}
}


若只需要產生格式化字串,則使用fmt.Sprintf()

main.go

package main

import (
    "fmt"
    "time"
)

type Employee struct {
    ID        int64
    Name      string
    Age       int
    IsDeleted bool
    CreatedAt time.Time
}

func main() {
    emp := Employee{
        ID:        1,
        Name:      "John",
        Age:       33,
        IsDeleted: false,
        CreatedAt: time.Now(),
    }

    s := fmt.Sprintf("%v\n", emp) // create formatted struct string
    fmt.Print(s) // // {1 John 33 false 2022-06-26 11:22:57.396769 +0800 CST m=+0.000364415}
}

若要自訂輸出字串可實作fmt.Stringer介面。



沒有留言:

張貼留言