go struct{}的几种特殊用法

类型字面量struct{}有些类似于空接口类型interface{},它代表了既不包含任何字段也不拥有任何方法的空结构体类型。
struct{}类型值的表示法只有一个,即:struct{}{}。并且,它占用的内存空间是0字节。确切地说,这个值在整个 Go 程序中永远都只会存在一份。虽然我们可以无数次地使用这个值字面量,但是用到的却都是同一个值。

  1. 声明为声明为map[string]struct{}
    由于struct{}是空,不关心内容,这样map便改造为set
    map可以通过“comma ok”机制来获取该key是否存在,例如_, ok := map["key"],如果没有对应的值,ok为false
    可以通过定义成map[string]struct{}的形式,值不再占用内存。其值仅有两种状态,有或无
    如果定义的是map[string]bool,则结果有true、false或没有
     
    下面的例子用于查看数组中是否有重复的值,就使用了map[string]struct{}
    如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
func containsDuplicate(nums []int) bool {
    m := make(map[int]struct{})
    for _, v := range nums{
        _, ok := m[v]
        if ok {
            return true
        }
        m[v] = struct{}{}
    }
    return false
}
  1. chan struct{}:可以用作通道的退出
     
  2. 两个structt{}{}地址相等

参考:https://blog.csdn.net/kturing/article/details/80557280

给TA打赏
共{{data.count}}人
人已打赏
计算机基础

Go语言学习之path/filepath包

2020-12-18 22:39:17

程序代码计算机基础

教程:使用CSS 3D变换创建3D的云

2020-12-18 22:40:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索