代码拉取完成,页面将自动刷新
package main
import "fmt"
//Go 空结构体 struct{} 的使用
//核心:不占用任何空间,只占位使用,
//
//func main() {
// fmt.Println(unsafe.Sizeof(struct{}{}))
//}
/**
2、空结构体的作用
节省资源, 也可以当作占位符
2.1 实现集合set
运用map模拟set,只要map中的key ,不需要value
所以value 部分就可以用空结构体取代
*/
//type Set map[string]struct{}
//
//func (s Set) Add(k string) bool {
// _, ok := s[k]
// return ok
//}
//
//func (s Set) Has(k string) bool {
// _, ok := s[k]
// return ok
//}
//
//func (s Set) Remove(key string) {
// s[key] = struct{}{}
//}
//
//func (s Set) Delete(key string) {
// delete(s, key)
//}
//
//func main() {
// s := make(Set)
// s.Add("TOm")
// s.Add("Bob")
// fmt.Println(s)
// //fmt.Println(s.Has("Bob"))
//}
/*
*
2.2 不发送数据的信道(channel)
有时候使用 channel 不需要发送任何的数据,只用来通知子协
程(goroutine)执行任务
,或只用来控制协程并发度。这种情况下,
使用空结构体作为占位符就非常合适了。
*/
//func worker(ch chan struct{}) {
// <-ch
// fmt.Println("worker done")
// close(ch)
//}
//
//func main() {
// ch := make(chan struct{})
// go worker(ch)
// ch <- struct{}{}
//}
// 2.3 仅包含方法的结构体
type Door struct{}
func (d Door) Open() {
fmt.Println("open")
}
func (d Door) Close() {
fmt.Println("close")
}
//结构体只包含方法,不包含任何的字段
//Door事实上可以用任何的数据结构替代
func main() {
type Door int
type Door2 bool
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。