diff --git a/front-end/.gitignore b/front-end/.gitignore index 8ee54e8..3c3629e 100644 --- a/front-end/.gitignore +++ b/front-end/.gitignore @@ -1,30 +1 @@ -# 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 diff --git a/front-end/.vite/deps/_metadata.json b/front-end/.vite/deps/_metadata.json index f51ca1e..2786abc 100644 --- a/front-end/.vite/deps/_metadata.json +++ b/front-end/.vite/deps/_metadata.json @@ -1,40 +1,8 @@ { - "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" - } - } + "hash": "f2cd6171", + "configHash": "c345b98b", + "lockfileHash": "e3b0c442", + "browserHash": "f7fdce36", + "optimized": {}, + "chunks": {} } \ No newline at end of file diff --git a/front-end/.vscode/settings.json b/front-end/.vscode/settings.json new file mode 100644 index 0000000..0ecacd0 --- /dev/null +++ b/front-end/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll": "explicit" + }, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" +} diff --git a/front-end/back-end/config.yaml b/front-end/back-end/config.yaml new file mode 100644 index 0000000..273cb5f --- /dev/null +++ b/front-end/back-end/config.yaml @@ -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 + + + diff --git a/front-end/back-end/controllers/export.go b/front-end/back-end/controllers/export.go new file mode 100644 index 0000000..99f2788 --- /dev/null +++ b/front-end/back-end/controllers/export.go @@ -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) +} diff --git a/front-end/back-end/controllers/import.go b/front-end/back-end/controllers/import.go new file mode 100644 index 0000000..44a7b37 --- /dev/null +++ b/front-end/back-end/controllers/import.go @@ -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) +} diff --git a/front-end/back-end/controllers/roll.go b/front-end/back-end/controllers/roll.go new file mode 100644 index 0000000..d3843f5 --- /dev/null +++ b/front-end/back-end/controllers/roll.go @@ -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) +} diff --git a/front-end/back-end/controllers/trace.go b/front-end/back-end/controllers/trace.go new file mode 100644 index 0000000..920789a --- /dev/null +++ b/front-end/back-end/controllers/trace.go @@ -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.") +// }() +// } diff --git a/front-end/back-end/dao/mysql/import.go b/front-end/back-end/dao/mysql/import.go new file mode 100644 index 0000000..4c0ef1b --- /dev/null +++ b/front-end/back-end/dao/mysql/import.go @@ -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 +} diff --git a/front-end/back-end/dao/mysql/init.sql b/front-end/back-end/dao/mysql/init.sql new file mode 100644 index 0000000..cb33b8d --- /dev/null +++ b/front-end/back-end/dao/mysql/init.sql @@ -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; \ No newline at end of file diff --git a/front-end/back-end/dao/mysql/mysql.go b/front-end/back-end/dao/mysql/mysql.go new file mode 100644 index 0000000..93e3956 --- /dev/null +++ b/front-end/back-end/dao/mysql/mysql.go @@ -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() +} diff --git a/front-end/back-end/dao/mysql/roll.go b/front-end/back-end/dao/mysql/roll.go new file mode 100644 index 0000000..6967825 --- /dev/null +++ b/front-end/back-end/dao/mysql/roll.go @@ -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 +} diff --git a/front-end/back-end/dao/redis/redis.go b/front-end/back-end/dao/redis/redis.go new file mode 100644 index 0000000..da8631d --- /dev/null +++ b/front-end/back-end/dao/redis/redis.go @@ -0,0 +1,3 @@ +package redis + +// 暂时不用 diff --git a/front-end/back-end/document/20241010171749.xlsx b/front-end/back-end/document/20241010171749.xlsx new file mode 100644 index 0000000..91c221b Binary files /dev/null and b/front-end/back-end/document/20241010171749.xlsx differ diff --git a/front-end/back-end/document/20241010172203.xlsx b/front-end/back-end/document/20241010172203.xlsx new file mode 100644 index 0000000..9824b10 Binary files /dev/null and b/front-end/back-end/document/20241010172203.xlsx differ diff --git a/front-end/back-end/document/20241011161101.xlsx b/front-end/back-end/document/20241011161101.xlsx new file mode 100644 index 0000000..dd01fc8 Binary files /dev/null and b/front-end/back-end/document/20241011161101.xlsx differ diff --git a/front-end/back-end/document/20241011165252.xlsx b/front-end/back-end/document/20241011165252.xlsx new file mode 100644 index 0000000..5bf00bb Binary files /dev/null and b/front-end/back-end/document/20241011165252.xlsx differ diff --git a/front-end/back-end/document/20241011165513.xlsx b/front-end/back-end/document/20241011165513.xlsx new file mode 100644 index 0000000..5bf00bb Binary files /dev/null and b/front-end/back-end/document/20241011165513.xlsx differ diff --git a/front-end/back-end/document/20241011170329.xlsx b/front-end/back-end/document/20241011170329.xlsx new file mode 100644 index 0000000..4e9ffa3 Binary files /dev/null and b/front-end/back-end/document/20241011170329.xlsx differ diff --git a/front-end/back-end/document/20241011170602.xlsx b/front-end/back-end/document/20241011170602.xlsx new file mode 100644 index 0000000..4e9ffa3 Binary files /dev/null and b/front-end/back-end/document/20241011170602.xlsx differ diff --git a/front-end/back-end/document/20241011172205.xlsx b/front-end/back-end/document/20241011172205.xlsx new file mode 100644 index 0000000..4e9ffa3 Binary files /dev/null and b/front-end/back-end/document/20241011172205.xlsx differ diff --git a/front-end/back-end/document/20241011172624.xlsx b/front-end/back-end/document/20241011172624.xlsx new file mode 100644 index 0000000..c7ef11f Binary files /dev/null and b/front-end/back-end/document/20241011172624.xlsx differ diff --git a/front-end/back-end/document/20241011172625.xlsx b/front-end/back-end/document/20241011172625.xlsx new file mode 100644 index 0000000..c7ef11f Binary files /dev/null and b/front-end/back-end/document/20241011172625.xlsx differ diff --git a/front-end/back-end/document/20241011172643.xlsx b/front-end/back-end/document/20241011172643.xlsx new file mode 100644 index 0000000..c7ef11f Binary files /dev/null and b/front-end/back-end/document/20241011172643.xlsx differ diff --git a/front-end/back-end/document/20241011173831.xlsx b/front-end/back-end/document/20241011173831.xlsx new file mode 100644 index 0000000..c7ef11f Binary files /dev/null and b/front-end/back-end/document/20241011173831.xlsx differ diff --git a/front-end/back-end/document/20241011173832.xlsx b/front-end/back-end/document/20241011173832.xlsx new file mode 100644 index 0000000..c7ef11f Binary files /dev/null and b/front-end/back-end/document/20241011173832.xlsx differ diff --git a/front-end/back-end/document/20241011174126.xlsx b/front-end/back-end/document/20241011174126.xlsx new file mode 100644 index 0000000..af4642c Binary files /dev/null and b/front-end/back-end/document/20241011174126.xlsx differ diff --git a/front-end/back-end/document/20241011174138.xlsx b/front-end/back-end/document/20241011174138.xlsx new file mode 100644 index 0000000..25fd121 Binary files /dev/null and b/front-end/back-end/document/20241011174138.xlsx differ diff --git a/front-end/back-end/document/test.xlsx b/front-end/back-end/document/test.xlsx new file mode 100644 index 0000000..d6c3333 Binary files /dev/null and b/front-end/back-end/document/test.xlsx differ diff --git a/front-end/back-end/go.mod b/front-end/back-end/go.mod new file mode 100644 index 0000000..202503b --- /dev/null +++ b/front-end/back-end/go.mod @@ -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 +) diff --git a/front-end/back-end/go.sum b/front-end/back-end/go.sum new file mode 100644 index 0000000..ab11bf5 --- /dev/null +++ b/front-end/back-end/go.sum @@ -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= diff --git a/front-end/back-end/logger.log b/front-end/back-end/logger.log new file mode 100644 index 0000000..5578cc0 --- /dev/null +++ b/front-end/back-end/logger.log @@ -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 diff --git a/front-end/back-end/logger/logger.go b/front-end/back-end/logger/logger.go new file mode 100644 index 0000000..4b79d50 --- /dev/null +++ b/front-end/back-end/logger/logger.go @@ -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() + } +} diff --git a/front-end/back-end/logic/export.go b/front-end/back-end/logic/export.go new file mode 100644 index 0000000..265df14 --- /dev/null +++ b/front-end/back-end/logic/export.go @@ -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 +} diff --git a/front-end/back-end/logic/import.go b/front-end/back-end/logic/import.go new file mode 100644 index 0000000..ccdf88b --- /dev/null +++ b/front-end/back-end/logic/import.go @@ -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) +} diff --git a/front-end/back-end/logic/roll.go b/front-end/back-end/logic/roll.go new file mode 100644 index 0000000..8752c92 --- /dev/null +++ b/front-end/back-end/logic/roll.go @@ -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 +} diff --git a/front-end/back-end/main.exe b/front-end/back-end/main.exe new file mode 100644 index 0000000..5343f35 Binary files /dev/null and b/front-end/back-end/main.exe differ diff --git a/front-end/back-end/main.go b/front-end/back-end/main.go new file mode 100644 index 0000000..a552b9a --- /dev/null +++ b/front-end/back-end/main.go @@ -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) + }() + } +} diff --git a/front-end/back-end/middlewares/cors.go b/front-end/back-end/middlewares/cors.go new file mode 100644 index 0000000..14c0813 --- /dev/null +++ b/front-end/back-end/middlewares/cors.go @@ -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() + } +} diff --git a/front-end/back-end/models/param.go b/front-end/back-end/models/param.go new file mode 100644 index 0000000..3e2a39e --- /dev/null +++ b/front-end/back-end/models/param.go @@ -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"` +} diff --git a/front-end/back-end/models/student.go b/front-end/back-end/models/student.go new file mode 100644 index 0000000..a2c5d46 --- /dev/null +++ b/front-end/back-end/models/student.go @@ -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 +} diff --git a/front-end/back-end/pkg/gfsd/gfsd.go b/front-end/back-end/pkg/gfsd/gfsd.go new file mode 100644 index 0000000..960d3a6 --- /dev/null +++ b/front-end/back-end/pkg/gfsd/gfsd.go @@ -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") +} diff --git a/front-end/back-end/pkg/snowflake/snowflake.go b/front-end/back-end/pkg/snowflake/snowflake.go new file mode 100644 index 0000000..de94151 --- /dev/null +++ b/front-end/back-end/pkg/snowflake/snowflake.go @@ -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) +// } diff --git a/front-end/back-end/pkg/vt/validator.go b/front-end/back-end/pkg/vt/validator.go new file mode 100644 index 0000000..9117537 --- /dev/null +++ b/front-end/back-end/pkg/vt/validator.go @@ -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") +// } +// } diff --git a/front-end/back-end/routes/routes.go b/front-end/back-end/routes/routes.go new file mode 100644 index 0000000..22b30a8 --- /dev/null +++ b/front-end/back-end/routes/routes.go @@ -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 +} diff --git a/front-end/back-end/settings/settings.go b/front-end/back-end/settings/settings.go new file mode 100644 index 0000000..4a0dc3e --- /dev/null +++ b/front-end/back-end/settings/settings.go @@ -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 +} diff --git a/front-end/back-end/test/import_test.go b/front-end/back-end/test/import_test.go new file mode 100644 index 0000000..1a057ee --- /dev/null +++ b/front-end/back-end/test/import_test.go @@ -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() +} diff --git a/front-end/back-end/test/roll_test.go b/front-end/back-end/test/roll_test.go new file mode 100644 index 0000000..ad46b91 --- /dev/null +++ b/front-end/back-end/test/roll_test.go @@ -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) +} diff --git a/front-end/back-end/utils/code.go b/front-end/back-end/utils/code.go new file mode 100644 index 0000000..a49f75e --- /dev/null +++ b/front-end/back-end/utils/code.go @@ -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 +} diff --git a/front-end/back-end/utils/error_code.go b/front-end/back-end/utils/error_code.go new file mode 100644 index 0000000..2509606 --- /dev/null +++ b/front-end/back-end/utils/error_code.go @@ -0,0 +1,9 @@ +package utils + +import "errors" + +var ( + ErrorStuInfoEmpty = errors.New("学生信息为空") + ErrorInvalidStuId = errors.New("学生学号错误") + ErrorBeyondNum = errors.New("请求数量过多") +) diff --git a/front-end/back-end/utils/response.go b/front-end/back-end/utils/response.go new file mode 100644 index 0000000..d499c5a --- /dev/null +++ b/front-end/back-end/utils/response.go @@ -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, + }) +} diff --git a/front-end/.eslintrc.cjs b/front-end/front-end/.eslintrc.cjs similarity index 100% rename from front-end/.eslintrc.cjs rename to front-end/front-end/.eslintrc.cjs diff --git a/front-end/front-end/.gitignore b/front-end/front-end/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/front-end/front-end/.gitignore @@ -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 diff --git a/front-end/.husky/pre-commit b/front-end/front-end/.husky/pre-commit similarity index 100% rename from front-end/.husky/pre-commit rename to front-end/front-end/.husky/pre-commit diff --git a/front-end/.prettierrc.json b/front-end/front-end/.prettierrc.json similarity index 100% rename from front-end/.prettierrc.json rename to front-end/front-end/.prettierrc.json diff --git a/front-end/front-end/.vite/deps/_metadata.json b/front-end/front-end/.vite/deps/_metadata.json new file mode 100644 index 0000000..f51ca1e --- /dev/null +++ b/front-end/front-end/.vite/deps/_metadata.json @@ -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" + } + } +} \ No newline at end of file diff --git a/front-end/.vite/deps/chunk-BPR5FKHA.js b/front-end/front-end/.vite/deps/chunk-BPR5FKHA.js similarity index 100% rename from front-end/.vite/deps/chunk-BPR5FKHA.js rename to front-end/front-end/.vite/deps/chunk-BPR5FKHA.js diff --git a/front-end/.vite/deps/chunk-BPR5FKHA.js.map b/front-end/front-end/.vite/deps/chunk-BPR5FKHA.js.map similarity index 100% rename from front-end/.vite/deps/chunk-BPR5FKHA.js.map rename to front-end/front-end/.vite/deps/chunk-BPR5FKHA.js.map diff --git a/front-end/.vite/deps/chunk-UGVUZKZS.js b/front-end/front-end/.vite/deps/chunk-UGVUZKZS.js similarity index 100% rename from front-end/.vite/deps/chunk-UGVUZKZS.js rename to front-end/front-end/.vite/deps/chunk-UGVUZKZS.js diff --git a/front-end/.vite/deps/chunk-UGVUZKZS.js.map b/front-end/front-end/.vite/deps/chunk-UGVUZKZS.js.map similarity index 100% rename from front-end/.vite/deps/chunk-UGVUZKZS.js.map rename to front-end/front-end/.vite/deps/chunk-UGVUZKZS.js.map diff --git a/front-end/front-end/.vite/deps/package.json b/front-end/front-end/.vite/deps/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/front-end/front-end/.vite/deps/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/front-end/.vite/deps/pinia-plugin-persistedstate.js b/front-end/front-end/.vite/deps/pinia-plugin-persistedstate.js similarity index 100% rename from front-end/.vite/deps/pinia-plugin-persistedstate.js rename to front-end/front-end/.vite/deps/pinia-plugin-persistedstate.js diff --git a/front-end/.vite/deps/pinia-plugin-persistedstate.js.map b/front-end/front-end/.vite/deps/pinia-plugin-persistedstate.js.map similarity index 100% rename from front-end/.vite/deps/pinia-plugin-persistedstate.js.map rename to front-end/front-end/.vite/deps/pinia-plugin-persistedstate.js.map diff --git a/front-end/.vite/deps/pinia.js b/front-end/front-end/.vite/deps/pinia.js similarity index 100% rename from front-end/.vite/deps/pinia.js rename to front-end/front-end/.vite/deps/pinia.js diff --git a/front-end/.vite/deps/pinia.js.map b/front-end/front-end/.vite/deps/pinia.js.map similarity index 100% rename from front-end/.vite/deps/pinia.js.map rename to front-end/front-end/.vite/deps/pinia.js.map diff --git a/front-end/.vite/deps/vue-router.js b/front-end/front-end/.vite/deps/vue-router.js similarity index 100% rename from front-end/.vite/deps/vue-router.js rename to front-end/front-end/.vite/deps/vue-router.js diff --git a/front-end/.vite/deps/vue-router.js.map b/front-end/front-end/.vite/deps/vue-router.js.map similarity index 100% rename from front-end/.vite/deps/vue-router.js.map rename to front-end/front-end/.vite/deps/vue-router.js.map diff --git a/front-end/.vite/deps/vue.js b/front-end/front-end/.vite/deps/vue.js similarity index 100% rename from front-end/.vite/deps/vue.js rename to front-end/front-end/.vite/deps/vue.js diff --git a/front-end/.vite/deps/vue.js.map b/front-end/front-end/.vite/deps/vue.js.map similarity index 100% rename from front-end/.vite/deps/vue.js.map rename to front-end/front-end/.vite/deps/vue.js.map diff --git a/front-end/.vscode/extensions.json b/front-end/front-end/.vscode/extensions.json similarity index 100% rename from front-end/.vscode/extensions.json rename to front-end/front-end/.vscode/extensions.json diff --git a/front-end/README.md b/front-end/front-end/README.md similarity index 100% rename from front-end/README.md rename to front-end/front-end/README.md diff --git a/front-end/index.html b/front-end/front-end/index.html similarity index 100% rename from front-end/index.html rename to front-end/front-end/index.html diff --git a/front-end/jsconfig.json b/front-end/front-end/jsconfig.json similarity index 100% rename from front-end/jsconfig.json rename to front-end/front-end/jsconfig.json diff --git a/front-end/package.json b/front-end/front-end/package.json similarity index 100% rename from front-end/package.json rename to front-end/front-end/package.json diff --git a/front-end/pnpm-lock.yaml b/front-end/front-end/pnpm-lock.yaml similarity index 100% rename from front-end/pnpm-lock.yaml rename to front-end/front-end/pnpm-lock.yaml diff --git a/front-end/public/favicon.ico b/front-end/front-end/public/favicon.ico similarity index 100% rename from front-end/public/favicon.ico rename to front-end/front-end/public/favicon.ico diff --git a/front-end/src/App.vue b/front-end/front-end/src/App.vue similarity index 100% rename from front-end/src/App.vue rename to front-end/front-end/src/App.vue diff --git a/front-end/src/assets/image.png b/front-end/front-end/src/assets/image.png similarity index 100% rename from front-end/src/assets/image.png rename to front-end/front-end/src/assets/image.png diff --git a/front-end/src/components/scrollingNumber.vue b/front-end/front-end/src/components/scrollingNumber.vue similarity index 100% rename from front-end/src/components/scrollingNumber.vue rename to front-end/front-end/src/components/scrollingNumber.vue diff --git a/front-end/src/main.js b/front-end/front-end/src/main.js similarity index 100% rename from front-end/src/main.js rename to front-end/front-end/src/main.js diff --git a/front-end/src/mock/upload.js b/front-end/front-end/src/mock/upload.js similarity index 100% rename from front-end/src/mock/upload.js rename to front-end/front-end/src/mock/upload.js diff --git a/front-end/src/router/index.js b/front-end/front-end/src/router/index.js similarity index 100% rename from front-end/src/router/index.js rename to front-end/front-end/src/router/index.js diff --git a/front-end/src/stores/user.js b/front-end/front-end/src/stores/user.js similarity index 100% rename from front-end/src/stores/user.js rename to front-end/front-end/src/stores/user.js diff --git a/front-end/src/utils/request.js b/front-end/front-end/src/utils/request.js similarity index 100% rename from front-end/src/utils/request.js rename to front-end/front-end/src/utils/request.js diff --git a/front-end/src/views/rating/RatingPage.vue b/front-end/front-end/src/views/rating/RatingPage.vue similarity index 100% rename from front-end/src/views/rating/RatingPage.vue rename to front-end/front-end/src/views/rating/RatingPage.vue diff --git a/front-end/src/views/roll/BallRacePage.vue b/front-end/front-end/src/views/roll/BallRacePage.vue similarity index 100% rename from front-end/src/views/roll/BallRacePage.vue rename to front-end/front-end/src/views/roll/BallRacePage.vue diff --git a/front-end/src/views/roll/RollCallPage.vue b/front-end/front-end/src/views/roll/RollCallPage.vue similarity index 100% rename from front-end/src/views/roll/RollCallPage.vue rename to front-end/front-end/src/views/roll/RollCallPage.vue diff --git a/front-end/src/views/upload/UploadFilePage.vue b/front-end/front-end/src/views/upload/UploadFilePage.vue similarity index 100% rename from front-end/src/views/upload/UploadFilePage.vue rename to front-end/front-end/src/views/upload/UploadFilePage.vue diff --git a/front-end/vite.config.js b/front-end/front-end/vite.config.js similarity index 100% rename from front-end/vite.config.js rename to front-end/front-end/vite.config.js