初始化项目

This commit is contained in:
2026-04-27 10:54:32 +08:00
parent 28976d3e7d
commit ba360bc89b
20 changed files with 589 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
package account
import "github.com/gogf/gf/v2/util/gconv"
var (
PlatformXHS = newPlatform(gconv.PtrString("xiaohongshu"), "小红书")
PlatformDY = newPlatform(gconv.PtrString("douyin"), "抖音")
PlatformKS = newPlatform(gconv.PtrString("kuaishou"), "快手")
)
type Platform *string
type platform struct {
code Platform
desc string
}
func (s platform) Code() Platform {
return s.code
}
func (s platform) Desc() string {
return s.desc
}
func newPlatform(code Platform, desc string) platform {
return platform{code: code, desc: desc}
}
func GetDescByCode(code Platform) string {
switch *code {
case *PlatformXHS.Code():
return PlatformXHS.Desc()
case *PlatformDY.Code():
return PlatformDY.Desc()
case *PlatformKS.Code():
return PlatformKS.Desc()
}
return "未知平台"
}

View File

@@ -0,0 +1,26 @@
package account
import "github.com/gogf/gf/v2/util/gconv"
var (
StatusDisable = newStatus(gconv.PtrInt8(0), "disable")
StatusEnable = newStatus(gconv.PtrInt8(1), "enable")
)
type Status *int8
type status struct {
code Status
desc string
}
func (s status) Code() Status {
return s.code
}
func (s status) Desc() string {
return s.desc
}
func newStatus(code Status, desc string) status {
return status{code: code, desc: desc}
}

View File

@@ -0,0 +1,5 @@
package consts
const ReClick = "操作过于频繁,请稍后再试。"
const NoRow = "未找到可用数据。"
const GenerateQrCodeFail = "生成二维码失败。"

View File

@@ -0,0 +1,16 @@
package public
const GmqMsgPluginsName = "gmq_msg"
const (
AccountMsgKey = "account:%s:%s:%s"
AccountDialogHistoryKey = "account:dialog:history:%s"
AccountGreetingOptionsKey = "account:greeting:options:%s"
)
const (
AccountFollowupTopic = "account:followup:stream" // 请求 Stream 键名与发消息的key一致
AccountFollowupConsumer = "account-followup-consumer" // 消费者名称(唯一标识)
AccountFollowupCount = 1 // 批处理大小每次读取1条
AccountFollowupAck = false // ACK是否自动确认true自动确认false不确认
)

View File

@@ -0,0 +1,18 @@
package public
// 欢迎语
const (
GreetingBegin = "您好,很高兴为您服务!请问有什么可以帮您?"
GreetingBetween = "💗回复数字就好~"
GreetingEnd = "🌟也可直接点击下方咨询专业老师~"
)
// 追问
const (
SceneOpeningRemark = "宝子,刚才给您发的信息您有看到吗?有任何问题都能直接问我,加微信也能更方便沟通~"
SceneDialog = "看您暂时没回复,是不是还有什么疑问?加微信我详细给您说明~"
SceneCardSend = "宝子,加上没~要及时加哦,不然卡片容易失效哒✨"
)
// 对话超时时间
const DialogTimeout = 10

View File

@@ -0,0 +1,8 @@
package public
// sql 数据库表名
const (
TableNameAccount = "account"
TableNameAccountUserDialog = "account_user_dialog"
TableNameScriptedSpeech = "scripted_speech"
)

View File

@@ -0,0 +1,4 @@
package consts
const QrCodeCount = "qrCodeCount:order:%s"
const QrCode = "qrCode:order:%s"

View File

