Go のコンソールで構造体変数を出力する方法
Suraj Joshi
2023年12月11日
Go では、struct
は同じまたは異なるデータ型の異なるフィールドのコレクションです。struct
はオブジェクト指向プログラミングパラダイムのクラスに似ています。パッケージ fmt
の Printf
関数と特別なタグを Printf
関数への引数として使用して構造体を出力できます。同様に、encoding/json
、go-spew
、Pretty Printer Library
などの特別なパッケージを使用して構造体を出力することもできます。
Go で struct
を宣言する
Go の構造は、struct
キーワードを使用して作成されます。
package main
import "fmt"
type info struct {
Name string
Address string
Pincode int
}
func main() {
a1 := info{"Dikhsya Lhyaho", "Jhapa", 123}
fmt.Println("Info of Dikhsya: ", a1)
}
出力:
Info of Dikhsya: {Dikhsya Lhyaho Jhapa 123}
Go では、さまざまなパッケージで struct
変数を出力できます。それらのいくつかを以下に説明します。
fmt
パッケージの Printf
関数
パッケージ fmt
の Printf
関数を特別なフォーマットオプションで使用できます。fmt
を使用して変数を表示します。ために使用できるフォーマットオプションは次のとおりです。
フォーマット | 説明 |
---|---|
%v |
変数値をデフォルト形式で出力します |
%+v |
値を持つフィールド名を追加する |
%#v |
値の Go 構文表現 |
%T |
値のタイプの Go 構文表現 |
%% |
文字通りのパーセント記号 |
コード例:
package main
import "fmt"
type Employee struct {
Id int64
Name string
}
func main() {
Employee_1 := Employee{Id: 10, Name: "Dixya Lhyaho"}
fmt.Printf("%+v\n", Employee_1) // with Variable name
fmt.Printf("%v\n", Employee_1) // Without Variable Name
fmt.Printf("%d\n", Employee_1.Id)
fmt.Printf("%s\n", Employee_1.Name)
}
出力:
{Id:10 Name:Dixya Lhyaho}
{10 Dixya Lhyaho}
10
Dixya Lhyaho
パッケージ encoding/json
の Marshal
関数
別の方法は、パッケージ encoding/json
の関数 Marshal
を使用することです。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Id int64
Name string
}
func main() {
Employee_1 := Employee{Id: 10, Name: "Dixya Lhyaho"}
jsonE, _ := json.Marshal(Employee_1)
fmt.Println(string(jsonE))
}
出力:
{"Id":10,"Name":"Dixya Lhyaho"}
パッケージ go-spew
の type
関数
別の方法は、パッケージ go-spew
の type
関数を使用することです。
。
package main
import (
"github.com/davecgh/go-spew/spew"
)
type Employee struct {
Id int64
Name string
}
func main() {
Employee_1 := Employee{Id: 10, Name: "Dixya Lhyaho"}
spew.Dump(Employee_1)
}
出力:
(main.Employee) {
Id: (int64) 10,
Name: (string) (len=12) "Dixya Lhyaho"
}
go-spew
パッケージをインストールするには、ターミナルで次のコマンドを実行します。
go get -u github.com/davecgh/go-spew/spew
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn