feat: 从黄果 NET hgdjnet-server 9bfbafe 导入 HKDJ 官网后端

来源:hgdjnet-server 9bfbafe10d417deea959bd53117bc88a10e60a83
项目身份 HKDJ / JHA-216,独立官网仓库,Jenkins 守卫键 hkdjnet
测试目录 /server/hkdj_net,App/Web API 30331/30332

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-16 11:20:04 +08:00
co-authored by Claude Opus 4.7
parent 99a4854def
commit 85c0071fd8
653 changed files with 85000 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
package lock
import "sync"
// Queue 定义一个泛型队列结构
type Queue[T any] struct {
items []T
lock sync.RWMutex // 添加读写锁
}
// NewQueue 创建一个新的队列
func NewQueue[T any]() *Queue[T] {
return &Queue[T]{
items: make([]T, 0),
}
}
// Enqueue 入队操作 - 将元素添加到队列末尾
func (q *Queue[T]) Enqueue(item T) {
q.lock.Lock() // 写操作需要写锁
defer q.lock.Unlock()
q.items = append(q.items, item)
}
// Dequeue 出队操作 - 从队列头部移除并返回元素
func (q *Queue[T]) Dequeue() (T, bool) {
q.lock.Lock() // 写操作需要写锁
defer q.lock.Unlock()
var zero T
if len(q.items) == 0 {
return zero, false
}
item := q.items[0]
q.items = q.items[1:]
return item, true
}
// Peek 查看队列头部元素但不移除
func (q *Queue[T]) Peek() (T, bool) {
q.lock.RLock() // 读操作使用读锁
defer q.lock.RUnlock()
var zero T
if len(q.items) == 0 {
return zero, false
}
return q.items[0], true
}
// IsEmpty 检查队列是否为空
func (q *Queue[T]) IsEmpty() bool {
q.lock.RLock() // 读操作使用读锁
defer q.lock.RUnlock()
return len(q.items) == 0
}
// Size 返回队列中的元素个数
func (q *Queue[T]) Size() int {
q.lock.RLock() // 读操作使用读锁
defer q.lock.RUnlock()
return len(q.items)
}
// Clear 清空队列
func (q *Queue[T]) Clear() {
q.lock.Lock() // 写操作需要写锁
defer q.lock.Unlock()
q.items = make([]T, 0)
}