@@ -0,0 +1,39 @@
package scriptedSpeech
import "github.com/gogf/gf/v2/util/gconv"
var (
SceneTypeOpeningRemark = newSceneType(gconv.PtrInt8(1), "开场白无回应")
SceneTypeDialog = newSceneType(gconv.PtrInt8(2), "对话中途无回应")
SceneTypeCardSend = newSceneType(gconv.PtrInt8(3), "卡片发送后无回应")
)
type SceneType *int8
type sceneType struct {
code SceneType
desc string
}
func (s sceneType) Code() SceneType {
return s.code
}
func (s sceneType) Desc() string {
return s.desc
}
func newSceneType(code SceneType, desc string) sceneType {
return sceneType{code: code, desc: desc}
}
func GetDescByCode(code SceneType) string {
switch *code {
case *SceneTypeOpeningRemark.Code():
return SceneTypeOpeningRemark.Desc()
case *SceneTypeDialog.Code():
return SceneTypeDialog.Desc()
case *SceneTypeCardSend.Code():
return SceneTypeCardSend.Desc()
}
return "未知场景类型"
}

View File

@@ -0,0 +1,52 @@
package consts
// Age 年龄段类型
type Age string
// 年龄段常量
const (
AgeChild Age = "child" // 儿童
AgeTeenager Age = "teenager" // 青少年
AgeYoung Age = "young" // 青年
AgeMiddle Age = "middle" // 中年
AgeSenior Age = "senior" // 老年
AgeUnlimited Age = "unlimited" // 不限
)
// GetAgeText 获取年龄段文本
func GetAgeText(age string) string {
switch age {
case string(AgeChild):
return "儿童"
case string(AgeTeenager):
return "青少年"
case string(AgeYoung):
return "青年"
case string(AgeMiddle):
return "中年"
case string(AgeSenior):
return "老年"
case string(AgeUnlimited):
return "不限"
default:
return "未知"
}
}
// GetAllAgeKeyValue 获取所有年龄段选项
func GetAllAgeKeyValue() []AgeKeyValue {
return []AgeKeyValue{
{Value: string(AgeChild), Label: "儿童"},
{Value: string(AgeTeenager), Label: "青少年"},
{Value: string(AgeYoung), Label: "青年"},
{Value: string(AgeMiddle), Label: "中年"},
{Value: string(AgeSenior), Label: "老年"},
{Value: string(AgeUnlimited), Label: "不限"},
}
}
// AgeKeyValue 年龄段键值对
type AgeKeyValue struct {
Value string `json:"value"`
Label string `json:"label"`
}

View File

@@ -0,0 +1,40 @@
package consts
// AudioStatus 音频状态类型
type AudioStatus int
// 音频状态常量
const (
AudioStatusGenerating AudioStatus = 0 // 生成中
AudioStatusSuccess AudioStatus = 1 // 成功
AudioStatusFailed AudioStatus = 2 // 失败
)
// GetAudioStatusText 获取音频状态文本
func GetAudioStatusText(status int) string {
switch status {
case int(AudioStatusGenerating):
return "生成中"
case int(AudioStatusSuccess):
return "成功"
case int(AudioStatusFailed):
return "失败"
default:
return "未知"
}
}
// GetAllAudioStatusKeyValue 获取所有音频状态选项
func GetAllAudioStatusKeyValue() []AudioStatusKeyValue {
return []AudioStatusKeyValue{
{Value: int(AudioStatusGenerating), Label: "生成中"},
{Value: int(AudioStatusSuccess), Label: "成功"},
{Value: int(AudioStatusFailed), Label: "失败"},
}
}
// AudioStatusKeyValue 音频状态键值对
type AudioStatusKeyValue struct {
Value int `json:"value"`
Label string `json:"label"`
}

View File

@@ -0,0 +1,8 @@
package consts
// MongoDB集合名称常量
const (
DigitalHumanCollection = "digital_human" // 数字人形象集合
AudioCollection = "audio" // 音频集合
VideoCollection = "video" // 视频集合
)

View File

