Go每日一题

Go每日一题 今日(2023-05-08)

一 、空 struct{} 占多少空间?有什么用途?

在 Go 语言中,空结构体(struct{})不包含任何字段,因此它占用的空间大小为零。在内存中,空结构体实际上不占用任何空间。这使得空结构体在某些特定场景下非常有用。

空结构体的一些用途包括:

用作占位符:在某些情况下,可能需要一个占位符来表示某种状态或值。空结构体可以作为一个轻量级的占位符,不占用内存空间。

用作集合的元素类型:当你需要一个集合(例如,一个包含不重复元素的集合),但不关心元素的值时,可以使用 map[T]struct{},其中 T 是键类型。这种情况下,空结构体用作值,只占用零字节的空间,降低内存开销。例如:

func main() {
    set := make(map[string]struct{})
    set["A"] = struct{}{}
    set["B"] = struct{}{}
    set["A"] = struct{}{} // 重复添加 "A",不会导致内存浪费

    // 检查某个元素是否在集合中
    if _, ok := set["A"]; ok {
        fmt.Println("A exists in the set")
    }
}
用作信号通道:当使用 Go 语言的通道(channels)进行同步操作时,可以使用空结构体作为通道的类型,表示一个信号,而不是具体的值。这样可以避免不必要的内存分配。例如:

func main() {
    done := make(chan struct{})

    go func() {
        fmt.Println("Working...")
        time.Sleep(2 * time.Second)
        done <- struct{}{} // 发送一个空结构体信号表示完成
    }()

    fmt.Println("Waiting for the task to finish...")
    <-done // 等待接收空结构体信号
    fmt.Println("Task finished.")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang每日一库是一个系列的文章,旨在介绍Golang中的各种优秀的第三方库。其中一篇文章介绍了zap库和logrus库。\[1\]zap库是Golang中性能最高的日志库,而logrus库虽然已经不再维护和更新,但在使用的简易程度方面更好用一些。\[1\]除了这两个库,还有很多其他的日志库可以选择。另外,flag库也是Golang中常用的库之一,用于处理命令行参数。\[2\]\[3\]flag库提供了多种选项类型,包括自定义选项类型和时间间隔类型。自定义选项类型可以根据需求进行定义,而时间间隔类型支持多种格式,如"300ms"、"-1.5h"、"2h45m"等。\[2\]\[3\]这些库都是Golang开发中常用的工具,可以帮助开发者更高效地进行日志记录和命令行参数处理。 #### 引用[.reference_title] - *1* [Golang一日一库之logrus](https://blog.csdn.net/Zuko_chen/article/details/130212672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Go每日一库之Flag](https://blog.csdn.net/weixin_43999327/article/details/130701461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值