1 Star 0 Fork 0

Jiang/go_program_lang_learn

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
null_struct.go 1.53 KB
一键复制 编辑 原始数据 按行查看 历史
Jiang 提交于 2024-11-22 15:16 +08:00 . finish method
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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jiang_imer/go_program_lang_learn.git
git@gitee.com:jiang_imer/go_program_lang_learn.git
jiang_imer
go_program_lang_learn
go_program_lang_learn
77bb2af9905f

搜索帮助