• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

gostruct{}空结构体的特点和作用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

空结构体的特点和作用

  • 参考代码
package main

import (
	"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 <- value
			if index==2{
				signChan <- struct{}{} 
			}
		}
		close(strChan)
		signChan1 <- struct{}{}
	}()

	fmt.Println("等待上面连个协程运行结束")
	<- signChan1  
	<- signChan1  //阻塞,直到上面两个协程完成
}
  • 输出结果
===================空结构体测试=============
空结构体占用内存的情况: 0
空结构体指针指向情况:s = 0x58ccd8, s1 = 0x58ccd8,两个指针的比较结果:true等待上面连个协程运行结束
发送数据: 1
发送数据: 2
发送数据: 3
接收到值为: 1
接收到值为: 2
接收到值为: 3
  • 总结
    • 空结构体的特点
      • 不占用内存
      • 地址不变
    • 空结构体作用
      • 建议用于传递信号的通道,因为不占用内存

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
(转)Go语言switch语句和fallthrough用途发布时间:2022-07-10
下一篇:
Go语言TUI界面库(命令行界面)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap