Golang空结构体struct{}用途,你知道吗
作者:罗奇正 发布时间:2024-04-26 17:36:56
标签:Golang,空结构体,struct{}
golang 空结构体 struct{} 可以用来节省内存
a := struct{}{}
println(unsafe.Sizeof(a))
// Output: 0
理由如下:
如果使用的是map,而且map又很长,通常会节省不少资源
空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
}
来源:https://blog.csdn.net/weixin_44328662/article/details/86501900


猜你喜欢
- 前言我们在处理数据库的问题的时候,有时在数据库端看不到异常的等待,但是应用却报连接异常。这种情况,有可能是在压力还没有传递到数据库,在网络这
- 通过文件夹导入包要求每个目录下都有一个__init__.py文件,此文件可空白。也可不空。a@ubuntu:~/Desktop$ tree
- 创建一个apps包 专门来放子应用创建users子应用 处理用户事务追加导包路径在settings中用 print(sys.path) 查看
- 1.stack()stack()用于将列索引转换为最内层的行索引,这样叙述比较抽象,看示例就容易理解啦:准备一组数据,给其设置双索引。imp
- 学习https://matplotlib.org/gallery/index.html 记录,描述不一定准确,具体请参考官网Matplotl
- python中字典可以一键多值,也就是意味着一个键可以对应多个值。例:#encoding=utf-8print '中国'#字
- 12306火车票购票软件大家都用过,怎么用Python写一个命令行的火车票查看器,要求在命令行敲一行命令来获得你想要的火车票信息,下面通过本
- 文本如图:Python:import sysresult=[]with open('accounts.txt','r
- 在Web 开发中,JavaScript的一个很重要的作用就是对DOM进行操作,可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行
- 游戏介绍先看看界面这是一个拼图游戏,可以自选难度和自选闯关图片游戏开始后根据不同难度,生成与所选主图 对应的 不同张数的 随机顺序的小图,然
- 写在最前面:我在研究机器学习的过程中,给的数据集是手写数字图片被处理后的由0,1表达的txt文件,今天写一写关于图片转化为二进制txt文件的
- 有时候写爬虫的时候需要将浏览器中的headers信息复制到Pycharm中使用,但是复制过来的格式不是需要的键值格式,挨个手动敲键盘太累,毕
- 一、前言MYSQL中MDL锁一直是一个比较让人比较头疼的问题,我们谈起锁一般更加倾向于INNODB下层的gap lock、next key
- 前言众所周知,jquery在我们日常开发中的使用频率非常高,与js相比,我们省去了冗长的获取元素的代码,不用考虑一些麻烦的兼容问题,更加方便
- 具体的upgrade脚本如下:动态删除索引DROP PROCEDURE IF EXISTS UPGRADE;DELIMITER $$CREA
- centos6.x默认安装的python为2.6版本,今天换成了3.5版本这里不再讲如何升级python版本在安装完新的版本后,之前安装的插
- 1、环境PyCharmPython 3.6pip安装的依赖包包括:requests 2.25.0、urllib3 1.26.2、docx 0
- MySQL—触发器将两个关联的操作步骤写到程序里面,并且要用事务包裹起来,确保两个操作称为一个原子操作,要么全部执行,要
- 简单构建一个项目,如下是mian.go文件package main// 条件编译-构建标签-如何使用IDE编译和识别func main()
- 现在能用自动化实现的,尽量使用自动化程序去操作,代替人工去操作,更有效率。今天说下用python结合adb命令去实现安卓手机端的通话压力测试