go嵌套匿名结构体的初始化详解

 更新时间:2020年12月15日 15:07:14   作者:darkalliance  
这篇文章主要介绍了go嵌套匿名结构体的初始化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

go匿名结构体

嵌套匿名结构体的 示例代码片.

type debugConfig struct {
 MaxQueueDepth int      `json:"maxQueueDepth"`
 ListenerEntries string `json:"listenerEntries"`
 Listeners  string
 Logging   struct {
 Info  string `json:"info"`
 Protocol string `json:"protocol"`
 Errlog string `json:"error"`
 Debug string `json:"debug"`
 }
}

初始化方式一

上述嵌套匿名结构体初始化赋值的示例代码片

 user1 := &debugConfig {
 MaxQueueDepth: 100,
 ListenerEntries: "hello",
 Listeners: "world",
 Logging: struct {
 Info  string `json:"info"`
 Protocol string `json:"protocol"`
 Errlog string `json:"error"`
 Debug string `json:"debug"`
 }{
 Info:"good",
 Protocol: "story",
 Errlog: "shenqi",
 Debug: "shuma",
 },
 }

说明

匿名 struct 直接初始化的时候是需要给出它的结构的。

初始化方式二

上述嵌套匿名结构体初始化赋值的示例代码片

 var user2 debugConfig
 user2.MaxQueueDepth = 100
 user2.ListenerEntries = "hello"
 user2.Listeners = "world"
 user2.Logging.Info = "good"
 user2.Logging.Protocol = "story"
 user2.Logging.Errlog = "shenqi"
 user2.Logging.Debug = "shuma"

说明

这种方式写起来更清晰省事儿~

补充:golang 使用匿名结构体的问题

golang允许使用匿名结构体,形如

type Test struct {
  param1 struct {
    param2 string
  }
}

一般在使用的时候可以直接这样初始化

a := Test{
 param1: struct{ param2 string }{param2: "test"},
}

或者

b := new(Test)

b.param1.param2 = "test"   

但今天遇到一种情况

匿名结构体的成员上有tag声明,形如

type Test struct {
  param1 struct {
    param2 string `json:"param2"`
  }
}

这时使用第一种初始化方式,始终报错,说类型不匹配,查了很久,偶然情况下去掉了结构体定义中的tag声明,居然不报错了,这时反应过来,使用第一种初始化方式,必须保证跟定义完全一样,包括tag声明等

a := Test{
 param1: struct{ param2 string `json:"param2"` }{param2: "test"},
}

这样就没问题了~

最后觉得如果遇到这种匿名结构体,还是使用第二种初始化方式简洁方便。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Golang中Gin框架的使用入门教程

    Golang中Gin框架的使用入门教程

    这篇文章主要为大家详细介绍了Golang中Gin框架的使用教程,文中通过简单的示例为大家讲解了Gin框架的安装与使用,感兴趣的小伙伴开业跟随小编一起学习一下
    2022-10-10
  • Golang为什么占用那么多的虚拟内存原理解析

    Golang为什么占用那么多的虚拟内存原理解析

    这篇文章主要介绍了Golang为什么占用那么多的虚拟内存原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 深入了解Golang中占位符的使用

    深入了解Golang中占位符的使用

    在写 golang 的时候,也是有对应的格式控制符,也叫做占位符,写这个占位符,需要有对应的数据与之对应,不能瞎搞。本文就来和大家聊聊Golang中占位符的使用,希望对大家有所帮助
    2023-03-03
  • Golang的锁机制使用及说明

    Golang的锁机制使用及说明

    这篇文章主要介绍了Golang的锁机制使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Go设计模式之享元模式讲解和代码示例

    Go设计模式之享元模式讲解和代码示例

    享元是一种结构型设计模式,它允许你在消耗少量内存的情况下支持大量对象,模式通过共享多个对象的部分状态来实现上述功能,换句话来说,享元会将不同对象的相同数据进行缓存以节省内存,本文就将通过代码示例给大家详细介绍一下享元模式
    2023-06-06
  • Go 协程超时控制的实现

    Go 协程超时控制的实现

    本文主要介绍了Go 协程超时控制的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Golang实践之Error创建和处理详解

    Golang实践之Error创建和处理详解

    在 C#、Java 等语言中常常使用 try...catch的方式来捕获异常,但是在Golang 对于错误处理有不同的方式,像网上也有很多对 error 处理的最佳实践的文章,其中很多其实就是对 error 的统一封装,使用规范进行约束,本文主要是记录自己对处理 Error 的一些认识和学习
    2023-09-09
  • 重学Go语言之错误处理与异常机制详解

    重学Go语言之错误处理与异常机制详解

    Go语言的开发者显然觉得 try-catch被滥用了,因此 Go不支持使用 try-catch语句捕获异常处理,那么,Go语言是如何定义和处理程序的异常呢,下面我们就来看看吧
    2023-08-08
  • Go工具链之代码测试神器go test详解

    Go工具链之代码测试神器go test详解

    这篇文章主要给大家介绍Go 工具链go test,go test 是 Go 工具链中的一个命令,用于编译和运行按照要求编写的 Golang 测试代码,并生成测试报告,感兴趣的同学跟着小编一起来看看本文吧
    2023-07-07
  • Go语言中的变量声明和赋值

    Go语言中的变量声明和赋值

    这篇文章主要介绍了Go语言中的变量声明和赋值的方法,十分的细致全面,有需要的小伙伴可以参考下。
    2015-04-04

最新评论