Files
TaskPool/internal/constant/sentence.go
T
2025-12-20 12:59:37 +08:00

63 lines
1.2 KiB
Go

package constant
import (
"bufio"
"bytes"
_ "embed"
"encoding/json"
"math/rand"
"sync"
)
//go:embed sentence1-10000.json
var sentenceData []byte
type Sentence struct {
Name string `json:"name"`
From string `json:"from"`
}
var (
lineCount int
lineOffsets []int64
sentenceOnce sync.Once
)
// initSentences 初始化:统计行数和记录每行偏移
func initSentences() {
sentenceOnce.Do(func() {
scanner := bufio.NewScanner(bytes.NewReader(sentenceData))
var offset int64 = 0
for scanner.Scan() {
lineOffsets = append(lineOffsets, offset)
offset += int64(len(scanner.Bytes())) + 1 // +1 for newline
lineCount++
}
})
}
// GetRandomSentence 随机获取一条古诗词
func GetRandomSentence() string {
initSentences()
if lineCount == 0 {
return "欢迎使用白虎面板"
}
targetLine := rand.Intn(lineCount)
scanner := bufio.NewScanner(bytes.NewReader(sentenceData))
currentLine := 0
for scanner.Scan() {
if currentLine == targetLine {
var s Sentence
if err := json.Unmarshal(scanner.Bytes(), &s); err == nil && s.Name != "" {
return s.Name
}
break
}
currentLine++
}
return "欢迎使用白虎面板"
}