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

空结构体的特点和作用

参考代码

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

总结

  1. 空结构体的特点
  • 不占用内存
  • 地址不变
  1. 空结构体作用
    建议用于传递信号的通道,因为不占用内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我峰兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值