Golang空结构体struct{}用途,你知道吗

 更新时间:2021年01月15日 14:52:08   作者:罗奇正  
这篇文章主要介绍了Golang空结构体struct{}用途,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

golang 空结构体 struct{} 可以用来节省内存

a := struct{}{}
println(unsafe.Sizeof(a))
// Output: 0

理由如下:

  1. 如果使用的是map,而且map又很长,通常会节省不少资源
  2. 空struct{}也在向别人表明,这里并不需要一个值

本例说明在map里节省资源的用途:

set := make(map[string]struct{})
for _, value := range []string{"apple", "orange", "apple"} {
  set[value] = struct{}{}
}
fmt.Println(set)
// Output: map[orange:{} apple:{}]

下例,演示了struct{}可以向人展示对象中不需要任何数据,仅包含需要方法。在调用也并无任何区别

type Lamp struct{}

func (l Lamp) On() {
    println("On")

}
func (l Lamp) Off() {
    println("Off")
}

func main() {
    // Case #1.
    var lamp Lamp
    lamp.On()
    lamp.Off()
    // Output:
    // on
    // off
 
    // Case #2.
    Lamp{}.On()
    Lamp{}.Off()
    // Output: 
    // on
    // off
}

还有其他情况,比如有时候使用channel,但并不需要附带任何数据。

func worker(ch chan struct{}) {
 // Receive a message from the main program.
 <-ch
 println("roger")
 
 // Send a message to the main program.
 close(ch)
}

func main() {
 ch := make(chan struct{})
 go worker(ch)
 
 // Send a message to a worker.
 ch <- struct{}{}
 
 // Receive a message from the worker.
 <-ch
 println(“roger")
 // Output:
 // roger
 // roger
}

到此这篇关于Golang空结构体struct{}用途,你知道吗的文章就介绍到这了,更多相关Golang空结构体struct{}内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang替换无法显示的特殊字符(\u0000, \000, ^@)

    golang替换无法显示的特殊字符(\u0000, \000, ^@)

    这篇文章主要介绍了golang替换无法显示的特殊字符,包括的字符有\u0000, \000, ^@等,下文详细资料,需要的小伙伴可以参考一下
    2022-04-04
  • 解读unsafe.Pointer和uintptr的区别

    解读unsafe.Pointer和uintptr的区别

    这篇文章主要介绍了解读unsafe.Pointer和uintptr的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • GoFrame框架使用避坑指南和实践干货

    GoFrame框架使用避坑指南和实践干货

    这篇文章主要为大家介绍了GoFrame框架使用避坑指南和实践干货,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言编写高可用日志收集脚本

    Go语言编写高可用日志收集脚本

    在分布式系统和微服务架构中,日志是排查问题、审计行为、监控状态的重要来源,本文将编写一个轻量级,高可用的日志收集脚本,有需要的小伙伴可以了解下
    2025-09-09
  • Go语言面试题之select和channel的用法

    Go语言面试题之select和channel的用法

    金九银十面试季到了(PS:貌似今年一年都是面试季),就业环境很差,导致从业人员不得不卷。本文将重点讲解一下Go面试进阶知识点之select和channel,需要的可以参考一下
    2022-09-09
  • Go语言中println和fmt.Println区别

    Go语言中println和fmt.Println区别

    本文主要介绍了Go语言中println和fmt.Println区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • golang时间/时间戳的获取与转换实例代码

    golang时间/时间戳的获取与转换实例代码

    说实话,golang的时间转化还是很麻烦的,最起码比php麻烦很多,下面这篇文章主要给大家介绍了关于golang时间/时间戳的获取与转换的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Go 函数选项模式

    Go 函数选项模式

    在 Go 语言中,函数选项模式(Functional Options Pattern) 是一种优雅的设计模式,用于处理可选配置参数,特别是当配置项较多或可能变化时,它避免了冗长的构造函数参数列表,提高了代码的可读性和可扩展性,本文介绍Go函数选项模式,感兴趣的朋友一起看看吧
    2025-08-08
  • Go 简单实现多租户数据库隔离

    Go 简单实现多租户数据库隔离

    本文主要介绍了Go 简单实现多租户数据库隔离,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Go语言实现枚举的示例代码

    Go语言实现枚举的示例代码

    本文主要介绍了Go语言实现枚举的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论