空结构体struct{}的用法

如题,空接口interface{}可以用来做泛型,那空结构体struct{}一般是如何使用的呢?

已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: DawnDIY godonggua Sergey yet

空指针最重要的是内存消耗等于0


type S struct {
a uint16
b uint32
}
var s S
fmt.Println(unsafe.Sizeof(s)) // prints 8, not 6
var s struct{}
fmt.Println(unsafe.Sizeof(s)) // prints 0

更多详细的说明请参考dave的这个博客,他讲的非常清楚,所以我们一般使用空struct来当做signal。就是不需要存储值的占位符
http://dave.cheney.net/2014/03/25/the-empty-struct

stevewang

赞同来自: godonggua yet Sergey

比如用来做控制而非数据信息:
chan struct{}
比如用来实现set:
map[string]struct{}

negronihe

赞同来自: Sergey

    // test code
a := struct{}{}
b := struct{}{}
log.Println(a == b) // true
log.Printf("%p, %p\n", &a, &b) // 0x7bb7f8, 0x7bb7f8

注意指针值居然是一样的,哈哈。

要回复问题请先登录注册