Go检查结构体中是否存在某个字段及创建结构体切片或映射
作者:zhe.ink 哲京
这篇文章主要为大家介绍了Go检查结构体中是否存在某个字段及创建结构体切片或映射实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
验证字段Z是否存在于结构类型Test中
下面的代码片段声明了具有字段A、B和C的结构类型Test。我们需要验证字段Z是否存在于结构类型Test中。
示例代码:
package main import ( "log" "reflect" ) func main() { type test struct { A bool B bool C bool } v := new(test) metaValue := reflect.ValueOf(v).Elem() for _, name := range []string{"A", "C", "Z"} { field := metaValue.FieldByName(name) if field == (reflect.Value{}) { log.Printf("Field %s not exist in struct", name) } } }
输出:
2009/11/10 23:00:00 Field Z not exist in struct
创建结构体切片
示例代码:
package main import ( "fmt" ) type Widget struct { id int attrs []string } func main() { widgets := []Widget{ Widget{ id: 10, attrs: []string{"blah", "foo"}, }, Widget{ id: 11, attrs: []string{"foo", "bar"}, }, Widget{ id: 12, attrs: []string{"xyz"}, }, } for _, j := range widgets { fmt.Printf("%d ", j.id) for _, y := range j.attrs { fmt.Printf(" %s ", y) } fmt.Println() } }
输出:
10 blah foo
11 foo bar
12 xyz
创建结构体映射
示例代码:
package main import "fmt" type Emp struct { x int y []string } func main() { var list = map[string]*Emp{"e1": {1001, []string{"John", "US"}}} e := new(Emp) e.x = 1002 e.y = []string{"Rock", "UK"} list["e2"] = e fmt.Println(list["e1"]) fmt.Println(list["e2"]) }
输出:
&{1001 [John US]}
&{1002 [Rock UK]}
以上就是Go检查结构体中是否存在某个字段及创建结构体切片或映射的详细内容,更多关于Go结构体检查创建的资料请关注脚本之家其它相关文章!