首页 > 其他 > 详细

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

时间:2019-09-27 01:05:31      阅读:218      评论:0      收藏:0      [点我收藏+]

空结构体的特点和作用

  • 参考代码
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
  • 总结
    • 空结构体的特点
      • 不占用内存
      • 地址不变
    • 空结构体作用
      • 建议用于传递信号的通道,因为不占用内存

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

原文:https://www.cnblogs.com/MyUniverse/p/11595043.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!