| // run |
| |
| // Copyright 2021 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "encoding/json" |
| ) |
| |
| type A[T any] struct { |
| F1 string `json:"t1"` |
| F2 T `json:"t2"` |
| B B `json:"t3"` |
| } |
| |
| type B struct { |
| F4 int `json:"t4"` |
| } |
| |
| func a[T any]() { |
| data := `{"t1":"1","t2":2,"t3":{"t4":4}}` |
| a1 := A[T]{} |
| if err := json.Unmarshal([]byte(data), &a1); err != nil { |
| panic(err) |
| } |
| if bytes, err := json.Marshal(&a1); err != nil { |
| panic(err) |
| } else if string(bytes) != data { |
| panic(string(bytes)) |
| } |
| } |
| |
| func main() { |
| a[int]() |
| } |