当前位置: 首页 > 编程笔记 >

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

熊锐进
2023-03-14
本文向大家介绍Golang空结构体struct{}用途,你知道吗,包括了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{}内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 在着色器语言GLSL ES前面内容介绍过浮点数float、整形数int、三维向量vec3、4x4矩阵mat4等各种数据类型,关于结构体主要功能就是利用WebGL着色器已经提供的常见数据类型,自定义一个新的数据类型。 WebGL着色器语言中结构体和C语言类似,结构体是由多个同类或不同类的数据类型构成的一个集合。 // 首先定义一个结构体,也就是自定义一个数据类型 struct Directional

  • Solidity提供struct来定义自定义类型。我们来看看下面的例子: pragma solidity ^0.4.0; contract CrowdFunding{ struct Funder{ address addr; uint amount; } struct Campaign{ address benefi

  • 本文向大家介绍关于C#结构体 你需要知道的,包括了关于C#结构体 你需要知道的的使用技巧和注意事项,需要的朋友参考一下 结构体概念   在C#中,结构体是值类型,一般适用于表示类似Point、Rectangle、Color的对象   值类型能够降低对堆的管理、使用。降低垃圾回收,表现出更好的性能。可是值类型也有不好的一面。会涉及到装箱拆箱等操作 结构体声明   结构体声明定义了一种新的数据类型,这

  • 概述 结构体是将零个或多个任意类型的变量,组合在一起的聚合数据类型,也可以看做是数据的集合。 声明结构体 //demo_11.go package main import ( "fmt" ) type Person struct { Name string Age int } func main() { var p1 Person p1.Name =

  • Go 语言中的结构体和 C 语言中结构体一样,都是用来保存一组 不同类型的数据 Go 语言中的结构体和 C 语言中结构体一样,都需要先定义结构体类型再利用结构体类型定义结构体变量 定义结构体类型 type 类型名称 struct{ 属性名称 属性类型 属性名称 属性类型 ... ... } type Studentstruct { name string age int

  • 结构体类型struct   这一章我们来重点讲解一下Go的重要数据类型——结构体类型struct。一个结构体就是一个命名的元素序列,每个元素又叫做字段,每个字段都有一个类型和名字。从面向对象的角度看,结构体类型中的字段代表了该类型的属性,而与这些字段相关的方法,则可以看作针对这些属性的操作。 结构体定义   Go语言的结构体定义和C是非常类似的。以type开始,后面跟着结构体的名字、struct{