Compare commits

..

2 Commits

@ -1,30 +1 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo

@ -1,40 +1,8 @@
{ {
"hash": "60808396", "hash": "f2cd6171",
"configHash": "59b8cfd4", "configHash": "c345b98b",
"lockfileHash": "dc70f975", "lockfileHash": "e3b0c442",
"browserHash": "f37eb18a", "browserHash": "f7fdce36",
"optimized": { "optimized": {},
"vue": { "chunks": {}
"src": "../../node_modules/.pnpm/vue@3.5.11/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "b734d491",
"needsInterop": false
},
"pinia": {
"src": "../../node_modules/.pnpm/pinia@2.2.4_vue@3.5.11/node_modules/pinia/dist/pinia.mjs",
"file": "pinia.js",
"fileHash": "9cec28a2",
"needsInterop": false
},
"pinia-plugin-persistedstate": {
"src": "../../node_modules/.pnpm/pinia-plugin-persistedstate@4.1.1_pinia@2.2.4_vue@3.5.11__rollup@4.24.0/node_modules/pinia-plugin-persistedstate/dist/index.js",
"file": "pinia-plugin-persistedstate.js",
"fileHash": "e1a46a27",
"needsInterop": false
},
"vue-router": {
"src": "../../node_modules/.pnpm/vue-router@4.4.5_vue@3.5.11/node_modules/vue-router/dist/vue-router.mjs",
"file": "vue-router.js",
"fileHash": "97ce4aa0",
"needsInterop": false
}
},
"chunks": {
"chunk-BPR5FKHA": {
"file": "chunk-BPR5FKHA.js"
},
"chunk-UGVUZKZS": {
"file": "chunk-UGVUZKZS.js"
}
}
} }

@ -0,0 +1,7 @@
{
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}

@ -0,0 +1,26 @@
app:
name: "test"
mode: "dev"
port: 8080
start_time: "2024-10-01"
machine_id: 1
test: true
logger:
level: "debug"
name: "logger.log"
max_sizes: 200
max_age: 30
max_backups: 7
mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "123456qaz"
dbname: "test"
max_idle_conns: 50
max_open_conns: 200

