package main
import "fmt"
func main() {
queue := make(chan int, 10) // 缓冲大小为10
// 生产者
go func() {
for i := 0; i < 5; i++ {
queue <- i
fmt.Printf("入队: %d\n", i)
}
close(queue)
}()
// 消费者
for val := range queue {
fmt.Printf("出队: %d\n", val)
}package main
import (
"sync"
)
type Queue struct {
items []int
mu sync.Mutex
}
func (q *Queue) Enqueue(item int) {
q.mu.Lock()
defer q.mu.Unlock()
q.items = append(q.items, item)
}
func (q *Queue) Dequeue() (int, bool) {
q.mu.Lock()
defer q.mu.Unlock()
if len(q.items) == 0 {
return 0, false
}
item := q.items[0]
q.items = q.items[1:]
return item, true
}
func (q *Queue) Len() int {
q.mu.Lock()
defer q.mu.Unlock()
return len(q.items)
}
package main
import (
"sync"
"fmt"
)
var bufferPool = sync.Pool{
New: func() interface{} {
return make([]byte, 1024)
},
}
func main() {
buf := bufferPool.Get().([]byte)
// 使用 buf
fmt.Println(len(buf))
// 归还
bufferPool.Put(buf)
}
go get -u github.com/panjf2000/ants/v2package main
import (
"fmt"
"sync"
"github.com/panjf2000/ants/v2"
)
func worker(task int) {
fmt.Printf("处理任务: %d\n", task)
}
func main() {
pool, _ := ants.NewPool(10)
defer pool.Release()
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
_ = pool.Submit(func() {
defer wg.Done()
worker(i)
})
}
wg.Wait()