Go检查结构体中是否存在某个字段及创建结构体切片或映射

 更新时间:2024年01月11日 16:24:11   作者: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结构体检查创建的资料请关注脚本之家其它相关文章!

相关文章

  • golang网络socket粘包问题的解决方法

    golang网络socket粘包问题的解决方法

    这篇文章主要介绍了golang网络socket粘包问题的解决方法,简单讲述了socket粘包的定义并结合实例形式分析了Go语言解决粘包问题的方法,需要的朋友可以参考下
    2016-07-07
  • Golang指针的操作以及常用的指针函数

    Golang指针的操作以及常用的指针函数

    本文主要介绍了Golang指针的操作以及常用的指针函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Golang Heap的源码剖析

    Golang Heap的源码剖析

    这篇文章主要给大家详细剖析了Golang Heap源码,文中有详细的代码示例,对我们学习Golang Heap有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • Golang自定义开发Prometheus exporter详解

    Golang自定义开发Prometheus exporter详解

    Exporter是基于Prometheus实施的监控系统中重要的组成部分,承担数据指标的采集工作,这篇文章主要为大家介绍了如何自定义编写开发 Prometheus exporter,感兴趣的可以了解一下
    2023-06-06
  • go语言切片slice使用细节和注意事项整理大全

    go语言切片slice使用细节和注意事项整理大全

    这篇文章主要给大家介绍了关于go语言切片slice使用细节和注意事项整理的相关资料,需要的朋友可以参考下
    2024-05-05
  • Golang设计模式之外观模式的实现

    Golang设计模式之外观模式的实现

    这篇文章主要介绍了Golang设计模式之外观模式的实现,外观模式是一种常用的设计模式之一,是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统的各种功能,从而降低了系统的复杂度,需要详细了解可以参考下文
    2023-05-05
  • Go easyjson使用及反射原理

    Go easyjson使用及反射原理

    这篇文章主要介绍了Go easyjson使用技巧,详细介绍了go自带JSON库使用的反射原理,性能相对较差,可以使用easyjson代替,需要的朋友可以参考下
    2022-04-04
  • Go语言中两个比较流行的缓存库使用示例

    Go语言中两个比较流行的缓存库使用示例

    缓存是计算机科学中的一个重要概念,设想某个组件需要访问外部资源,它向外部源请求资源,接收并使用资源,这些步骤都需要花费时间,下面这篇文章主要给大家介绍了关于Go语言中两个比较流行的缓存库使用的相关资料,需要的朋友可以参考下
    2024-04-04
  • go语言静态库的编译和使用方法

    go语言静态库的编译和使用方法

    这篇文章主要介绍了go语言静态库的编译和使用方法,本文以windows平台为例,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Go简单实现协程池的实现示例

    Go简单实现协程池的实现示例

    本文主要介绍了Go简单实现协程池的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论