@ -0,0 +1,23 @@
package controllers
import (
"main/logic"
"main/models"
"main/utils"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
func WriteIntoExcelHandler(c *gin.Context) {
s := new(models.SaveInfo)
savePath, err := logic.WriteIntoExcelLogic()
if err != nil {
zap.L().Error("Write info error", zap.Error(err))
utils.ResponseError(c, utils.CodeWriteInfoError)
return
}
s.SavePath = savePath
s.Msg = "信息保存成功"
utils.ResponseSuccess(c, s)
}

@ -0,0 +1,24 @@
package controllers
import (
"main/logic"
"main/utils"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
func ImportStudentInfoHandler(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
zap.L().Error("upload file failed", zap.Error(err))
utils.ResponseError(c, utils.CodeUpLoadError)
return
}
if err = logic.ImportStudentInfoLogic(file); err != nil {
zap.L().Error("import file failed", zap.Error(err))
utils.ResponseError(c, utils.CodeUpLoadError)
return
}
utils.ResponseSuccess(c, nil)
}

@ -0,0 +1,134 @@
package controllers
import (
"errors"
"main/logic"
"main/models"
"main/pkg/vt"
"main/utils"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"go.uber.org/zap"
)
func GetAllStudentInfoHandler(c *gin.Context) {
info, err := logic.GetAllStudentInfoLogic()
if err != nil {
zap.L().Error("Get all student info error", zap.Error(err))
if err == utils.ErrorStuInfoEmpty {
utils.ResponseError(c, utils.CodeStudentInfoEmpty)
return
}
utils.ResponseError(c, utils.CodeServerBusy)
return
}
utils.ResponseSuccess(c, info)
}
func GetOneRandomStudentInfoHandler(c *gin.Context) {
info, err := logic.GetOneRandomStudentInfoLogic()
if err != nil {
zap.L().Error("Get student info error", zap.Error(err))
if err == utils.ErrorStuInfoEmpty {
utils.ResponseError(c, utils.CodeStudentInfoEmpty)
return
}
utils.ResponseError(c, utils.CodeServerBusy)
return
}
utils.ResponseSuccess(c, info)
}
func GetOneStudentInfoAccordScoreHandler(c *gin.Context) {
info, err := logic.GetOneStudentInfoAccordScoreLogic()
if err != nil {
zap.L().Error("Get one student info error", zap.Error(err))
if err == utils.ErrorStuInfoEmpty {
utils.ResponseError(c, utils.CodeStudentInfoEmpty)
return
}
utils.ResponseError(c, utils.CodeServerBusy)
return
}
utils.ResponseSuccess(c, info)
}
func GetNStudentInfoAccordScoreHandler(c *gin.Context) {
p := new(models.ParamNum)
if err := c.ShouldBindJSON(p); err != nil {
zap.L().Error("Get N student info with invalid param", zap.Error(err))
errs, ok := err.(validator.ValidationErrors)
if !ok {
utils.ResponseError(c, utils.CodeInvalidParam)
return
}
utils.ResponseErrorWithMsg(c, utils.CodeInvalidParam, vt.RemoveTopStruct(errs.Translate(vt.Trans)))
return
}
info, err := logic.GetNStudentInfoAccordScoreLogic(p)
if err != nil {
zap.L().Error("Get n student info error", zap.Error(err))
if err == utils.ErrorStuInfoEmpty {
utils.ResponseError(c, utils.CodeStudentInfoEmpty)
return
}
if err == utils.ErrorBeyondNum {
utils.ResponseError(c, utils.CodeTooMuchNum)
return
}
utils.ResponseError(c, utils.CodeServerBusy)
return
}
utils.ResponseSuccess(c, info)
}
func GetTargetStudentInfoHandler(c *gin.Context) {
p := new(models.ParamUser)
if err := c.ShouldBindJSON(p); err != nil {
zap.L().Error("Get Target student info with invalid param", zap.Error(err))
errs, ok := err.(validator.ValidationErrors)
if !ok {
utils.ResponseError(c, utils.CodeInvalidParam)
return
}
utils.ResponseErrorWithMsg(c, utils.CodeInvalidParam, vt.RemoveTopStruct(errs.Translate(vt.Trans)))
return
}
back, err := logic.GetTargetStudentInfoLogic(p)
if err != nil {
zap.L().Error("Get Target failed", zap.Error(err))
if errors.Is(err, utils.ErrorInvalidStuId) {
utils.ResponseError(c, utils.CodeInvalidParam)
return
}
utils.ResponseError(c, utils.CodeServerBusy)
return
}
utils.ResponseSuccess(c, back)
}
func ChangeStuScoreHandler(c *gin.Context) {
p := new(models.ParamUser)
if err := c.ShouldBindJSON(p); err != nil {
zap.L().Error("Change student score with invalid param", zap.Error(err))
errs, ok := err.(validator.ValidationErrors)
if !ok {
utils.ResponseError(c, utils.CodeInvalidParam)
return
}
utils.ResponseErrorWithMsg(c, utils.CodeInvalidParam, vt.RemoveTopStruct(errs.Translate(vt.Trans)))
return
}
back, err := logic.ChangeStuScoreLogic(p)
if err != nil {
zap.L().Error("Change score failed", zap.Error(err))
if errors.Is(err, utils.ErrorInvalidStuId) {
utils.ResponseError(c, utils.CodeInvalidParam)
return
}
utils.ResponseError(c, utils.CodeServerBusy)
return
}
utils.ResponseSuccess(c, back)
}

@ -0,0 +1,30 @@
package controllers
// import (
// "fmt"
// "os"
// "os/signal"
// "runtime/pprof"
// "syscall"
// )
// func isTrace(bool) {
// f, err := os.Create("cpu.prof")
// if err != nil {
// fmt.Printf("could not create CPU profile: %v\n", err)
// return
// }
// defer f.Close()
// if err := pprof.StartCPUProfile(f); err != nil {
// fmt.Printf("could not start CPU profile: %v\n", err)
// return
// }
// // 设置信号处理
// c := make(chan os.Signal, 1)
// signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
// defer func() {
// pprof.StopCPUProfile()
// fmt.Println("CPU profiling stopped and file closed.")
// }()
// }

@ -0,0 +1,21 @@
package mysql
import (
"main/models"
)
func ImportStudentInfoIntoSql(s []models.User) (err error) {
for _, user := range s {
user_id := user.User_id
user_name := user.User_name
user_gender := user.User_gender
user_score := user.User_score
// 插入数据到数据库,如果数据冲突则替换
_, err := db.Exec("REPLACE INTO user (user_id, user_name, user_gender, user_score) VALUES (?, ?, ?, ?)", user_id, user_name, user_gender, user_score)
if err != nil {
return err
}
}
return
}

@ -0,0 +1,13 @@
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`user_name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`user_gender` tinyint(4) NOT NULL DEFAULT '0',
`user_score` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

@ -0,0 +1,100 @@
package mysql
import (
"fmt"
"os"
"strings"
"github.com/jmoiron/sqlx"
"github.com/spf13/viper"
"go.uber.org/zap"
_ "github.com/go-sql-driver/mysql"
)
var sqlFile = "dao/mysql/init.sql"
var db *sqlx.DB
func Init() (err error) {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/",
viper.GetString("mysql.user"),
viper.GetString("mysql.password"),
viper.GetString("mysql.host"),
viper.GetInt("mysql.port"),
)
db, err = sqlx.Connect("mysql", dsn)
if err != nil {
zap.L().Error("connect DB failed", zap.Error(err))
return err
}
dbName := viper.GetString("mysql.dbname")
err = createDatabaseIfNotExists(db, dbName)
if err != nil {
zap.L().Error("connect Database failed", zap.Error(err))
return err
}
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s",
viper.GetString("mysql.user"),
viper.GetString("mysql.password"),
viper.GetString("mysql.host"),
viper.GetInt("mysql.port"),
viper.GetString("mysql.dbname"),
)
db, err = sqlx.Connect("mysql", dsn)
if err != nil {
zap.L().Error("connect DB failed", zap.Error(err))
return err
}
err = importTableIfNotExists()
if err != nil {
zap.L().Error("import Sql failed", zap.Error(err))
return err
}
// 最大闲置连接
db.SetMaxIdleConns(viper.GetInt("max_idle_conns"))
// 最大连接
db.SetMaxOpenConns(viper.GetInt("max_open_conns"))
return
}
func createDatabaseIfNotExists(db *sqlx.DB, dbName string) error {
_, err := db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", dbName))
return err
}
func importTableIfNotExists() error {
return importSQL(db, sqlFile)
}
func importSQL(db *sqlx.DB, filePath string) error {
sqlBytes, err := os.ReadFile(filePath)
if err != nil {
return err
}
sqlStatements := string(sqlBytes)
statements := strings.Split(sqlStatements, ";")
for _, statement := range statements {
if strings.TrimSpace(statement) != "" {
_, err = db.Exec(statement)
if err != nil {
return err
}
}
}
return err
}
func GetDb() *sqlx.DB {
return db
}
func ChangeDb(anotherDb *sqlx.DB) {
db = anotherDb
}
func Close() {
_ = db.Close()
}

@ -0,0 +1,66 @@
package mysql
import (
"database/sql"
"main/models"
"main/utils"
)
func GetAllStudentInfo() (back *[]models.User, err error) {
sqlStr := `select
user_id, user_name, user_gender, user_score
from user
ORDER BY user_score ASC`
back = new([]models.User)
if err = db.Select(back, sqlStr); err != nil {
if err == sql.ErrNoRows {
err = utils.ErrorStuInfoEmpty
return
}
return
}
return
}
func GetOneRandomStudentInfo() (back *models.User, err error) {
sqlStr := `select
user_id, user_name, user_gender, user_score
from user
ORDER BY RAND() LIMIT 1`
back = new(models.User)
if err = db.Get(back, sqlStr); err != nil {
if err == sql.ErrNoRows {
err = utils.ErrorStuInfoEmpty
return
}
return
}
return
}
func GetTargetStudentInfo(user_id int64) (back *models.User, err error) {
sqlStr := `select
user_id, user_name, user_gender, user_score
from user
where user_id = ?`
back = new(models.User)
if err = db.Get(back, sqlStr, user_id); err != nil {
if err == sql.ErrNoRows {
err = utils.ErrorStuInfoEmpty
return
}
return
}
return
}
func ChangeStuScore(user *models.UserScore) (err error) {
sqlStr := `update user set
user_score = ?
where user_id=?`
r, err := db.Exec(sqlStr, user.User_score, user.User_id)
if n, err := r.RowsAffected(); err != nil || n == 0 {
return utils.ErrorInvalidStuId
}
return
}

@ -0,0 +1,3 @@
package redis
// 暂时不用

@ -0,0 +1,58 @@
module main
go 1.19
require (
github.com/DATA-DOG/go-sqlmock v1.5.2 // indirect
github.com/bwmarrin/snowflake v0.3.0 // indirect
github.com/bytedance/sonic v1.8.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.9.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.11.2 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/goccy/go-json v0.10.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/jmoiron/sqlx v1.3.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/richardlehane/mscfb v1.0.4 // indirect
github.com/richardlehane/msoleps v1.0.3 // indirect
github.com/spf13/afero v1.9.3 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.15.0 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.9 // indirect
github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 // indirect
github.com/xuri/excelize/v2 v2.8.1 // indirect
github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect
go.uber.org/zap v1.24.0 // indirect
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/crypto v0.19.0 // indirect
golang.org/x/net v0.21.0 // indirect
golang.org/x/sys v0.17.0 // indirect
golang.org/x/text v0.14.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

@ -0,0 +1,566 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=
github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8=
github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=
github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE=
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU=
github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 h1:Chd9DkqERQQuHpXjR/HSV1jLZA6uaoiwwH3vSuF3IW0=
github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ=
github.com/xuri/excelize/v2 v2.8.1/go.mod h1:oli1E4C3Pa5RXg1TBXn4ENCXDV5JUMlBluUhG7c+CEE=
github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 h1:qhbILQo1K3mphbwKh1vNm4oGezE1eF9fQWmNiIpSfI4=
github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

@ -0,0 +1,718 @@
2024-10-08T22:44:49.601+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-08T22:44:49.623+0800 ERROR mysql/mysql.go:57 import Sql failed {"error": "Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE test;\r\n\r\nCREATE TABLE IF NOT EXISTS `user`(\r\n `id` bigint(20) NOT NULL AU' at line 3"}
2024-10-08T22:47:22.668+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-08T22:47:22.679+0800 ERROR mysql/mysql.go:57 import Sql failed {"error": "Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE test;\r\n\r\nCREATE TABLE IF NOT EXISTS `user` (\r\n `id` bigint(20) NOT NULL A' at line 3"}
2024-10-08T22:50:18.339+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-08T22:50:18.350+0800 ERROR mysql/mysql.go:58 import Sql failed {"error": "Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE test;\r\n\r\nCREATE TABLE IF NOT EXISTS `user` (\r\n `id` bigint(20) NOT NULL A' at line 3"}
2024-10-08T22:51:36.943+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-08T22:53:25.958+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-08T22:53:41.104+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-08T22:53:41.710+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-08T22:53:42.319+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-08T22:53:42.506+0800 INFO logger/logger.go:84 / {"status": 200, "method": "GET", "path": "/", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0.000997}
2024-10-08T22:53:42.547+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-08T22:53:55.665+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-08T22:53:55.666+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-09T10:23:57.240+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-09T10:24:28.717+0800 ERROR controllers/import.go:14 upload file failed {"error": "request Content-Type isn't multipart/form-data"}
2024-10-09T10:24:28.717+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0}
2024-10-09T10:30:05.107+0800 ERROR controllers/import.go:14 upload file failed {"error": "request Content-Type isn't multipart/form-data"}
2024-10-09T10:30:05.108+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008048}
2024-10-09T10:32:35.430+0800 ERROR controllers/import.go:14 upload file failed {"error": "http: no such file"}
2024-10-09T10:32:35.430+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0001715}
2024-10-09T10:35:11.672+0800 ERROR controllers/import.go:14 upload file failed {"error": "http: no such file"}
2024-10-09T10:35:11.672+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0001696}
2024-10-09T10:36:59.975+0800 ERROR controllers/import.go:14 upload file failed {"error": "http: no such file"}
2024-10-09T10:36:59.975+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0004826}
2024-10-09T10:37:26.907+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0042041}
2024-10-09T10:40:45.019+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-09T10:40:45.019+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-09T10:40:56.240+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-09T10:41:02.311+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0030574}
2024-10-09T10:46:49.266+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0031871}
2024-10-09T10:47:12.691+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-09T10:47:12.692+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-09T10:48:18.945+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-09T10:48:18.954+0800 ERROR mysql/mysql.go:28 connect DB failed {"error": "Error 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)"}
2024-10-09T10:48:25.753+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-09T10:48:35.468+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0312476}
2024-10-09T10:49:00.863+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-09T10:49:00.864+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T11:19:29.780+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T11:19:52.803+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013431}
2024-10-10T11:19:58.739+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016332}
2024-10-10T11:19:59.638+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0025188}
2024-10-10T11:20:00.748+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.000904}
2024-10-10T11:20:01.662+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020679}
2024-10-10T11:24:38.254+0800 INFO logger/logger.go:84 /change-score {"status": 404, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0}
2024-10-10T11:24:49.335+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T11:24:49.335+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T11:25:24.874+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T11:25:30.921+0800 ERROR controllers/roll.go:32 Change student score with invalid param {"error": "json: cannot unmarshal string into Go struct field ParamUser.user_id of type int64"}
2024-10-10T11:25:30.921+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0}
2024-10-10T11:26:58.507+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0091657}
2024-10-10T11:28:46.133+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0094495}
2024-10-10T11:29:01.256+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017139}
2024-10-10T11:29:03.056+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0023042}
2024-10-10T11:29:03.842+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001872}
2024-10-10T11:29:04.501+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011261}
2024-10-10T11:29:05.187+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012705}
2024-10-10T11:32:28.653+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T11:32:28.653+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T11:32:38.696+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T11:32:46.064+0800 ERROR controllers/roll.go:43 Change score failed {"error": "学生学号错误"}
2024-10-10T11:32:46.065+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010372}
2024-10-10T11:33:25.288+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008169}
2024-10-10T11:33:26.249+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017864}
2024-10-10T11:33:26.906+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014298}
2024-10-10T11:33:27.547+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010218}
2024-10-10T11:33:49.155+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0086731}
2024-10-10T11:59:03.578+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T11:59:03.578+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T11:59:11.473+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T11:59:46.943+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010844}
2024-10-10T11:59:51.778+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010864}
2024-10-10T11:59:52.450+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0006525}
2024-10-10T11:59:53.201+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013134}
2024-10-10T11:59:53.832+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001509}
2024-10-10T11:59:54.616+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007929}
2024-10-10T11:59:55.272+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016778}
2024-10-10T11:59:55.878+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020307}
2024-10-10T11:59:56.604+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017869}
2024-10-10T11:59:57.251+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013072}
2024-10-10T11:59:57.840+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009873}
2024-10-10T11:59:58.484+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015749}
2024-10-10T11:59:59.098+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014681}
2024-10-10T11:59:59.658+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015421}
2024-10-10T12:00:00.316+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016601}
2024-10-10T12:00:00.864+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013168}
2024-10-10T12:00:01.439+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007906}
2024-10-10T12:01:02.285+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T12:01:02.285+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T17:17:02.165+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T17:17:49.842+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0046563}
2024-10-10T17:19:48.905+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0114776}
2024-10-10T17:21:26.076+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T17:21:26.082+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T17:21:56.807+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T17:22:03.710+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0051938}
2024-10-10T17:23:17.017+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T17:23:17.018+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T18:28:52.257+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T18:29:50.043+0800 ERROR controllers/roll.go:57 Get Target failed {"error": "expected slice but got struct"}
2024-10-10T18:29:50.043+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016962}
2024-10-10T18:32:35.675+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T18:32:35.675+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T18:32:48.666+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T18:32:53.255+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015498}
2024-10-10T18:37:49.284+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T18:37:49.285+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-10T18:37:58.019+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-10T18:38:17.370+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011501}
2024-10-10T18:38:59.734+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-10T18:38:59.734+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T13:32:09.142+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-11T13:33:09.933+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017475}
2024-10-11T13:33:28.713+0800 ERROR controllers/roll.go:71 Get n student info error {"error": "请求数量过多"}
2024-10-11T13:33:28.713+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009153}
2024-10-11T13:35:07.424+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T13:35:07.424+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T13:35:21.213+0800 DEBUG 结对编程/main.go:29 init ogger success...
2024-10-11T13:35:26.315+0800 ERROR controllers/roll.go:71 Get n student info error {"error": "请求数量过多"}
2024-10-11T13:35:26.315+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013718}
2024-10-11T13:35:31.214+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0022542}
2024-10-11T13:35:40.915+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011042}
2024-10-11T13:35:52.389+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013604}
2024-10-11T13:35:55.019+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0022469}
2024-10-11T13:35:55.762+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019498}
2024-10-11T13:35:56.578+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010667}
2024-10-11T13:35:57.284+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019722}
2024-10-11T13:35:58.167+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016329}
2024-10-11T13:36:09.132+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T13:36:09.132+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T16:07:38.181+0800 DEBUG 结对编程/main.go:34 init ogger success...
2024-10-11T16:07:46.451+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012872}
2024-10-11T16:07:52.025+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0006048}
2024-10-11T16:07:52.740+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010441}
2024-10-11T16:08:04.430+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0093744}
2024-10-11T16:08:09.162+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014422}
2024-10-11T16:08:11.863+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018793}
2024-10-11T16:08:17.316+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020434}
2024-10-11T16:08:27.027+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0391327}
2024-10-11T16:08:30.164+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015989}
2024-10-11T16:08:42.022+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.083+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.085+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.094+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.102+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.110+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.119+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.126+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.137+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.143+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.151+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.161+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.169+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.177+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.185+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.193+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.202+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.211+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.218+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.228+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.235+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.243+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.253+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.260+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.268+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.277+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.286+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.294+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.302+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.310+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.319+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.327+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0.0009948}
2024-10-11T16:08:42.335+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.343+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.353+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.360+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.369+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.377+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.385+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.394+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.404+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.411+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.418+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.427+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.438+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.443+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.455+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.460+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.469+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.477+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.486+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.493+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.503+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.510+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.518+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.527+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.544+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.552+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.559+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.569+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.576+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.585+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.594+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.602+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.610+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.620+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.628+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.635+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.643+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.652+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.660+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.669+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.677+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.685+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.699+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.710+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.719+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.727+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:42.791+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:43.403+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:44.010+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:44.619+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:45.226+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:08:45.827+0800 INFO logger/logger.go:84 /favicon.ico {"status": 404, "method": "GET", "path": "/favicon.ico", "query": "", "ip": "::1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36", "errors": "", "cost": 0}
2024-10-11T16:10:21.376+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T16:10:21.376+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T16:10:32.504+0800 DEBUG 结对编程/main.go:35 init ogger success...
2024-10-11T16:10:39.989+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001202}
2024-10-11T16:10:42.119+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018549}
2024-10-11T16:10:49.971+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0097045}
2024-10-11T16:10:51.768+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020504}
2024-10-11T16:10:55.003+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014074}
2024-10-11T16:11:01.897+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0055846}
2024-10-11T16:11:07.546+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016413}
2024-10-11T16:28:54.295+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0025567}
2024-10-11T16:28:55.535+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015653}
2024-10-11T16:28:58.155+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017033}
2024-10-11T16:29:01.760+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T16:29:01.760+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0023241}
2024-10-11T16:29:04.662+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.006825}
2024-10-11T16:29:06.967+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015315}
2024-10-11T16:29:09.561+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021642}
2024-10-11T16:29:12.459+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014731}
2024-10-11T16:29:16.284+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018699}
2024-10-11T16:35:46.398+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T16:35:46.398+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T16:39:35.620+0800 DEBUG 结对编程/main.go:35 init ogger success...
2024-10-11T16:39:45.794+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010425}
2024-10-11T16:39:48.374+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016884}
2024-10-11T16:39:50.778+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015371}
2024-10-11T16:39:58.206+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015556}
2024-10-11T16:40:00.396+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018612}
2024-10-11T16:40:08.869+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012808}
2024-10-11T16:40:11.402+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0030717}
2024-10-11T16:40:13.469+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014858}
2024-10-11T16:40:16.237+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014226}
2024-10-11T16:40:19.639+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018112}
2024-10-11T16:40:22.691+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001708}
2024-10-11T16:40:25.297+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002014}
2024-10-11T16:40:27.024+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T16:40:27.024+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.003331}
2024-10-11T16:40:31.491+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0093071}
2024-10-11T16:40:34.745+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017774}
2024-10-11T16:40:37.486+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019754}
2024-10-11T16:40:38.101+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018645}
2024-10-11T16:40:38.787+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008922}
2024-10-11T16:40:39.690+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008833}
2024-10-11T16:40:40.671+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018242}
2024-10-11T16:40:41.468+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017603}
2024-10-11T16:40:42.332+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015358}
2024-10-11T16:40:43.051+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017377}
2024-10-11T16:40:43.785+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013435}
2024-10-11T16:40:44.552+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007564}
2024-10-11T16:40:46.427+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014944}
2024-10-11T16:42:07.680+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018391}
2024-10-11T16:42:08.633+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0023895}
2024-10-11T16:42:10.247+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021288}
2024-10-11T16:42:10.973+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015595}
2024-10-11T16:42:11.573+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010971}
2024-10-11T16:42:12.216+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017665}
2024-10-11T16:42:12.740+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011857}
2024-10-11T16:42:14.491+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T16:42:14.492+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017058}
2024-10-11T16:42:18.299+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0084018}
2024-10-11T16:42:20.310+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019233}
2024-10-11T16:42:23.381+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013245}
2024-10-11T16:42:25.238+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020435}
2024-10-11T16:42:31.186+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017039}
2024-10-11T16:42:35.484+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013763}
2024-10-11T16:42:37.841+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001399}
2024-10-11T16:42:39.619+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019627}
2024-10-11T16:42:41.897+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019777}
2024-10-11T16:42:46.130+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017051}
2024-10-11T16:42:48.286+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019646}
2024-10-11T16:49:53.288+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T16:49:53.345+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T16:52:11.927+0800 DEBUG 结对编程/main.go:33 init ogger success...
2024-10-11T16:52:32.363+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012955}
2024-10-11T16:52:34.498+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009858}
2024-10-11T16:52:35.797+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009661}
2024-10-11T16:52:39.346+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0101139}
2024-10-11T16:52:42.060+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015155}
2024-10-11T16:52:43.744+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019501}
2024-10-11T16:52:49.102+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0344849}
2024-10-11T16:52:52.761+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.004692}
2024-10-11T16:53:18.687+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T16:53:18.687+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T16:55:06.137+0800 DEBUG 结对编程/main.go:33 init ogger success...
2024-10-11T16:55:13.767+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.003834}
2024-10-11T16:55:15.381+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.000807}
2024-10-11T16:55:16.735+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014166}
2024-10-11T16:55:18.055+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0308542}
2024-10-11T16:55:19.261+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T16:55:19.261+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.00188}
2024-10-11T16:55:20.633+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016368}
2024-10-11T16:55:21.929+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014461}
2024-10-11T16:55:23.192+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0025728}
2024-10-11T16:55:26.346+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0101264}
2024-10-11T16:55:32.272+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T16:55:32.272+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T17:02:59.649+0800 DEBUG 结对编程/main.go:35 init ogger success...
2024-10-11T17:03:17.376+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:03:17.376+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011837}
2024-10-11T17:03:20.725+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0089777}
2024-10-11T17:03:22.616+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010847}
2024-10-11T17:03:23.947+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016485}
2024-10-11T17:03:25.271+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018828}
2024-10-11T17:03:26.950+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010504}
2024-10-11T17:03:28.101+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018476}
2024-10-11T17:03:29.420+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0059005}
2024-10-11T17:03:30.983+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0327325}
2024-10-11T17:03:39.721+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T17:03:39.721+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T17:05:51.721+0800 DEBUG 结对编程/main.go:36 init ogger success...
2024-10-11T17:05:58.144+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0297588}
2024-10-11T17:05:59.571+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001167}
2024-10-11T17:06:00.975+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015401}
2024-10-11T17:06:02.582+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0028184}
2024-10-11T17:06:03.887+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:06:03.887+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019776}
2024-10-11T17:06:05.249+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017376}
2024-10-11T17:06:06.809+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013159}
2024-10-11T17:06:08.269+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011524}
2024-10-11T17:06:16.802+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T17:06:16.802+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T17:06:53.364+0800 DEBUG 结对编程/main.go:36 init ogger success...
2024-10-11T17:07:00.403+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011623}
2024-10-11T17:07:01.292+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014497}
2024-10-11T17:07:02.230+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021806}
2024-10-11T17:07:03.070+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021893}
2024-10-11T17:07:05.311+0800 INFO gfsd/gfsd.go:37 Shutdown Server ...
2024-10-11T17:07:05.311+0800 INFO gfsd/gfsd.go:46 Server exiting
2024-10-11T17:09:43.890+0800 DEBUG 结对编程/main.go:30 init ogger success...
2024-10-11T17:09:53.423+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018218}
2024-10-11T17:09:56.807+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014112}
2024-10-11T17:09:57.415+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015117}
2024-10-11T17:10:28.278+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016254}
2024-10-11T17:10:28.842+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016758}
2024-10-11T17:10:30.701+0800 INFO gfsd/gfsd.go:39 Shutdown Server ...
2024-10-11T17:10:46.088+0800 DEBUG 结对编程/main.go:30 init ogger success...
2024-10-11T17:10:50.439+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013162}
2024-10-11T17:10:50.990+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015412}
2024-10-11T17:10:51.612+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018411}
2024-10-11T17:10:52.240+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020681}
2024-10-11T17:10:52.773+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0006473}
2024-10-11T17:10:55.169+0800 INFO gfsd/gfsd.go:39 Shutdown Server ...
2024-10-11T17:10:55.169+0800 INFO gfsd/gfsd.go:48 Server exiting
2024-10-11T17:14:22.287+0800 DEBUG 结对编程/main.go:30 init ogger success...
2024-10-11T17:14:43.319+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2137608}
2024-10-11T17:15:36.701+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2218704}
2024-10-11T17:15:39.048+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2187577}
2024-10-11T17:15:39.875+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2201255}
2024-10-11T17:15:40.778+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2188191}
2024-10-11T17:15:41.637+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2185165}
2024-10-11T17:15:51.201+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2172494}
2024-10-11T17:15:51.937+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2224261}
2024-10-11T17:15:52.717+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.2191404}
2024-10-11T17:15:53.535+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.221383}
2024-10-11T17:15:54.353+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.223579}
2024-10-11T17:16:12.570+0800 INFO gfsd/gfsd.go:39 Shutdown Server ...
2024-10-11T17:16:12.570+0800 INFO gfsd/gfsd.go:48 Server exiting
2024-10-11T17:21:24.745+0800 DEBUG 结对编程/main.go:34 init ogger success...
2024-10-11T17:21:31.741+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017493}
2024-10-11T17:21:32.458+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019999}
2024-10-11T17:21:33.074+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016034}
2024-10-11T17:21:33.764+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017773}
2024-10-11T17:21:34.404+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017526}
2024-10-11T17:21:34.966+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021112}
2024-10-11T17:21:35.638+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008294}
2024-10-11T17:21:36.279+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016281}
2024-10-11T17:21:36.862+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019103}
2024-10-11T17:21:57.112+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002118}
2024-10-11T17:21:57.755+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020119}
2024-10-11T17:21:58.435+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016903}
2024-10-11T17:21:59.082+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002459}
2024-10-11T17:21:59.659+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018968}
2024-10-11T17:22:00.203+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017933}
2024-10-11T17:22:00.745+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012367}
2024-10-11T17:22:02.298+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021985}
2024-10-11T17:22:02.780+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018019}
2024-10-11T17:22:03.406+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017976}
2024-10-11T17:22:03.908+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014588}
2024-10-11T17:22:04.390+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012766}
2024-10-11T17:22:05.859+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0053609}
2024-10-11T17:22:07.547+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013757}
2024-10-11T17:22:08.077+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013836}
2024-10-11T17:22:08.483+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014738}
2024-10-11T17:22:09.898+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0022065}
2024-10-11T17:22:10.413+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020269}
2024-10-11T17:22:10.897+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011923}
2024-10-11T17:22:11.414+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019841}
2024-10-11T17:22:11.908+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019172}
2024-10-11T17:22:12.350+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016001}
2024-10-11T17:22:13.765+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0397269}
2024-10-11T17:22:14.454+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0294418}
2024-10-11T17:22:15.014+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0288461}
2024-10-11T17:22:16.951+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016378}
2024-10-11T17:22:17.496+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011638}
2024-10-11T17:22:19.294+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016683}
2024-10-11T17:22:19.769+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021657}
2024-10-11T17:22:21.302+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019255}
2024-10-11T17:22:21.832+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013618}
2024-10-11T17:22:22.337+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016544}
2024-10-11T17:22:22.889+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012215}
2024-10-11T17:22:23.525+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016616}
2024-10-11T17:22:24.023+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009307}
2024-10-11T17:22:24.543+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013158}
2024-10-11T17:22:25.010+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017232}
2024-10-11T17:22:25.606+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013166}
2024-10-11T17:22:27.343+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0026807}
2024-10-11T17:22:27.856+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014693}
2024-10-11T17:22:28.319+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014357}
2024-10-11T17:22:28.819+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014023}
2024-10-11T17:22:30.376+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009014}
2024-10-11T17:22:30.792+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002198}
2024-10-11T17:22:31.310+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008942}
2024-10-11T17:22:31.763+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014884}
2024-10-11T17:22:32.226+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013812}
2024-10-11T17:22:33.727+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:22:33.727+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012433}
2024-10-11T17:22:34.159+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:22:34.159+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007704}
2024-10-11T17:22:34.676+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:22:34.677+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0025647}
2024-10-11T17:22:36.252+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011508}
2024-10-11T17:22:36.766+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014274}
2024-10-11T17:22:37.281+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008883}
2024-10-11T17:22:38.990+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001373}
2024-10-11T17:22:39.521+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001747}
2024-10-11T17:22:40.127+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011549}
2024-10-11T17:22:40.609+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017231}
2024-10-11T17:22:43.412+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:22:43.412+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015877}
2024-10-11T17:22:44.037+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:22:44.037+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016663}
2024-10-11T17:22:47.135+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0105604}
2024-10-11T17:22:50.136+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011349}
2024-10-11T17:22:50.682+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011187}
2024-10-11T17:22:51.242+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008528}
2024-10-11T17:22:51.852+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007514}
2024-10-11T17:22:52.363+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012165}
2024-10-11T17:22:52.859+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0023536}
2024-10-11T17:22:55.177+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012378}
2024-10-11T17:22:55.632+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019178}
2024-10-11T17:22:57.106+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007489}
2024-10-11T17:22:57.676+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013428}
2024-10-11T17:22:58.209+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0024293}
2024-10-11T17:22:58.645+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010269}
2024-10-11T17:26:09.071+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014495}
2024-10-11T17:26:09.645+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016371}
2024-10-11T17:26:10.298+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021665}
2024-10-11T17:26:10.934+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001411}
2024-10-11T17:26:11.449+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015283}
2024-10-11T17:26:11.975+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016387}
2024-10-11T17:26:12.402+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017324}
2024-10-11T17:26:12.845+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015202}
2024-10-11T17:26:13.314+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019918}
2024-10-11T17:26:13.702+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019195}
2024-10-11T17:26:14.093+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011821}
2024-10-11T17:26:14.498+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001967}
2024-10-11T17:26:14.966+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002226}
2024-10-11T17:26:15.337+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017404}
2024-10-11T17:26:15.710+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016173}
2024-10-11T17:26:17.007+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021593}
2024-10-11T17:26:17.349+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001999}
2024-10-11T17:26:17.756+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016926}
2024-10-11T17:26:18.177+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017405}
2024-10-11T17:26:18.627+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021788}
2024-10-11T17:26:19.034+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013887}
2024-10-11T17:26:19.430+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013666}
2024-10-11T17:26:19.788+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0024553}
2024-10-11T17:26:20.292+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015819}
2024-10-11T17:26:20.734+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011898}
2024-10-11T17:26:21.124+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008233}
2024-10-11T17:26:22.634+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0306268}
2024-10-11T17:26:23.252+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0279495}
2024-10-11T17:26:24.824+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0075193}
2024-10-11T17:26:25.413+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0041233}
2024-10-11T17:26:26.893+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:26:26.893+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021718}
2024-10-11T17:26:27.327+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:26:27.327+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018146}
2024-10-11T17:26:27.669+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:26:27.670+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020913}
2024-10-11T17:26:29.029+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009589}
2024-10-11T17:26:29.450+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.00107}
2024-10-11T17:26:29.909+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010493}
2024-10-11T17:26:31.236+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001027}
2024-10-11T17:26:31.594+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016531}
2024-10-11T17:26:32.048+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016595}
2024-10-11T17:26:33.623+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001125}
2024-10-11T17:26:34.059+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016993}
2024-10-11T17:26:34.480+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011389}
2024-10-11T17:26:34.928+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008752}
2024-10-11T17:26:35.292+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0006584}
2024-10-11T17:26:35.789+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015256}
2024-10-11T17:26:36.180+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009658}
2024-10-11T17:26:36.621+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012603}
2024-10-11T17:26:37.009+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020185}
2024-10-11T17:26:37.472+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009912}
2024-10-11T17:26:37.955+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008796}
2024-10-11T17:26:38.311+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011061}
2024-10-11T17:26:38.762+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013931}
2024-10-11T17:26:39.211+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013599}
2024-10-11T17:26:39.712+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010908}
2024-10-11T17:26:40.181+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016381}
2024-10-11T17:26:40.635+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.000637}
2024-10-11T17:26:41.086+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007256}
2024-10-11T17:26:41.507+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019752}
2024-10-11T17:26:41.927+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008043}
2024-10-11T17:26:43.661+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0071406}
2024-10-11T17:26:50.387+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017965}
2024-10-11T17:26:50.871+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017579}
2024-10-11T17:26:51.184+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018068}
2024-10-11T17:26:51.516+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001647}
2024-10-11T17:26:51.893+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014745}
2024-10-11T17:26:52.199+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.000865}
2024-10-11T17:26:52.549+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013751}
2024-10-11T17:26:52.893+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0023833}
2024-10-11T17:26:53.173+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013003}
2024-10-11T17:26:53.470+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009872}
2024-10-11T17:26:53.766+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017858}
2024-10-11T17:26:54.062+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014354}
2024-10-11T17:26:54.345+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015693}
2024-10-11T17:26:54.654+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012979}
2024-10-11T17:26:54.995+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0006888}
2024-10-11T17:26:55.294+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021478}
2024-10-11T17:26:55.623+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020823}
2024-10-11T17:27:00.138+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001861}
2024-10-11T17:27:00.518+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018514}
2024-10-11T17:27:00.925+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001758}
2024-10-11T17:27:01.331+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015751}
2024-10-11T17:27:01.861+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020075}
2024-10-11T17:27:02.286+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018458}
2024-10-11T17:27:02.561+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010154}
2024-10-11T17:27:02.952+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017302}
2024-10-11T17:27:03.264+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018019}
2024-10-11T17:27:03.609+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019393}
2024-10-11T17:27:04.076+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002031}
2024-10-11T17:27:05.567+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010936}
2024-10-11T17:27:05.913+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012309}
2024-10-11T17:27:06.243+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010849}
2024-10-11T17:27:06.588+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.003671}
2024-10-11T17:27:06.896+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008498}
2024-10-11T17:27:07.257+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016933}
2024-10-11T17:38:21.218+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013449}
2024-10-11T17:38:21.749+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008155}
2024-10-11T17:38:22.353+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013601}
2024-10-11T17:38:22.904+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0026697}
2024-10-11T17:38:23.460+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011232}
2024-10-11T17:38:23.965+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019328}
2024-10-11T17:38:24.425+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016819}
2024-10-11T17:38:24.914+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020526}
2024-10-11T17:38:25.382+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014893}
2024-10-11T17:38:25.787+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001494}
2024-10-11T17:38:26.288+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010225}
2024-10-11T17:38:27.748+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011043}
2024-10-11T17:38:28.189+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015329}
2024-10-11T17:38:28.614+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018011}
2024-10-11T17:38:29.085+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017985}
2024-10-11T17:38:29.522+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001153}
2024-10-11T17:38:29.975+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019069}
2024-10-11T17:38:30.332+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009755}
2024-10-11T17:38:31.603+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0053626}
2024-10-11T17:38:32.105+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.003299}
2024-10-11T17:38:32.654+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0037482}
2024-10-11T17:38:34.071+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0306601}
2024-10-11T17:38:34.512+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0304993}
2024-10-11T17:38:35.033+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0304764}
2024-10-11T17:38:35.519+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0297331}
2024-10-11T17:38:36.029+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0264504}
2024-10-11T17:38:36.548+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0266072}
2024-10-11T17:38:37.090+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0328545}
2024-10-11T17:38:39.230+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:38:39.230+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010914}
2024-10-11T17:38:39.657+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:38:39.657+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017686}
2024-10-11T17:38:42.713+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0075855}
2024-10-11T17:38:43.146+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:38:43.146+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012492}
2024-10-11T17:38:44.605+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007713}
2024-10-11T17:38:45.109+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001562}
2024-10-11T17:38:45.500+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020184}
2024-10-11T17:38:45.923+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001374}
2024-10-11T17:38:47.340+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014355}
2024-10-11T17:38:47.734+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014169}
2024-10-11T17:38:48.301+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020341}
2024-10-11T17:38:48.771+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011731}
2024-10-11T17:38:49.238+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009914}
2024-10-11T17:38:51.211+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019161}
2024-10-11T17:38:52.004+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011185}
2024-10-11T17:38:52.596+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016865}
2024-10-11T17:38:53.225+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017367}
2024-10-11T17:38:55.896+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013504}
2024-10-11T17:38:56.333+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011454}
2024-10-11T17:38:56.867+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012413}
2024-10-11T17:38:57.306+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015165}
2024-10-11T17:39:02.909+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0329984}
2024-10-11T17:39:05.852+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0334309}
2024-10-11T17:39:06.336+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0343021}
2024-10-11T17:39:06.922+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0313426}
2024-10-11T17:39:07.474+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0367527}
2024-10-11T17:39:07.966+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0377657}
2024-10-11T17:39:08.563+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0338446}
2024-10-11T17:39:09.977+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017677}
2024-10-11T17:39:10.429+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009983}
2024-10-11T17:39:10.963+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001457}
2024-10-11T17:39:11.480+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021294}
2024-10-11T17:39:14.182+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020298}
2024-10-11T17:39:14.726+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008065}
2024-10-11T17:39:15.370+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013808}
2024-10-11T17:39:15.996+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009149}
2024-10-11T17:39:16.604+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013748}
2024-10-11T17:39:17.272+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016627}
2024-10-11T17:39:17.862+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001532}
2024-10-11T17:39:18.454+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018605}
2024-10-11T17:39:19.061+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019314}
2024-10-11T17:39:19.524+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015205}
2024-10-11T17:39:20.158+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014896}
2024-10-11T17:39:20.735+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013098}
2024-10-11T17:39:21.295+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014997}
2024-10-11T17:41:09.797+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009791}
2024-10-11T17:41:10.322+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009147}
2024-10-11T17:41:10.777+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019586}
2024-10-11T17:41:11.115+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0009009}
2024-10-11T17:41:11.493+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019038}
2024-10-11T17:41:11.898+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016558}
2024-10-11T17:41:12.255+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021189}
2024-10-11T17:41:12.648+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013415}
2024-10-11T17:41:13.037+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018275}
2024-10-11T17:41:13.395+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007583}
2024-10-11T17:41:13.708+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020111}
2024-10-11T17:41:14.936+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0008818}
2024-10-11T17:41:15.190+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015456}
2024-10-11T17:41:15.442+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011802}
2024-10-11T17:41:15.893+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011967}
2024-10-11T17:41:16.240+0800 INFO logger/logger.go:84 /get-all {"status": 200, "method": "POST", "path": "/get-all", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0021857}
2024-10-11T17:41:17.543+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019066}
2024-10-11T17:41:17.936+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017782}
2024-10-11T17:41:18.206+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017148}
2024-10-11T17:41:18.490+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020843}
2024-10-11T17:41:18.802+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0015077}
2024-10-11T17:41:19.066+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018001}
2024-10-11T17:41:19.350+0800 INFO logger/logger.go:84 /get-target-info {"status": 200, "method": "POST", "path": "/get-target-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0019169}
2024-10-11T17:41:20.478+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0092846}
2024-10-11T17:41:20.816+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:20.816+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0006972}
2024-10-11T17:41:21.116+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:21.116+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001266}
2024-10-11T17:41:21.414+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:21.414+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002197}
2024-10-11T17:41:21.665+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:21.665+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0018183}
2024-10-11T17:41:24.246+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0097951}
2024-10-11T17:41:24.627+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:24.627+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.002004}
2024-10-11T17:41:24.865+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:24.866+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016274}
2024-10-11T17:41:25.101+0800 ERROR controllers/roll.go:125 Change score failed {"error": "学生学号错误"}
2024-10-11T17:41:25.101+0800 INFO logger/logger.go:84 /change-score {"status": 200, "method": "POST", "path": "/change-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014548}
2024-10-11T17:41:26.198+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0030889}
2024-10-11T17:41:26.541+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0024032}
2024-10-11T17:41:26.837+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0035334}
2024-10-11T17:41:27.728+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0011093}
2024-10-11T17:41:27.965+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014828}
2024-10-11T17:41:28.164+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0007399}
2024-10-11T17:41:28.421+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013824}
2024-10-11T17:41:28.688+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012149}
2024-10-11T17:41:28.984+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014098}
2024-10-11T17:41:29.265+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013782}
2024-10-11T17:41:29.545+0800 INFO logger/logger.go:84 /get-accord-score {"status": 200, "method": "GET", "path": "/get-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0013694}
2024-10-11T17:41:30.802+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0017853}
2024-10-11T17:41:31.130+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014319}
2024-10-11T17:41:31.410+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0016182}
2024-10-11T17:41:31.721+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.000863}
2024-10-11T17:41:32.020+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020916}
2024-10-11T17:41:32.318+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0023931}
2024-10-11T17:41:32.568+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0020907}
2024-10-11T17:41:32.859+0800 INFO logger/logger.go:84 /get-random {"status": 200, "method": "GET", "path": "/get-random", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0010361}
2024-10-11T17:41:34.084+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0337886}
2024-10-11T17:41:34.378+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0329347}
2024-10-11T17:41:34.695+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0360095}
2024-10-11T17:41:35.032+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0574163}
2024-10-11T17:41:35.339+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0353909}
2024-10-11T17:41:35.706+0800 INFO logger/logger.go:84 /upload {"status": 200, "method": "POST", "path": "/upload", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.037389}
2024-10-11T17:41:36.779+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0012396}
2024-10-11T17:41:37.077+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.001974}
2024-10-11T17:41:37.326+0800 INFO logger/logger.go:84 /get-N-accord-score {"status": 200, "method": "POST", "path": "/get-N-accord-score", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0014256}
2024-10-11T17:41:38.329+0800 INFO logger/logger.go:84 /save-info {"status": 200, "method": "GET", "path": "/save-info", "query": "", "ip": "::1", "user-agent": "Apifox/1.0.0 (https://www.apifox.cn)", "errors": "", "cost": 0.0032669}
2024-10-11T17:44:29.619+0800 INFO gfsd/gfsd.go:39 Shutdown Server ...
2024-10-11T17:44:29.619+0800 INFO gfsd/gfsd.go:48 Server exiting
2024-10-11T21:06:33.944+0800 DEBUG back-end/main.go:33 init ogger success...
2024-10-11T21:06:33.965+0800 ERROR mysql/mysql.go:51 import Sql failed {"error": "Error 1193 (HY000): Unknown system variable 'query_cache_type'"}
2024-10-11T21:13:50.018+0800 DEBUG back-end/main.go:33 init ogger success...
2024-10-11T21:14:01.251+0800 INFO gfsd/gfsd.go:39 Shutdown Server ...
2024-10-11T21:14:01.251+0800 INFO gfsd/gfsd.go:48 Server exiting

@ -0,0 +1,142 @@
package logger
import (
"net"
"net/http"
"net/http/httputil"
"os"
"runtime/debug"
"strings"
"time"
"github.com/gin-gonic/gin"
"github.com/natefinch/lumberjack"
"github.com/spf13/viper"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func Init() (err error) {
writerSyncer := getLogWriter(
viper.GetString("logger.name"),
viper.GetInt("logger.max_sizes"),
viper.GetInt("logger.max_age"),
viper.GetInt("logger.max_backups"),
)
encoder := getEncoder()
var l = new(zapcore.Level)
err = l.UnmarshalText([]byte(viper.GetString("logger.level")))
if err != nil {
return
}
core := zapcore.NewCore(encoder, writerSyncer, zapcore.DebugLevel)
lg := zap.New(core, zap.AddCaller())
//用 lg 来代替全局 logger
zap.ReplaceGlobals(lg)
return
}
func getEncoder() zapcore.Encoder {
// return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
encoder := zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
FunctionKey: zapcore.OmitKey,
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// encoder.EncodeTime = zapcore.ISO8601TimeEncoder
// encoder.EncodeLevel = zapcore.CapitalLevelEncoder
return zapcore.NewConsoleEncoder(encoder)
}
func getLogWriter(filename string, maxSize int, maxBackups int, maxAge int) zapcore.WriteSyncer {
lumberjackLogger := &lumberjack.Logger{
Filename: filename,
MaxSize: maxSize, // 最大大小单位是M
MaxBackups: maxBackups, //最大备份数量,在上个文件达到最大大小时,开始备份文件
MaxAge: maxAge, //最大保持备份天数
Compress: false, //是否压缩
}
return zapcore.AddSync(lumberjackLogger)
}
func GinLogger() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
path := c.Request.URL.Path
query := c.Request.URL.RawQuery
ip := c.ClientIP()
user_agent := c.Request.UserAgent()
err := c.Errors.ByType(gin.ErrorTypePrivate).String()
c.Next()
cost := time.Since(start)
zap.L().Info(
path,
zap.Int("status", c.Writer.Status()),
zap.String("method", c.Request.Method),
zap.String("path", path),
zap.String("query", query),
zap.String("ip", ip),
zap.String("user-agent", user_agent),
zap.String("errors", err),
zap.Duration("cost", cost),
)
}
}
func GinRecovery(stack bool) gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
// Check for a broken connection, as it is not really a
// condition that warrants a panic stack trace.
var brokenPipe bool
if ne, ok := err.(*net.OpError); ok {
if se, ok := ne.Err.(*os.SyscallError); ok {
if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") {
brokenPipe = true
}
}
}
httpRequest, _ := httputil.DumpRequest(c.Request, false)
if brokenPipe {
zap.L().Error(c.Request.URL.Path,
zap.Any("error", err),
zap.String("request", string(httpRequest)),
)
// If the connection is dead, we can't write a status to it.
c.Error(err.(error)) // nolint: errcheck
c.Abort()
return
}
if stack {
zap.L().Error("[Recovery from panic]",
zap.Any("error", err),
zap.String("request", string(httpRequest)),
zap.String("stack", string(debug.Stack())),
)
} else {
zap.L().Error("[Recovery from panic]",
zap.Any("error", err),
zap.String("request", string(httpRequest)),
)
}
c.AbortWithStatus(http.StatusInternalServerError)
}
}()
c.Next()
}
}

@ -0,0 +1,41 @@
package logic
import (
"fmt"
"time"
"github.com/xuri/excelize/v2"
)
var savePrefix = "document/"
var saveSuffix = ".xlsx"
func WriteIntoExcelLogic() (savePath string, err error) {
back, err := GetAllStudentInfoLogic()
if err != nil {
return
}
f := excelize.NewFile()
sheetName := "Sheet1"
f.NewSheet(sheetName)
headers := []string{"学号", "姓名", "性别", "计分"}
for i, header := range headers {
cell, _ := excelize.CoordinatesToCellName(i+1, 1)
f.SetCellValue(sheetName, cell, header)
}
for i, info := range *back {
row := i + 2
f.SetCellValue(sheetName, fmt.Sprintf("A%d", row), info.User_id)
f.SetCellValue(sheetName, fmt.Sprintf("B%d", row), info.User_name)
f.SetCellValue(sheetName, fmt.Sprintf("C%d", row), info.User_gender)
f.SetCellValue(sheetName, fmt.Sprintf("D%d", row), info.User_score)
}
currentTime := time.Now()
formattedTime := currentTime.Format("20060102150405")
savePath = savePrefix + formattedTime + saveSuffix
if err = f.SaveAs(savePath); err != nil {
return
}
return
}

@ -0,0 +1,60 @@
package logic
import (
"main/dao/mysql"
"main/models"
"mime/multipart"
"strconv"
"github.com/xuri/excelize/v2"
"go.uber.org/zap"
)
func ImportStudentInfoLogic(file *multipart.FileHeader) (err error) {
var s []models.User
f, err := file.Open()
if err != nil {
return
}
defer f.Close()
excelFile, err := excelize.OpenReader(f)
if err != nil {
return
}
sheetList := excelFile.GetSheetList()
if len(sheetList) == 0 {
return
}
rows, err := excelFile.GetRows(sheetList[0])
if err != nil {
return
}
for _, row := range rows[1:] {
user_id, err := strconv.ParseInt(row[0], 10, 64)
if err != nil {
zap.L().Error("user_id change failed", zap.Error(err))
continue
}
user_score, err := strconv.ParseInt(row[3], 10, 64)
if err != nil {
zap.L().Error("user_score change failed", zap.Error(err))
continue
}
var user_gender int
if row[2] == "男" {
user_gender = 1
} else if row[2] == "女" {
user_gender = 2
} else {
user_gender = 0
}
student := models.User{
User_id: user_id,
User_name: row[1],
User_gender: user_gender,
User_score: user_score,
}
s = append(s, student)
}
return mysql.ImportStudentInfoIntoSql(s)
}

@ -0,0 +1,101 @@
package logic
import (
"main/dao/mysql"
"main/models"
"main/pkg/snowflake"
"main/utils"
"math/rand"
)
func GetAllStudentInfoLogic() (back *[]models.User, err error) {
return mysql.GetAllStudentInfo()
}
func GetOneRandomStudentInfoLogic() (info models.User, err error) {
back, err := mysql.GetOneRandomStudentInfo()
if err != nil {
return
}
info = *back
return
}
func GetOneStudentInfoAccordScoreLogic() (info models.User, err error) {
back, err := GetAllStudentInfoLogic()
if err != nil {
return
}
seed := snowflake.GenID()
info = WeightedRandomSelect(*back, seed)
return
}
func GetNStudentInfoAccordScoreLogic(p *models.ParamNum) (info []models.User, err error) {
back, err := GetAllStudentInfoLogic()
if err != nil {
return
}
if p.Num > len(*back) {
err = utils.ErrorBeyondNum
return
}
seed := snowflake.GenID()
for i := 0; i < p.Num; i++ {
getInfo := WeightedRandomSelect(*back, seed)
info = append(info, getInfo)
removeUser(*back, getInfo)
}
return
}
func GetTargetStudentInfoLogic(p *models.ParamUser) (info models.User, err error) {
back, err := mysql.GetTargetStudentInfo(p.User_id)
if err != nil {
return
}
info = *back
return
}
func ChangeStuScoreLogic(p *models.ParamUser) (user *models.UserScore, err error) {
user = new(models.UserScore)
user.User_id = p.User_id
user.User_score = p.User_score
err = mysql.ChangeStuScore(user)
return
}
func WeightedRandomSelect(users []models.User, seed int64) models.User {
totalWeight := 0.0
weights := make([]float64, len(users))
for i, user := range users {
if user.User_score == 0 {
weights[i] = 3
} else if user.User_score > 0 {
weights[i] = 1.0 / float64(user.User_score)
} else {
weights[i] = 0 - float64(user.User_score) + 3
}
totalWeight += weights[i]
}
rand.Seed(seed)
randomWeight := rand.Float64() * totalWeight
for i, user := range users {
if randomWeight < weights[i] {
return user
}
randomWeight -= weights[i]
}
return users[0]
}
func removeUser(users []models.User, user models.User) []models.User {
for i, u := range users {
if u.User_id == user.User_id {
return append(users[:i], users[i+1:]...)
}
}
return users
}

Binary file not shown.

@ -0,0 +1,70 @@
package main
import (
"fmt"
"main/dao/mysql"
"main/logger"
"main/pkg/gfsd"
"main/pkg/snowflake"
"main/pkg/vt"
"main/routes"
"main/settings"
"net/http"
_ "net/http/pprof"
"runtime"
"github.com/spf13/viper"
"go.uber.org/zap"
)
func main() {
isTrace(viper.GetBool("app.test"))
// 1. 加载配置
if err := settings.Init(); err != nil {
fmt.Printf("init settings failed, err = %v\n", err)
return
}
// 2. 初始化日志
if err := logger.Init(); err != nil {
fmt.Printf("init logger failed, err = %v\n", err)
return
}
defer zap.L().Sync()
zap.L().Debug("init ogger success...")
// 3. 搭建 Mysql 连接
if err := mysql.Init(); err != nil {
fmt.Printf("init mysql failed = %v\n", err)
return
}
defer mysql.Close()
// 4. 搭建 Redis 连接
// 暂时不用
// 雪花算法初始化
if err := snowflake.Init(); err != nil {
fmt.Printf("init snowflake failed, err:%v\n", err)
return
}
// 初始化gin内置翻译器
if err := vt.InitTrans("zh"); err != nil {
fmt.Printf("init trans failed = %v\n", err)
return
}
// 5. 注册路由
r := routes.Setup()
// 6. 启动服务(同时实现优雅关机)
gfsd.Graceful_Shutdown(r)
}
func isTrace(f bool) {
if f {
runtime.SetCPUProfileRate(10000)
go func() {
http.ListenAndServe("localhost:6060", nil)
}()
}
}

@ -0,0 +1,26 @@
package middlewares
import (
"net/http"
"github.com/gin-gonic/gin"
)
// 跨域通讯
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
origin := c.Request.Header.Get("Origin")
if origin != "" {
c.Header("Access-Control-Allow-Origin", "*") // 可将将 * 替换为指定的域名
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type")
c.Header("Access-Control-Allow-Credentials", "true")
}
if method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
c.Next()
}
}

@ -0,0 +1,12 @@
package models
type ParamUser struct {
User_id int64 `json:"user_id" bind:"required"`
User_name string `json:"user_name"`
User_gender int `json:"user_gender"`
User_score int64 `json:"user_score"`
}
type ParamNum struct {
Num int `json:"num" bind:"required"`
}

@ -0,0 +1,18 @@
package models
type User struct {
User_id int64 `db:"user_id"`
User_name string `db:"user_name"`
User_gender int `db:"user_gender"`
User_score int64 `db:"user_score"`
}
type UserScore struct {
User_id int64 `db:"user_id"`
User_score int64 `db:"user_score"`
}
type SaveInfo struct {
Msg string
SavePath string
}

@ -0,0 +1,49 @@
package gfsd
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"go.uber.org/zap"
)
func Graceful_Shutdown(r *gin.Engine) {
srv := &http.Server{
Addr: fmt.Sprintf(":%d", viper.GetInt("app.port")),
Handler: r,
}
go func() {
// 开启一个goroutine启动服务
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
zap.L().Fatal("listen: %s\n", zap.Error(err))
}
}()
// 等待中断信号来优雅地关闭服务器为关闭服务器操作设置一个5秒的超时
quit := make(chan os.Signal, 1) // 创建一个接收信号的通道
// kill 默认会发送 syscall.SIGTERM 信号
// kill -2 发送 syscall.SIGINT 信号我们常用的Ctrl+C就是触发系统SIGINT信号
// kill -9 发送 syscall.SIGKILL 信号,但是不能被捕获,所以不需要添加它
// signal.Notify把收到的 syscall.SIGINT或syscall.SIGTERM 信号转发给quit
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) // 此处不会阻塞
<-quit // 阻塞在此,当接收到上述两种信号时才会往下执行
zap.L().Info("Shutdown Server ...")
// 创建一个5秒超时的context
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// 5秒内优雅关闭服务将未处理完的请求处理完再关闭服务超过5秒就超时退出
if err := srv.Shutdown(ctx); err != nil {
zap.L().Fatal("Server Shutdown", zap.Error(err))
}
zap.L().Info("Server exiting")
}

@ -0,0 +1,35 @@
package snowflake
import (
"time"
sf "github.com/bwmarrin/snowflake"
"github.com/spf13/viper"
)
var node *sf.Node
func Init() (err error) {
startTime := viper.GetString("app.start_time")
machineID := viper.GetInt64("machine_id")
var st time.Time
st, err = time.Parse("2006-01-02", startTime)
if err != nil {
return
}
sf.Epoch = st.UnixNano() / 1000000
node, err = sf.NewNode(machineID)
return
}
func GenID() int64 {
return node.Generate().Int64()
}
// func main() {
// if err := Init("2020-07-01", 1); err != nil {
// fmt.Printf("init failed, err:%v\n", err)
// return
// }
// id := GenID()
// fmt.Println(id)
// }

@ -0,0 +1,82 @@
package vt
import (
"fmt"
"reflect"
"strings"
"github.com/gin-gonic/gin/binding"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
enTranslations "github.com/go-playground/validator/v10/translations/en"
zhTranslations "github.com/go-playground/validator/v10/translations/zh"
)
// 定义一个全局翻译器T
var Trans ut.Translator
// InitTrans 初始化翻译器
func InitTrans(locale string) (err error) {
// 修改gin框架中的Validator引擎属性实现自定制
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
// 注册一个获取json tag的自定义方法
v.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
if name == "-" {
return ""
}
return name
})
zhT := zh.New() // 中文翻译器
enT := en.New() // 英文翻译器
// 为SignUpParam注册自定义校验方法
// v.RegisterStructValidation(SignUpParamStructLevelValidation, models.ParamSignUp{})
// 第一个参数是备用fallback的语言环境
// 后面的参数是应该支持的语言环境(支持多个)
// uni := ut.New(zhT, zhT) 也是可以的
uni := ut.New(enT, zhT, enT)
// locale 通常取决于 http 请求头的 'Accept-Language'
var ok bool
// 也可以使用 uni.FindTranslator(...) 传入多个locale进行查找
Trans, ok = uni.GetTranslator(locale)
if !ok {
return fmt.Errorf("uni.GetTranslator(%s) failed", locale)
}
// 注册翻译器
switch locale {
case "en":
err = enTranslations.RegisterDefaultTranslations(v, Trans)
case "zh":
err = zhTranslations.RegisterDefaultTranslations(v, Trans)
default:
err = enTranslations.RegisterDefaultTranslations(v, Trans)
}
return
}
return
}
// 去除提示信息中的结构体名称
func RemoveTopStruct(fields map[string]string) map[string]string {
res := map[string]string{}
for field, err := range fields {
res[field[strings.Index(field, ".")+1:]] = err
}
return res
}
// 自定义SignUpParam结构体校验函数
// func SignUpParamStructLevelValidation(sl validator.StructLevel) {
// su := sl.Current().Interface().(models.ParamSignUp)
// if su.Password != su.RePassword {
// // 输出错误提示信息最后一个参数就是传递的param
// sl.ReportError(su.RePassword, "re_password", "RePassword", "eqfield", "password")
// }
// }

@ -0,0 +1,31 @@
package routes
import (
"main/controllers"
"main/logger"
"main/middlewares"
"net/http"
"github.com/gin-gonic/gin"
)
func Setup() *gin.Engine {
r := gin.New()
r.Use(logger.GinLogger(), logger.GinRecovery(true))
r.Use(middlewares.Cors())
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello")
})
r.POST("/upload", controllers.ImportStudentInfoHandler)
r.POST("/change-score", controllers.ChangeStuScoreHandler)
r.POST("/get-target-info", controllers.GetTargetStudentInfoHandler)
r.POST("/get-all", controllers.GetAllStudentInfoHandler)
r.POST("/get-N-accord-score", controllers.GetNStudentInfoAccordScoreHandler)
r.GET("/save-info", controllers.WriteIntoExcelHandler)
r.GET("/get-random", controllers.GetOneRandomStudentInfoHandler)
r.GET("/get-accord-score", controllers.GetOneStudentInfoAccordScoreHandler)
return r
}

@ -0,0 +1,24 @@
package settings
import (
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
)
func Init() (err error) {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
err = viper.ReadInConfig()
if err != nil {
fmt.Printf("viper.ReadInConfig failed, err = %v\n", err)
return err
}
viper.WatchConfig()
viper.OnConfigChange(func(in fsnotify.Event) {
fmt.Println("配置文件修改...")
})
return
}

@ -0,0 +1,55 @@
package test
import (
"bytes"
"main/controllers"
"mime/multipart"
"net/http"
"net/http/httptest"
"testing"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/require"
)
func BenchmarkImportStudentInfo(b *testing.B) {
// 设置 Gin 测试模式
gin.SetMode(gin.TestMode)
// 创建一个 Gin 引擎
r := gin.Default()
r.POST("/import", controllers.ImportStudentInfoHandler)
// 模拟文件内容
fileContent := []byte("test file content")
body, boundary := createMultipartFormfile(b, "file", "/document/test.xlsx", fileContent)
// 创建一个 HTTP 请求
req := httptest.NewRequest(http.MethodPost, "/import", body)
req.Header.Set("Content-Type", "multipart/form-data; boundary="+boundary)
// 创建一个 HTTP 响应记录器
w := httptest.NewRecorder()
// 重置计时器
b.ResetTimer()
for i := 0; i < b.N; i++ {
// 处理请求
r.ServeHTTP(w, req)
// 检查响应状态码
require.Equal(b, http.StatusOK, w.Code)
}
}
// 模拟文件上传
func createMultipartFormfile(t *testing.B, fieldName, fileName string, fileContent []byte) (*bytes.Buffer, string) {
body := new(bytes.Buffer)
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile(fieldName, fileName)
require.NoError(t, err)
part.Write(fileContent)
writer.Close()
return body, writer.Boundary()
}

@ -0,0 +1,90 @@
package test
import (
"fmt"
"main/dao/mysql"
"main/logic"
"main/models"
"regexp"
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/jmoiron/sqlx"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGetAllStudentInfo(t *testing.T) {
// 创建一个模拟数据库
db, mock, err := sqlmock.New()
require.NoError(t, err)
defer db.Close()
sqlxDB := sqlx.NewDb(db, "mysql")
originalDB := mysql.GetDb()
mysql.ChangeDb(sqlxDB)
defer func() { mysql.ChangeDb(originalDB) }()
// 定义期望的查询和结果
rows := sqlmock.NewRows([]string{"user_id", "user_name", "user_gender", "user_score"}).
AddRow(1, "Alice", 1, 90).
AddRow(2, "Bob", 1, 85)
mock.ExpectQuery("(?i)SELECT user_id, user_name, user_gender, user_score FROM user ORDER BY user_score ASC").
WillReturnRows(rows)
// 调用被测试函数
result, err := mysql.GetAllStudentInfo() // 确保函数路径正确
require.NoError(t, err)
// 验证结果
expected := &[]models.User{
{User_id: 1, User_name: "Alice", User_gender: 1, User_score: 90},
{User_id: 2, User_name: "Bob", User_gender: 1, User_score: 85},
}
assert.Equal(t, expected, result)
// 验证所有期望的操作都已执行
err = mock.ExpectationsWereMet()
require.NoError(t, err)
}
func TestChangeStuScore(t *testing.T) {
db, mock, err := sqlmock.New()
require.NoError(t, err)
defer db.Close()
sqlxDB := sqlx.NewDb(db, "mysql")
originalDB := mysql.GetDb()
mysql.ChangeDb(sqlxDB)
defer func() { mysql.ChangeDb(originalDB) }()
if err != nil {
fmt.Println(err)
}
sqlStr := `update user set
user_score = ?
where user_id=?`
mock.ExpectExec(regexp.QuoteMeta(sqlStr)).
WithArgs(95, 1).
WillReturnResult(sqlmock.NewResult(1, 1))
user := &models.UserScore{
User_id: 1,
User_score: 95,
}
err = mysql.ChangeStuScore(user)
require.NoError(t, err)
err = mock.ExpectationsWereMet()
require.NoError(t, err)
}
func TestWeightedRandomSelectWithMockRNG(t *testing.T) {
users := []models.User{
{User_id: 1, User_score: 0},
{User_id: 2, User_score: 10},
{User_id: 3, User_score: 20},
}
// 确定种子
rng := 42
expectedUser := users[0]
selectedUser := logic.WeightedRandomSelect(users, int64(rng))
require.Equal(t, expectedUser, selectedUser)
}

@ -0,0 +1,33 @@
package utils
type ResCode int64
const (
CodeSuccess ResCode = 1000 + iota
CodeInvalidParam
CodeUpLoadError
CodeStudentInfoEmpty
CodeWriteInfoError
CodeTooMuchNum
CodeServerBusy
)
var codeMsgMap = map[ResCode]string{
CodeSuccess: "success",
CodeInvalidParam: "请求参数错误",
CodeUpLoadError: "上传文件错误",
CodeStudentInfoEmpty: "学生信息为空",
CodeWriteInfoError: "写入信息错误",
CodeTooMuchNum: "请求数量过多",
CodeServerBusy: "服务繁忙",
}
func (c ResCode) Msg() string {
msg, ok := codeMsgMap[c]
if !ok {
msg = codeMsgMap[CodeServerBusy]
}
return msg
}

@ -0,0 +1,9 @@
package utils
import "errors"
var (
ErrorStuInfoEmpty = errors.New("学生信息为空")
ErrorInvalidStuId = errors.New("学生学号错误")
ErrorBeyondNum = errors.New("请求数量过多")
)

@ -0,0 +1,46 @@
package utils
import (
"net/http"
"github.com/gin-gonic/gin"
)
/*
{
"code": 10000, // 程序中的错误码
"msg": xx, // 提示信息
"data": {}, // 数据
}
*/
type ResponseData struct {
Code ResCode `json:"code"`
Msg interface{} `json:"msg"`
Data interface{} `json:"data,omitempty"`
}
func ResponseError(c *gin.Context, code ResCode) {
c.JSON(http.StatusOK, &ResponseData{
Code: code,
Msg: code.Msg(),
Data: nil,
})
}
func ResponseErrorWithMsg(c *gin.Context, code ResCode, msg interface{}) {
c.JSON(http.StatusOK, &ResponseData{
Code: code,
Msg: msg,
Data: nil,
})
}
func ResponseSuccess(c *gin.Context, data interface{}) {
c.JSON(http.StatusOK, &ResponseData{
Code: CodeSuccess,
Msg: CodeSuccess.Msg(),
Data: data,
})
}

@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo

@ -0,0 +1,40 @@
{
"hash": "60808396",
"configHash": "59b8cfd4",
"lockfileHash": "dc70f975",
"browserHash": "f37eb18a",
"optimized": {
"vue": {
"src": "../../node_modules/.pnpm/vue@3.5.11/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "b734d491",
"needsInterop": false
},
"pinia": {
"src": "../../node_modules/.pnpm/pinia@2.2.4_vue@3.5.11/node_modules/pinia/dist/pinia.mjs",
"file": "pinia.js",
"fileHash": "9cec28a2",
"needsInterop": false
},
"pinia-plugin-persistedstate": {
"src": "../../node_modules/.pnpm/pinia-plugin-persistedstate@4.1.1_pinia@2.2.4_vue@3.5.11__rollup@4.24.0/node_modules/pinia-plugin-persistedstate/dist/index.js",
"file": "pinia-plugin-persistedstate.js",
"fileHash": "e1a46a27",
"needsInterop": false
},
"vue-router": {
"src": "../../node_modules/.pnpm/vue-router@4.4.5_vue@3.5.11/node_modules/vue-router/dist/vue-router.mjs",
"file": "vue-router.js",
"fileHash": "97ce4aa0",
"needsInterop": false
}
},
"chunks": {
"chunk-BPR5FKHA": {
"file": "chunk-BPR5FKHA.js"
},
"chunk-UGVUZKZS": {
"file": "chunk-UGVUZKZS.js"
}
}
}

@ -21,6 +21,7 @@
"dependencies": { "dependencies": {
"axios": "^1.7.7", "axios": "^1.7.7",
"element-plus": "^2.8.4", "element-plus": "^2.8.4",
"matter-js": "^0.20.0",
"mockjs": "^1.1.0", "mockjs": "^1.1.0",
"pinia": "^2.1.7", "pinia": "^2.1.7",
"vue": "^3.4.29", "vue": "^3.4.29",

@ -14,6 +14,9 @@ importers:
element-plus: element-plus:
specifier: ^2.8.4 specifier: ^2.8.4
version: 2.8.4(vue@3.5.11) version: 2.8.4(vue@3.5.11)
matter-js:
specifier: ^0.20.0
version: 0.20.0
mockjs: mockjs:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0 version: 1.1.0
@ -1173,6 +1176,9 @@ packages:
magic-string@0.30.11: magic-string@0.30.11:
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
matter-js@0.20.0:
resolution: {integrity: sha512-iC9fYR7zVT3HppNnsFsp9XOoQdQN2tUyfaKg4CHLH8bN+j6GT4Gw7IH2rP0tflAebrHFw730RR3DkVSZRX8hwA==}
memoize-one@6.0.0: memoize-one@6.0.0:
resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
@ -2843,6 +2849,8 @@ snapshots:
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
matter-js@0.20.0: {}
memoize-one@6.0.0: {} memoize-one@6.0.0: {}
merge-stream@2.0.0: {} merge-stream@2.0.0: {}

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

@ -14,6 +14,10 @@ const router = createRouter({
{ {
path: '/rating', path: '/rating',
component: () => import('@/views/rating/RatingPage.vue') component: () => import('@/views/rating/RatingPage.vue')
},
{
path: '/ball-race',
component: () => import('@/views/roll/BallRacePage.vue')
} }
] ]
}) })

@ -31,13 +31,21 @@
@change="updateScore" @change="updateScore"
/> />
<!-- 如果评分为 4 分以上显示幸运抽奖提示和按钮 -->
<div v-if="currentRating >= 4 && isRatingDisabled" class="lucky-draw">
<h3>你答得太好了触发了一次幸运抽奖</h3>
<el-button class="ax_default button" @click="triggerLuckyDraw">
<span class="button-text">开始幸运抽奖</span>
</el-button>
</div>
<!-- 再抽一次按钮 --> <!-- 再抽一次按钮 -->
<el-button <el-button
v-if="isRatingDisabled" v-if="isRatingDisabled"
class="ax_default button retry-button" class="ax_default button retry-button"
@click="goToRollCall" @click="goToRollCall"
> >
<span class="button-text">再抽一次</span> <span class="button-text">再抽一个人</span>
</el-button> </el-button>
</div> </div>
@ -88,7 +96,7 @@ const handleYesClick = () => {
// studentScore // studentScore
const updateScore = (value) => { const updateScore = (value) => {
// studentScore // studentScore
studentScore.value += value studentScore.value += value * 2
// //
isRatingDisabled.value = true isRatingDisabled.value = true
@ -151,6 +159,11 @@ const updateScoreMinus = () => {
const goToRollCall = () => { const goToRollCall = () => {
router.push('/roll-call') // /roll-call router.push('/roll-call') // /roll-call
} }
//
const triggerLuckyDraw = () => {
console.log('触发幸运抽奖')
router.push('/ball-race')
}
</script> </script>
<style scoped> <style scoped>

@ -0,0 +1,411 @@
<template>
<div class="container">
<!-- 左侧侧边栏 -->
<div class="sidebar">
<div class="exit-button">
<button @click="handleExit">退</button>
</div>
</div>
<!-- 其他内容 -->
<!-- 右侧物理世界 -->
<div class="main-content">
<canvas ref="canvas"></canvas>
</div>
</div>
</template>
<script setup>
import { onMounted, ref, reactive, watch } from 'vue'
import { useRouter } from 'vue-router'
import axios from 'axios'
import Matter from 'matter-js'
//
const messages = reactive([]) // 使 reactive
const stopNames = ref([
'何杰',
'马丽',
'王军',
'周强',
'张洋',
'黄娜',
'徐勇',
'杨伟',
'朱强',
'李辉',
'朱秀英',
'孙敏',
'郭敏',
'林涛',
'郭丽'
])
const stopIds = ref([])
const stopScores = ref([])
//
const router = useRouter()
// 退
const handleExit = () => {
// /roll-call
router.push('/roll-call')
}
// canvas
const canvas = ref(null)
onMounted(async () => {
// 使 axios
axios
.post('http://localhost:8080/get-N-accord-score', {
num: 15
})
.then((response) => {
console.log('接收的数据:', response.data)
//
response.data.data.forEach((item) => {
messages.push({
User_id: item.User_id,
User_name: item.User_name,
User_gender: item.User_gender,
User_score: item.User_score
})
})
console.log('保存的消息:', messages)
stopNames.value = response.data.data.map((item) => item.User_name)
stopIds.value = response.data.data.map((item) => item.User_id)
stopScores.value = response.data.data.map((item) => item.User_score)
// stopNames
console.log('更新的 stopNames:', stopNames.value)
console.log('更新的 stopIds:', stopIds.value)
console.log('更新的 stopScores:', stopScores.value)
})
.catch((error) => {
console.error('获取数据出错:', error)
})
// Matter.js
const { Engine, Render, Runner, Bodies, Composite, Events } = Matter
const myInnerWidth = 1900
const myInnerHeight = 891
//
const engine = Engine.create()
// canvas
const render = Render.create({
element: canvas.value.parentNode, //
canvas: canvas.value, // canvas
engine: engine,
options: {
width: myInnerWidth - 250, //
height: myInnerHeight,
wireframes: false, // 线使
background: '#f4f4f4'
}
})
//
const ground = Bodies.rectangle(
myInnerWidth / 2,
myInnerHeight,
myInnerWidth,
50,
{
isStatic: true,
render: {
fillStyle: '#2ecc71'
}
}
)
const floor = Bodies.rectangle(myInnerWidth / 2, -30, myInnerWidth, 50, {
isStatic: true,
render: {
fillStyle: '#2ecc71'
}
})
//
const leftWall = Bodies.rectangle(0, myInnerHeight / 2, 50, myInnerHeight, {
isStatic: true,
render: {
fillStyle: '#2c3e50'
}
})
//
const rightWall = Bodies.rectangle(
myInnerWidth - 250,
myInnerHeight / 2,
50,
myInnerHeight,
{
isStatic: true,
render: {
fillStyle: '#2c3e50' //
}
}
)
//
function getRandomColor() {
const letters = '0123456789ABCDEF'
let color = '#'
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)]
}
return color
}
// stopNames userIds user_score
const balls = []
watch([stopNames, stopIds, stopScores], ([newNames, newIds, newScores]) => {
//
balls.length = 0
// stopNames
newNames.forEach((name, i) => {
const ball = Bodies.circle(Math.random() * (myInnerWidth - 250), 0, 25, {
restitution: 1.1, //
render: {
fillStyle: getRandomColor() // 使
}
})
ball.name = name //
ball.user_id = newIds[i] // user_id
ball.user_score = newScores[i] // user_score
balls.push(ball)
})
//
Composite.add(engine.world, balls)
})
//
const obstacles = []
const cols = 10 //
const rows = 8 //
const spacingX = (myInnerWidth - 150) / (cols + 1) // X
const spacingY = myInnerHeight / 1 / (rows + 1) // Y
for (let row = 1; row <= rows; row++) {
//
const offsetX = row % 2 === 0 ? spacingX / 2 : 0
//
if (row % 2 === 0) {
const extraLeftObstacle = Bodies.circle(
spacingX / 2 - 50, // X
row * spacingY + 30, // Y
30, //
{
isStatic: true,
render: {
fillStyle: '#2c3e50' //
}
}
)
obstacles.push(extraLeftObstacle) //
}
for (let col = 1; col <= cols; col++) {
const obstacle = Bodies.circle(
col * spacingX + offsetX - 50, // X
row * spacingY + 30, // Y 200px
30, //
{
isStatic: true,
render: {
fillStyle: '#2c3e50' //
}
}
)
obstacles.push(obstacle)
}
}
//
const areas = []
const separatorWidth = 15 //
const areaNumbers = [] //
for (let col = 1; col <= cols; col++) {
let randomNum
do {
randomNum = Math.floor(Math.random() * 11) - 5 // -5 1
} while (randomNum === 0) // 0
const formattedNum = randomNum > 0 ? `+${randomNum}` : `${randomNum}` // -5 5 +
areaNumbers.push(formattedNum)
const area = Bodies.rectangle(
col * spacingX - 50, // X
myInnerHeight - 40, // Y
spacingX - separatorWidth, //
20, //
{
isStatic: true,
isSensor: true, //
label: `Area ${col}`, //
render: {
fillStyle: 'rgba(52, 73, 94, 0.3)' //
}
}
)
area.number = formattedNum //
area.score = randomNum
areas.push(area)
}
//
Composite.add(engine.world, [
...balls,
ground,
floor,
leftWall,
rightWall,
...obstacles,
...areas
])
//
Events.on(engine, 'collisionStart', (event) => {
const pairs = event.pairs
pairs.forEach((pair) => {
const { bodyA, bodyB } = pair
//
if (bodyA.isSensor && balls.includes(bodyB)) {
let newscore = bodyA.score + bodyB.user_score
console.log(
`Ball entered ${bodyA.label}, Score: ${bodyA.score}, Ball Name: ${bodyB.name}, Ball Id: ${bodyB.user_id}, Ball Score: ${bodyB.user_score}, newScore: ${newscore}`
)
const data = JSON.stringify({
user_id: bodyB.user_id,
user_score: newscore
})
// config
var config = {
method: 'post',
url: 'http://localhost:8080/change-score',
data: data
}
// POST
axios(config)
.then((response) => {
console.log('数据成功发送到后端:', response.data)
})
.catch((error) => {
console.error('发送数据到后端时出错:', error)
})
const sidebar = document.querySelector('.sidebar')
const entry = document.createElement('div')
entry.textContent = `${bodyB.name} 分数:${bodyA.number}`
sidebar.appendChild(entry)
Composite.remove(engine.world, bodyB) //
} else if (bodyB.isSensor && balls.includes(bodyA)) {
console.log(
`Ball entered ${bodyB.label}, Score: ${bodyB.score}, Ball Name: ${bodyA.name}`
)
const sidebar = document.querySelector('.sidebar')
const entry = document.createElement('div')
entry.textContent = `${bodyA.name} 分数:${bodyB.number}`
sidebar.appendChild(entry)
Composite.remove(engine.world, bodyA) //
}
})
})
//
Matter.Events.on(render, 'afterRender', () => {
const context = render.context
context.font = '20px Arial'
context.fillStyle = '#000'
//
balls.forEach((ball) => {
const { position } = ball
context.fillText(ball.name, position.x - 20, position.y - 30) //
})
//
areas.forEach((area) => {
const { position } = area
context.font = 'bold 24px Arial'
context.fillStyle = area.number > 0 ? 'green' : 'red'
context.fillText(area.number, position.x - 10, position.y - 10) //
})
})
//
Engine.run(engine)
//
Render.run(render)
//
const runner = Runner.create()
Runner.run(runner, engine)
})
</script>
<style scoped>
/* 页面总体布局:使用 Flexbox 布局 */
.container {
display: flex;
height: 100vh;
}
/* 左侧边栏样式 */
.sidebar {
width: 240px;
background-color: #2c3e50;
color: #ecf0f1;
padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.sidebar h2 {
margin-top: 0;
}
.sidebar ul {
padding: 0;
list-style-type: none;
}
.sidebar ul li {
margin: 15px 0;
cursor: pointer;
}
.sidebar ul li:hover {
color: #1abc9c;
}
.exit-button {
text-align: center;
}
.exit-button button {
background-color: #e74c3c;
color: #ecf0f1;
border: none;
padding: 10px 20px;
cursor: pointer;
font-size: 16px;
}
.exit-button button:hover {
background-color: #c0392b;
}
/* 右侧主内容区样式 */
.main-content {
flex: 1;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
/* canvas 样式,用于控制显示 */
canvas {
background-color: #f4f4f4;
display: block;
}
</style>
Loading…
Cancel
Save