Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go结构体检查创建

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结构体检查创建的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文