@@ -0,0 +1,55 @@
package consts
// DigitalHumanStatus 数字人状态类型
type DigitalHumanStatus int
// 数字人状态常量
const (
DigitalHumanStatusInactive DigitalHumanStatus = 0 // 停用
DigitalHumanStatusActive DigitalHumanStatus = 1 // 启用
)
// GetDigitalHumanStatusText 获取数字人状态文本
func GetDigitalHumanStatusText(status int) string {
switch status {
case int(DigitalHumanStatusInactive):
return "停用"
case int(DigitalHumanStatusActive):
return "启用"
default:
return "未知"
}
}
// GetAllDigitalHumanStatusKeyValue 获取所有数字人状态选项
func GetAllDigitalHumanStatusKeyValue() []DigitalHumanStatusKeyValue {
return []DigitalHumanStatusKeyValue{
{Value: int(DigitalHumanStatusInactive), Label: "停用"},
{Value: int(DigitalHumanStatusActive), Label: "启用"},
}
}
// DigitalHumanStatusKeyValue 数字人状态键值对
type DigitalHumanStatusKeyValue struct {
Value int `json:"value"`
Label string `json:"label"`
}
// GetStatusText 获取状态文本(向后兼容)
func GetStatusText(status int) string {
return GetDigitalHumanStatusText(status)
}
// GetAllStatusKeyValue 获取所有状态选项(向后兼容)
func GetAllStatusKeyValue() []StatusKeyValue {
return []StatusKeyValue{
{Value: int(DigitalHumanStatusInactive), Label: "停用"},
{Value: int(DigitalHumanStatusActive), Label: "启用"},
}
}
// StatusKeyValue 状态键值对(向后兼容)
type StatusKeyValue struct {
Value int `json:"value"`
Label string `json:"label"`
}

View File

@@ -0,0 +1,40 @@
package consts
// Gender 性别类型
type Gender string
// 性别常量
const (
GenderMale Gender = "male" // 男
GenderFemale Gender = "female" // 女
GenderOther Gender = "other" // 其他
)
// GetGenderText 获取性别文本
func GetGenderText(gender string) string {
switch gender {
case string(GenderMale):
return "男"
case string(GenderFemale):
return "女"
case string(GenderOther):
return "其他"
default:
return "未知"
}
}
// GetAllGenderKeyValue 获取所有性别选项
func GetAllGenderKeyValue() []GenderKeyValue {
return []GenderKeyValue{
{Value: string(GenderMale), Label: "男"},
{Value: string(GenderFemale), Label: "女"},
{Value: string(GenderOther), Label: "其他"},
}
}
// GenderKeyValue 性别键值对
type GenderKeyValue struct {
Value string `json:"value"`
Label string `json:"label"`
}

View File

@@ -0,0 +1,8 @@
package public
const (
TableNameAudio = "digital_human_audio"
TableNameCustomVoice = "digital_human_custom_voice"
TableNameVideo = "digital_human_video"
TableNameDigitalHuman = "digital_human"
)

View File

@@ -0,0 +1,51 @@
package consts
// Resolution 视频分辨率
type Resolution string
const (
Resolution480P Resolution = "480p" // 标清
Resolution720P Resolution = "720p" // 高清
Resolution1080P Resolution = "1080p" // 全高清
Resolution2K Resolution = "2k" // 2K超清
Resolution4K Resolution = "4k" // 4K超高清
Resolution8K Resolution = "8k" // 8K超高清
)
// Text 获取分辨率文本描述
func (r Resolution) Text() string {
switch r {
case Resolution480P:
return "标清 (480p)"
case Resolution720P:
return "高清 (720p)"
case Resolution1080P:
return "全高清 (1080p)"
case Resolution2K:
return "2K超清 (1440p)"
case Resolution4K:
return "4K超高清 (2160p)"
case Resolution8K:
return "8K超高清 (4320p)"
default:
return string(r)
}
}
// ResolutionKeyValue 分辨率键值对(用于前端选项)
type ResolutionKeyValue struct {
Key string `json:"key"`
Value string `json:"value"`
}
// GetResolutionOptions 获取所有分辨率选项
func GetResolutionOptions() []ResolutionKeyValue {
return []ResolutionKeyValue{
{Key: string(Resolution480P), Value: Resolution480P.Text()},
{Key: string(Resolution720P), Value: Resolution720P.Text()},
{Key: string(Resolution1080P), Value: Resolution1080P.Text()},
{Key: string(Resolution2K), Value: Resolution2K.Text()},
{Key: string(Resolution4K), Value: Resolution4K.Text()},
{Key: string(Resolution8K), Value: Resolution8K.Text()},
}
}

