假设,我们需要打印结构及其字段对应的值。我们可以在包fmt的帮助下做到这一点,它使用类似于 C 的 printf 和 scanf 的函数实现格式化的 I/O。让我们先试试如果我们只是打印结构,会发生什么。
package main
import ("fmt")
// Fields: structure to be printed
type Fields struct {
Name string
NickName string
Age int
}
func main() {
// Initialising the struct with values
var f = Fields{
Name: "Abc",
NickName: "abc",
Age: 19,
}
// printing the structure
fmt.Println(f)
}
输出:
{Abc abc 19}
在 Golang 中打印结构变量有两种方式。第一种方法是使用包 fmt 的Printf函数,在打印格式参数的参数中带有特殊标签。其中一些论点如下:
%v the value in a default format
%+v the plus flag adds field names
%#v a Go-syntax representation of the value
package main
import (
"fmt"
)
// Fields: structure to be printed
type Fields struct {
Name string
NickName string
Age int
}
func main() {
// initializing the
// struct with values
var f = Fields{
Name: "Abc",
NickName: "abc",
Age: 19,
}
// printing the structure
fmt.Printf("%v\n", f)
fmt.Printf("%+v\n", f)
fmt.Printf("%#v\n", f)
}
输出:
{Abc abc 19}
{Name:Abc NickName:abc Age:19}
main.Fields{Name:"Abc", NickName:"abc", Age:19}
带有 #v 的 Printf 包括main.Fields ,它是结构的名称。它包括“main”以区分不同包中存在的结构。
第二种可能的方法是使用包 encoding/json 的函数Marshal 。
句法 :
func Marshal(v interface{}) ([]byte, error)
package main
import (
"encoding/json"
"fmt"
)
// Fields: structure to be printed
type Fields struct {
Name string
NickName string
Age int
}
func main() {
// initialising the struct
// with values
var f = Fields{
Name: "Abc",
NickName: "abc",
Age: 19,
}
// Marshalling the structure
// For now ignoring error
// but you should handle
// the error in above function
jsonF, _ := json.Marshal(f)
// typecasting byte array to string
fmt.Println(string(jsonF))
}
输出:
{"Name":"Abc", "NickName":"abc", "Age":19}