关于GraphQL的所有文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢.
package main
import (
"fmt"
"encoding/json"
)
type Ticket struct {
From string
To string
}
func (t Ticket) String() string {
return fmt.Sprintf("%s - %s", t.From, t.To)
}
type Passenger struct {
Name string `json:"Name"`
Tkt Ticket `json:"Ticket"`
}
func main() {
p := Passenger{}
p.Name = "John"
p.Tkt.From = "New York"
p.Tkt.To = "Washington"
buf, _ := json.Marshal(p)
fmt.Println(string(buf))
}
Run Code Online (Sandbox Code Playgroud)
此代码输出:
{"Name":"John","Ticket":{"From":"New York","To":"Washington"}}
Run Code Online (Sandbox Code Playgroud)
但是,使用json.Marshal()
方法(对于复杂结构很简单友好),如何使其输出如下:
{"Name":"John","Ticket":"New York - Washington"}
Run Code Online (Sandbox Code Playgroud) 这是一个示例,表示map [time.Time]字符串"不起作用".
package main
import (
"fmt"
"time"
)
type MyDate time.Time
func NewMyDate(year, month, day int, tz time.Location) (MyDate, error) {
return MyDate(time.Date(year, time.Month(month), day, 0, 0, 0, 0, &tz)), nil
}
func (md MyDate)ToTime() time.Time {
return time.Time(md)
}
func main() {
timeMap := make(map[time.Time]string)
md1, _ := NewMyDate(2019, 1, 1, *time.UTC)
md2, _ := NewMyDate(2019, 1, 1, *time.UTC)
timeMap[md1.ToTime()] = "1"
timeMap[md2.ToTime()] = "2"
for k, v := range timeMap {
fmt.Println(k, v)
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
2019-01-01 …