View File

@@ -0,0 +1,60 @@
package consts
// Style 风格类型
type Style string
// 风格常量
const (
StyleBusiness Style = "business" // 商务
StyleCasual Style = "casual" // 休闲
StyleFormal Style = "formal" // 正式
StyleCreative Style = "creative" // 创意
StyleElegant Style = "elegant" // 优雅
StyleFriendly Style = "friendly" // 友好
StyleProfessional Style = "professional" // 专业
StyleUnlimited Style = "unlimited" // 不限
)
// GetStyleText 获取风格文本
func GetStyleText(style string) string {
switch style {
case string(StyleBusiness):
return "商务"
case string(StyleCasual):
return "休闲"
case string(StyleFormal):
return "正式"
case string(StyleCreative):
return "创意"
case string(StyleElegant):
return "优雅"
case string(StyleFriendly):
return "友好"
case string(StyleProfessional):
return "专业"
case string(StyleUnlimited):
return "不限"
default:
return "未知"
}
}
// GetAllStyleKeyValue 获取所有风格选项
func GetAllStyleKeyValue() []StyleKeyValue {
return []StyleKeyValue{
{Value: string(StyleBusiness), Label: "商务"},
{Value: string(StyleCasual), Label: "休闲"},
{Value: string(StyleFormal), Label: "正式"},
{Value: string(StyleCreative), Label: "创意"},
{Value: string(StyleElegant), Label: "优雅"},
{Value: string(StyleFriendly), Label: "友好"},
{Value: string(StyleProfessional), Label: "专业"},
{Value: string(StyleUnlimited), Label: "不限"},
}
}
// StyleKeyValue 风格键值对
type StyleKeyValue struct {
Value string `json:"value"`
Label string `json:"label"`
}

View File

@@ -0,0 +1,40 @@
package consts
// VideoStatus 视频状态类型
type VideoStatus int
// 视频生成状态常量
const (
VideoStatusGenerating VideoStatus = 0 // 生成中
VideoStatusSuccess VideoStatus = 1 // 成功
VideoStatusFailed VideoStatus = 2 // 失败
)
// GetVideoStatusText 获取视频状态文本
func GetVideoStatusText(status int) string {
switch status {
case int(VideoStatusGenerating):
return "生成中"
case int(VideoStatusSuccess):
return "成功"
case int(VideoStatusFailed):
return "失败"
default:
return "未知"
}
}
// GetAllVideoStatusKeyValue 获取所有视频状态选项
func GetAllVideoStatusKeyValue() []VideoStatusKeyValue {
return []VideoStatusKeyValue{
{Value: int(VideoStatusGenerating), Label: "生成中"},
{Value: int(VideoStatusSuccess), Label: "成功"},
{Value: int(VideoStatusFailed), Label: "失败"},
}
}
// VideoStatusKeyValue 视频状态键值对
type VideoStatusKeyValue struct {
Value int `json:"value"`
Label string `json:"label"`
}

10
go.mod Normal file
View File

@@ -0,0 +1,10 @@
module ai-agent
go 1.25.0
require github.com/gogf/gf/v2 v2.10.0
require (
go.opentelemetry.io/otel v1.38.0 // indirect
go.opentelemetry.io/otel/trace v1.38.0 // indirect
)

64
go.sum Normal file
View File

@@ -0,0 +1,64 @@
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU=
github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/gogf/gf/v2 v2.10.0 h1:rzDROlyqGMe/eM6dCalSR8dZOuMIdLhmxKSH1DGhbFs=
github.com/gogf/gf/v2 v2.10.0/go.mod h1:Svl1N+E8G/QshU2DUbh/3J/AJauqCgUnxHurXWR4Qx0=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM=
github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI=
github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g=
github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY=
github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -0,0 +1,6 @@
package consts
// 数据库表名
const (
TableNameCreationInfo = "creation_info"
)