空结构体的特点和作用

  • 参考代码
package mainimport ("fmt""unsafe"
)func main() {empStruct()
} //空结构体的实例和作用
func empStruct(){//空结构体的特点:1、不占用内存;2、地址不变var s struct{}var s1 struct{}fmt.Println("空结构体占用内存的情况:",unsafe.Sizeof(s))fmt.Printf("空结构体指针指向情况:s = %p, s1 = %p,两个指针的比较结果:%v",&s,&s1,&s==&s1)strChan := make(chan string,3)signChan := make(chan struct{},1)  //接收数据信号signChan1 := make(chan struct{},2) //操作完成信号go func(){// 用来接收信息<- signChan  //阻塞协程,直到signChan接收到值for value := range strChan{fmt.Println("接收到值为:",value)}signChan1 <- struct{}{}}()go func(){// 模拟发送数据for index,value := range []string{"1","2","3"}{fmt.Println("发送数据:",value)strChan <- valueif index==2{signChan <- struct{}{} }}close(strChan)signChan1 <- struct{}{}}()fmt.Println("等待上面连个协程运行结束")<- signChan1  <- signChan1  //阻塞,直到上面两个协程完成
}
  • 输出结果
===================空结构体测试=============
空结构体占用内存的情况: 0
空结构体指针指向情况:s = 0x58ccd8, s1 = 0x58ccd8,两个指针的比较结果:true等待上面连个协程运行结束
发送数据: 1
发送数据: 2
发送数据: 3
接收到值为: 1
接收到值为: 2
接收到值为: 3
  • 总结

    • 空结构体的特点

      • 不占用内存
      • 地址不变
    • 空结构体作用
      • 建议用于传递信号的通道,因为不占用内存

转载于:https://www.cnblogs.com/MyUniverse/p/11595043.html

go struct{} 空结构体的特点和作用相关推荐

  1. go语言-空结构体/ chan struct{}

    文章目录 空结构体 struct{} chan struct{} 常用用法 带缓冲的chan struct{}数据读写 空结构体 struct{} 空结构体的宽度是0,占用了0字节的内存空间. var ...

  2. golang怎么给空结构体赋值

    一.前言 最近没少使用golang,也没经过系统的学习,直接就上去开发了,遇到不少坑也学到不少东西,本次记录下给空结构体赋值的问题. 二.案例 1.结构体结构及错误 type Test struct ...

  3. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { };int main() {st ...

  4. Golang之空结构体和零长数组的实践

    空结构体和零长数组(两个复合类型)都仅仅是一个占位符,不占用空间,这里编译器进行了优化,如果结构体或数组的unsafe.sizeof=0则直接返回zerobase. // 必须用key来初始化结构体 ...

  5. Go 空结构体的 3 种使用场景

    转子地址:https://mp.weixin.qq.com/s/zWzyl6x9sZdXZCaAuva2lA 在 Go 语言中,有一个比较特殊的类型,经常会有刚接触 Go 的小伙伴问到,又或是不理解. ...

  6. 【C】sizeof(空结构体/空类)的大小

    sizeof(空类/空结构体) = 1: #include <iostream> using namespace std; // 空类 class ClassA { }; // 继承空类的 ...

  7. struct sk_buff结构体详解

    struct sk_buff是linux网络系统中的核心结构体,linux网络中的所有数据包的封装以及解封装都是在这个结构体的基础上进行. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  8. struct timeval结构体

    struct timeval结构体在time.h中的定义为: struct timeval { __time_t tv_sec;        /* Seconds. */ __suseconds_t ...

  9. linux sock结构体,struct socket结构体详解

    在内核中为什么要有struct socket结构体呢? struct socket结构体的作用是什么? 下面这个图,我觉得可以回答以上两个问题.  由这个图可知,内核中的进程可以通过使用struct ...

最新文章

  1. 用Qt 4.4编写drcom的GUI (转)
  2. python 编码规范 PEP8整理
  3. 字符串加括号问题(矩阵乘法组合问题)C++
  4. 为什么两层3*3卷积核效果比1层5*5卷积核效果要好?
  5. ITPro Magazine2006年第6期发布
  6. 用户输入一个字符串,将下标为偶数的字符提出来合并成一个新的字符串A,再将下标为奇数的字符提出来合并成一个新的字符串B,再将字符串A和B连接起来并输出。
  7. 未来计算机领域最急缺的人,未来十年最紧缺职业 没人愿意干的高薪职业
  8. 通达oa wbupload.php,关于通达OA上传附件类型限制的设置
  9. OpenGL基础2:OpenGL简介
  10. caffe 安装指南
  11. 几分钟,就看到人性的几个面孔
  12. 做中学之五笔输入法实践教程
  13. Vue开发工具vuejs-devtools超级详细安装教程以及常见问题解决
  14. 不做生活上的“富察皇后”,Soul星球遇见真实的灵魂
  15. 各位老铁,善财读书会试运营了
  16. 讯飞语音的使用及常遇到的问题
  17. J - Janitor Troubles 三分 海伦公式
  18. 梆梆加固之防内存dump分析
  19. GNU开发工具的使用方法
  20. qgraphicsitem 复制副本,QGraphicsItem:调用paint函数时

热门文章

  1. java中拼写xml
  2. adb logcat介绍
  3. iOS开发系列文章(持续更新……)
  4. mysqldump主要参数探究
  5. Unity3d 在不同设备中的文件读写 的路径
  6. Asp.Net 分段,断点,下载
  7. 滴眼液的ph值与胶原纤维的粘结性(还没写完)
  8. flink自定义trigger详解
  9. 余敖的实验整理(还没完成)
  10. hexo的yelee主题本地搜索故障