golang
golang
gdut17
这个作者很懒,什么都没留下…
展开
-
golang 协程题目
都是一个货色,要么使用无缓冲channel, 要么使用有缓冲chan+waitgroup等待协程退出,或者使用全局变量判断是否终止协程。原创 2024-04-13 15:39:38 · 368 阅读 · 0 评论 -
golang context
作用:用于在go协程中 传递上下文、超时、取消、传值底层实现:是由互斥锁、channel、map来实现的互斥锁:保护临界资源channel: 用于信号通知,比如ctx.Done()map: 保存父ctx下派生的所有子ctx, 父ctx关闭,子ctx都关闭实现的接口。原创 2024-04-11 18:52:15 · 247 阅读 · 0 评论 -
golang 协程池 动态扩缩容
参考 github.com/panjf2000/ants。原创 2024-04-08 20:10:07 · 448 阅读 · 0 评论 -
golang mutex
正常模式(非公平锁):所有阻塞在等待队列的go协程会按顺序获取锁,通常新请求的go协程会更容易获取锁。饥饿模式(公平锁):新请求锁的go协程不会获取锁,而是加入队列尾部阻塞等待。饥饿模式触发条件:当一个go协程等待锁的时间超过1ms。支持并发读,读锁不阻塞读,阻塞写;2.sync.RwMutex读写锁底层实现。2.sync.RwMutex读写锁底层实现。1.sync.Mutex互斥锁底层实现。1.sync.Mutex互斥锁底层实现。锁有两种模式,正常模式和饥饿模式。原创 2024-04-06 17:58:06 · 374 阅读 · 0 评论 -
golang channel
如果多个goroutinue都监听同一个channel,这个channel被关闭,所有gorountine都能收到退出信号。如果多个goroutinue都监听同一个channel,那么channel的数据被随机一个gorountine读取消费。channel底层是通过循环数组实现的先入先出队列,使用互斥锁保证channel写入和读取数据的线程安全。(1)创建方式不同, 有缓冲的chan会带上缓冲区大小,make(chan type, size)底层使用互斥锁,保证读写channel队列的线程安全。原创 2024-04-06 15:56:13 · 493 阅读 · 0 评论 -
golang map
底层基于hash表实现,实现有2个结构体hmap,bmap,map由若干个桶存储,每个桶存8个元素,使用链地址解决hash冲突。并不扩大容量,桶的数量保持不变,只是把旧桶的数据重新排列一次,使得同个桶的key排列更紧密,节省空间。当key定位到的桶已经填满8个元素,会创建一个溢出桶,将溢出桶插入当前桶的链表尾部。当桶总数>=2^15 如果溢出桶总数>=2^15 ,则认为溢出桶过多。当桶总数 < 2^15, 如果溢出桶总数>=桶总数,则认为溢出桶过多。如何保证有序,先对key排序,再按key遍历map。原创 2024-04-06 12:41:13 · 537 阅读 · 0 评论 -
golang 数组和切片
3.如果当前切片的容量大于等于阈值(默认 256),小切片的2倍生长,大切片生长1.25倍;2.如果当前切片的容量小于阈值(默认 256)就会将容量翻倍;1.如果期望容量大于当前容量的两倍就会使用期望容量;2.数组是深拷贝,切片是浅拷贝,切片是引用类型。1.数组长度固定,切片长度可变。扩容规则 不同版本不一样。原创 2024-04-06 11:23:09 · 302 阅读 · 0 评论 -
golang 结构体比较
2.int string 普通类型,如果变量顺序不一样,则不可比较。1.如果结构体成员包含 map, slice, 不可比较。原创 2024-04-06 10:42:18 · 397 阅读 · 1 评论 -
golang变量初始化顺序
3.init()函数。4.main()函数。原创 2024-04-06 10:35:51 · 417 阅读 · 0 评论 -
golang select
1.随机性,多个case同时满足,随机返回一个。2.没有default会阻塞。监听多个文件描述符状态。原创 2024-04-06 10:30:49 · 91 阅读 · 0 评论 -
golang make和new
1.make只能初始化 切片、map、channel 这三种数据类型,new可以初始化任意类型。2.make返回原有数据类型,new返回指针。原创 2024-04-06 10:25:45 · 120 阅读 · 0 评论 -
golang defer实现
原理:底层通过链表实现,每次新增的defer调用,通过头插法插入链表;defer执行时,从链表头开始遍历,相当于实现了后加入的defer先执行,先加的defer后执行。derfer : 延迟调用,函数结束返回时执行,多个defer按照先进后出的顺序调用。原创 2024-04-05 19:30:01 · 446 阅读 · 0 评论 -
学习资料记录
map底层go修养面经。原创 2024-03-23 13:49:13 · 497 阅读 · 0 评论 -
vscode配置go远程linux
Tools environment: GOPATH=/root/goInstalling 9 tools at /root/go/bin in module mode. gopkgs go-outline gotests gomodifytags impl goplay dlv golint goplsInstalling github.com/uudashr/gopkgs/v2/cmd/gopkgs (/root/go/bin/gopkgs) SUCCEEDED原创 2021-03-05 13:37:44 · 270 阅读 · 0 评论 -
golang context与sync.WaitGroup
sync.WaitGroup 等待组,协程同步// A WaitGroup must not be copied after first use.type WaitGroup struct { noCopy noCopy // 64-bit value: high 32 bits are counter, low 32 bits are waiter count. // 64-bit atomic operations require 64-bit alignment, but 32-bit原创 2021-01-20 12:00:21 · 317 阅读 · 0 评论 -
golang打包静态资源-packr
安装go get -u github.com/gobuffalo/packr/packrgo get -u github.com/gobuffalo/packr当前目录:[root@localhost d0116]# tree.├── go.mod├── go.sum├── static│ ├── index2.html│ ├── index.html│ └── js│ └── example.js└── x.go执行packr[root@loca原创 2021-01-16 21:00:09 · 1718 阅读 · 0 评论 -
m3u8 ts文件解密之使用go语言AES库实现加解密
// The AES block size in bytes.const BlockSize = 16// NewCipher creates and returns a new cipher.Block. The key argument should be the AES key, either 16, 24, or 32 bytes to select AES-128, AES-192, or AES-256.func NewCipher(key []byte) (cipher.Block,原创 2021-01-02 19:59:02 · 1931 阅读 · 0 评论 -
m3u8格式转成MP4-使用go语言实现
在此写m3u8转mp4代码原理就是,按照m3u8文件的顺序,合并若干个小的ts文件,写入总mp4。go语言实现download tspackage mainimport ( "fmt" "net/http" "io/ioutil" "regexp" "sync" "strconv" "time" "os")var file *os.Filevar wg sync.WaitGroup//ll ./ts3/ | wc -lfunc main() { file, _原创 2020-12-26 17:06:10 · 2857 阅读 · 1 评论 -
go语言 tcp封包LTV格式
package mainimport ( "encoding/binary" "encoding/json" "fmt" "io" "net")type REQ struct { Code int64 // Content string // 发送的内容}type RESP struct { Content string // 发送的内容 Code int64 //}func RecvPck(conn net.Conn) (*REQ, error) {原创 2020-12-16 12:30:32 · 516 阅读 · 0 评论 -
go websocket
cd go/src && mkdir -p golang.org/xgit clone https://github.com/golang/netgit clone https://github.com/golang/cryptogo get go get golang.org/x/net/websocket/*cd go/src && mkdir -p golang.org/xgit clone https://github.com/golang/net原创 2020-10-21 11:15:42 · 145 阅读 · 0 评论