This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/answer.git


The following commit(s) were added to refs/heads/dev by this push:
     new f723d120 feat: add golangci-lint into lint target
f723d120 is described below

commit f723d120d924dcf7e65b969ce18f8111cac40343
Author: ferhat elmas <[email protected]>
AuthorDate: Fri Nov 28 23:11:57 2025 +0100

    feat: add golangci-lint into lint target
    
    * replace empty interface with any
    * run fmt via golangci-lint
    
    related to #1432
    
    Signed-off-by: ferhat elmas <[email protected]>
---
 .gitignore                                         |  2 +-
 .golangci.yaml                                     | 30 ++++++++++++++++++++++
 Makefile                                           | 17 ++++++++++--
 docs/docs.go                                       |  7 ++---
 docs/swagger.json                                  |  7 ++---
 docs/swagger.yaml                                  |  6 ++---
 internal/base/handler/handler.go                   |  6 ++---
 internal/base/handler/response.go                  |  4 +--
 internal/base/pager/pager.go                       |  2 +-
 internal/base/pager/pagination.go                  |  6 ++---
 internal/base/server/http_funcmap.go               |  6 ++---
 internal/base/translator/provider.go               |  8 +++---
 internal/base/validator/validator.go               |  4 +--
 internal/install/install_from_env.go               |  2 +-
 internal/migrations/init.go                        | 10 ++++----
 internal/migrations/init_data.go                   |  2 +-
 internal/migrations/v25.go                         |  2 +-
 internal/migrations/v6.go                          |  2 +-
 internal/repo/meta/meta_repo.go                    |  2 +-
 .../repo/plugin_config/plugin_user_config_repo.go  |  2 +-
 internal/repo/revision/revision_repo.go            |  2 +-
 internal/repo/role/user_role_rel_repo.go           |  2 +-
 internal/repo/search_common/search_repo.go         | 26 +++++++++----------
 internal/repo/user/user_repo.go                    |  2 +-
 internal/schema/question_schema.go                 | 28 ++++++++++----------
 internal/schema/revision_schema.go                 |  2 +-
 internal/schema/siteinfo_schema.go                 | 14 +++++-----
 internal/schema/user_schema.go                     |  2 +-
 internal/service/question_common/question.go       |  2 +-
 internal/service/siteinfo/siteinfo_service.go      |  2 +-
 .../service/siteinfo_common/siteinfo_service.go    |  4 +--
 pkg/converter/str.go                               |  2 +-
 32 files changed, 125 insertions(+), 90 deletions(-)

diff --git a/.gitignore b/.gitignore
index 1fc116a7..257ef31d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,7 +28,7 @@ vendor/
 /answer-data/
 /answer
 /new_answer
-
+build/tools/
 dist/
 
 # Lint setup generated file
diff --git a/.golangci.yaml b/.golangci.yaml
new file mode 100644
index 00000000..af00efc3
--- /dev/null
+++ b/.golangci.yaml
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+version: "2"
+linters:
+  default: none
+
+formatters:
+  enable:
+    - gofmt
+  settings:
+    gofmt:
+      simplify: true
+      rewrite-rules:
+        - pattern: 'interface{}'
+          replacement: 'any'
diff --git a/Makefile b/Makefile
index 8ab23cce..fd3f044f 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,15 @@ Revision=$(shell git rev-parse --short HEAD 2>/dev/null || 
echo "")
 GO_FLAGS=-ldflags="-X github.com/apache/answer/cmd.Version=$(VERSION) -X 
'github.com/apache/answer/cmd.Revision=$(Revision)' -X 
'github.com/apache/answer/cmd.Time=`date +%s`' -extldflags -static"
 GO=$(GO_ENV) "$(shell which go)"
 
+GOLANGCI_VERSION ?= v2.6.2
+TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools)
+
+GOLANGCI = $(TOOLS_BIN)/golangci-lint-$(GOLANGCI_VERSION)
+$(GOLANGCI):
+       rm -f $(TOOLS_BIN)/golangci-lint*
+       curl -sSfL 
https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_VERSION)/install.sh
 | sh -s -- -b $(TOOLS_BIN) $(GOLANGCI_VERSION)
+       mv $(TOOLS_BIN)/golangci-lint 
$(TOOLS_BIN)/golangci-lint-$(GOLANGCI_VERSION)
+
 build: generate
        @$(GO) build $(GO_FLAGS) -o $(BIN) $(DIR_SRC)
 
@@ -50,8 +59,12 @@ install-ui-packages:
 ui:
        @cd ui && pnpm pre-install && pnpm build && cd -
 
-lint: generate
+lint: generate $(GOLANGCI)
+       @bash ./script/check-asf-header.sh
+       $(GOLANGCI) run
+
+lint-fix: generate $(GOLANGCI)
        @bash ./script/check-asf-header.sh
-       @gofmt -w -l .
+       $(GOLANGCI) run --fix
 
 all: clean build
diff --git a/docs/docs.go b/docs/docs.go
index c8731391..5e9d5b39 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -8080,9 +8080,6 @@ const docTemplate = `{
                 "id": {
                     "type": "string"
                 },
-                "question_id": {
-                    "type": "string"
-                },
                 "title": {
                     "type": "string"
                 }
@@ -10920,7 +10917,7 @@ const docTemplate = `{
                 },
                 "theme_config": {
                     "type": "object",
-                    "additionalProperties": true
+                    "additionalProperties": {}
                 }
             }
         },
@@ -10935,7 +10932,7 @@ const docTemplate = `{
                 },
                 "theme_config": {
                     "type": "object",
-                    "additionalProperties": true
+                    "additionalProperties": {}
                 },
                 "theme_options": {
                     "type": "array",
diff --git a/docs/swagger.json b/docs/swagger.json
index 9f89cb15..e0f6378e 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -8053,9 +8053,6 @@
                 "id": {
                     "type": "string"
                 },
-                "question_id": {
-                    "type": "string"
-                },
                 "title": {
                     "type": "string"
                 }
@@ -10893,7 +10890,7 @@
                 },
                 "theme_config": {
                     "type": "object",
-                    "additionalProperties": true
+                    "additionalProperties": {}
                 }
             }
         },
@@ -10908,7 +10905,7 @@
                 },
                 "theme_config": {
                     "type": "object",
-                    "additionalProperties": true
+                    "additionalProperties": {}
                 },
                 "theme_options": {
                     "type": "array",
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index d2dd076c..e0244083 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -399,8 +399,6 @@ definitions:
         type: string
       id:
         type: string
-      question_id:
-        type: string
       title:
         type: string
     required:
@@ -2364,7 +2362,7 @@ definitions:
         maxLength: 255
         type: string
       theme_config:
-        additionalProperties: true
+        additionalProperties: {}
         type: object
     required:
     - theme
@@ -2376,7 +2374,7 @@ definitions:
       theme:
         type: string
       theme_config:
-        additionalProperties: true
+        additionalProperties: {}
         type: object
       theme_options:
         items:
diff --git a/internal/base/handler/handler.go b/internal/base/handler/handler.go
index 7670feea..5a4961a3 100644
--- a/internal/base/handler/handler.go
+++ b/internal/base/handler/handler.go
@@ -31,7 +31,7 @@ import (
 )
 
 // HandleResponse Handle response body
-func HandleResponse(ctx *gin.Context, err error, data interface{}) {
+func HandleResponse(ctx *gin.Context, err error, data any) {
        lang := GetLang(ctx)
        // no error
        if err == nil {
@@ -61,7 +61,7 @@ func HandleResponse(ctx *gin.Context, err error, data 
interface{}) {
 }
 
 // BindAndCheck bind request and check
-func BindAndCheck(ctx *gin.Context, data interface{}) bool {
+func BindAndCheck(ctx *gin.Context, data any) bool {
        lang := GetLang(ctx)
        ctx.Set(constant.AcceptLanguageFlag, lang)
        if err := ctx.ShouldBind(data); err != nil {
@@ -79,7 +79,7 @@ func BindAndCheck(ctx *gin.Context, data interface{}) bool {
 }
 
 // BindAndCheckReturnErr bind request and check
-func BindAndCheckReturnErr(ctx *gin.Context, data interface{}) (errFields 
[]*validator.FormErrorField) {
+func BindAndCheckReturnErr(ctx *gin.Context, data any) (errFields 
[]*validator.FormErrorField) {
        lang := GetLang(ctx)
        if err := ctx.ShouldBind(data); err != nil {
                log.Errorf("http_handle BindAndCheck fail, %s", err.Error())
diff --git a/internal/base/handler/response.go 
b/internal/base/handler/response.go
index 827e0b36..51be8a8a 100644
--- a/internal/base/handler/response.go
+++ b/internal/base/handler/response.go
@@ -34,7 +34,7 @@ type RespBody struct {
        // response message
        Message string `json:"msg"`
        // response data
-       Data interface{} `json:"data"`
+       Data any `json:"data"`
 }
 
 // TrMsg translate the reason cause as a message
@@ -63,7 +63,7 @@ func NewRespBodyFromError(e *errors.Error) *RespBody {
 }
 
 // NewRespBodyData new response body with data
-func NewRespBodyData(code int, reason string, data interface{}) *RespBody {
+func NewRespBodyData(code int, reason string, data any) *RespBody {
        return &RespBody{
                Code:   code,
                Reason: reason,
diff --git a/internal/base/pager/pager.go b/internal/base/pager/pager.go
index d7a4caa1..b14d99bf 100644
--- a/internal/base/pager/pager.go
+++ b/internal/base/pager/pager.go
@@ -27,7 +27,7 @@ import (
 )
 
 // Help xorm page helper
-func Help(page, pageSize int, rowsSlicePtr interface{}, rowElement 
interface{}, session *xorm.Session) (total int64, err error) {
+func Help(page, pageSize int, rowsSlicePtr any, rowElement any, session 
*xorm.Session) (total int64, err error) {
        page, pageSize = ValPageAndPageSize(page, pageSize)
 
        sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr))
diff --git a/internal/base/pager/pagination.go 
b/internal/base/pager/pagination.go
index 36849fed..1b09e1f2 100644
--- a/internal/base/pager/pagination.go
+++ b/internal/base/pager/pagination.go
@@ -25,8 +25,8 @@ import (
 
 // PageModel page model
 type PageModel struct {
-       Count int64       `json:"count"`
-       List  interface{} `json:"list"`
+       Count int64 `json:"count"`
+       List  any   `json:"list"`
 }
 
 // PageCond page condition
@@ -36,7 +36,7 @@ type PageCond struct {
 }
 
 // NewPageModel new page model
-func NewPageModel(totalRecords int64, records interface{}) *PageModel {
+func NewPageModel(totalRecords int64, records any) *PageModel {
        sliceValue := reflect.Indirect(reflect.ValueOf(records))
        if sliceValue.Kind() != reflect.Slice {
                panic("not a slice")
diff --git a/internal/base/server/http_funcmap.go 
b/internal/base/server/http_funcmap.go
index 9d8e98f9..8f6cac5f 100644
--- a/internal/base/server/http_funcmap.go
+++ b/internal/base/server/http_funcmap.go
@@ -64,7 +64,7 @@ var funcMap = template.FuncMap{
        "formatLinkNofollow": func(data string) template.HTML {
                return template.HTML(FormatLinkNofollow(data))
        },
-       "translator": func(la i18n.Language, data string, params 
...interface{}) string {
+       "translator": func(la i18n.Language, data string, params ...any) string 
{
                trans := translator.GlobalTrans.Tr(la, data)
 
                if len(params) > 0 && len(params)%2 == 0 {
@@ -128,8 +128,8 @@ var funcMap = template.FuncMap{
                trans = translator.GlobalTrans.Tr(la, 
"ui.dates.long_date_with_year")
                return day.Format(timestamp, trans, tz)
        },
-       "wrapComments": func(comments []*schema.GetCommentResp, la 
i18n.Language, tz string) map[string]interface{} {
-               return map[string]interface{}{
+       "wrapComments": func(comments []*schema.GetCommentResp, la 
i18n.Language, tz string) map[string]any {
+               return map[string]any{
                        "comments": comments,
                        "language": la,
                        "timezone": tz,
diff --git a/internal/base/translator/provider.go 
b/internal/base/translator/provider.go
index 9838d185..47212e84 100644
--- a/internal/base/translator/provider.go
+++ b/internal/base/translator/provider.go
@@ -76,14 +76,14 @@ func NewTranslator(c *I18n) (tr i18n.Translator, err error) 
{
 
                // parse the backend translation
                originalTr := struct {
-                       Backend map[string]map[string]interface{} 
`yaml:"backend"`
-                       UI      map[string]interface{}            `yaml:"ui"`
-                       Plugin  map[string]interface{}            
`yaml:"plugin"`
+                       Backend map[string]map[string]any `yaml:"backend"`
+                       UI      map[string]any            `yaml:"ui"`
+                       Plugin  map[string]any            `yaml:"plugin"`
                }{}
                if err = yaml.Unmarshal(buf, &originalTr); err != nil {
                        return nil, err
                }
-               translation := make(map[string]interface{}, 0)
+               translation := make(map[string]any, 0)
                for k, v := range originalTr.Backend {
                        translation[k] = v
                }
diff --git a/internal/base/validator/validator.go 
b/internal/base/validator/validator.go
index 70c7be2e..22761c52 100644
--- a/internal/base/validator/validator.go
+++ b/internal/base/validator/validator.go
@@ -187,7 +187,7 @@ func GetValidatorByLang(lang i18n.Language) *MyValidator {
 }
 
 // Check /
-func (m *MyValidator) Check(value interface{}) (errFields []*FormErrorField, 
err error) {
+func (m *MyValidator) Check(value any) (errFields []*FormErrorField, err 
error) {
        defer func() {
                if len(errFields) == 0 {
                        return
@@ -261,7 +261,7 @@ type Checker interface {
        Check() (errField []*FormErrorField, err error)
 }
 
-func getObjectTagByFieldName(obj interface{}, fieldName string) (tag string) {
+func getObjectTagByFieldName(obj any, fieldName string) (tag string) {
        defer func() {
                if err := recover(); err != nil {
                        log.Error(err)
diff --git a/internal/install/install_from_env.go 
b/internal/install/install_from_env.go
index a6b668ba..c05d2aab 100644
--- a/internal/install/install_from_env.go
+++ b/internal/install/install_from_env.go
@@ -133,7 +133,7 @@ func initBaseInfo(env *Env) (err error) {
        return requestAPI(req, "POST", "/installation/base-info", InitBaseInfo)
 }
 
-func requestAPI(req interface{}, method, url string, handlerFunc 
gin.HandlerFunc) error {
+func requestAPI(req any, method, url string, handlerFunc gin.HandlerFunc) 
error {
        w := httptest.NewRecorder()
        c, _ := gin.CreateTestContext(w)
        body, _ := json.Marshal(req)
diff --git a/internal/migrations/init.go b/internal/migrations/init.go
index 392ecb2c..184c986b 100644
--- a/internal/migrations/init.go
+++ b/internal/migrations/init.go
@@ -208,7 +208,7 @@ func (m *Mentor) initSiteInfoGeneralData() {
 }
 
 func (m *Mentor) initSiteInfoLoginConfig() {
-       loginConfig := map[string]interface{}{
+       loginConfig := map[string]any{
                "allow_new_registrations":   true,
                "allow_email_registrations": true,
                "allow_password_login":      true,
@@ -223,7 +223,7 @@ func (m *Mentor) initSiteInfoLoginConfig() {
 }
 
 func (m *Mentor) initSiteInfoLegalConfig() {
-       legalConfig := map[string]interface{}{
+       legalConfig := map[string]any{
                "external_content_display": m.userData.ExternalContentDisplay,
        }
        legalConfigDataBytes, _ := json.Marshal(legalConfig)
@@ -244,7 +244,7 @@ func (m *Mentor) initSiteInfoThemeConfig() {
 }
 
 func (m *Mentor) initSiteInfoSEOConfig() {
-       seoData := map[string]interface{}{
+       seoData := map[string]any{
                "permalink": constant.PermalinkQuestionID,
                "robots":    defaultSEORobotTxt + m.userData.SiteURL + 
"/sitemap.xml",
        }
@@ -276,7 +276,7 @@ func (m *Mentor) initSiteInfoUsersConfig() {
 }
 
 func (m *Mentor) initSiteInfoPrivilegeRank() {
-       privilegeRankData := map[string]interface{}{
+       privilegeRankData := map[string]any{
                "level": schema.PrivilegeLevel2,
        }
        privilegeRankDataBytes, _ := json.Marshal(privilegeRankData)
@@ -288,7 +288,7 @@ func (m *Mentor) initSiteInfoPrivilegeRank() {
 }
 
 func (m *Mentor) initSiteInfoWrite() {
-       writeData := map[string]interface{}{
+       writeData := map[string]any{
                "min_content":                      6,
                "restrict_answer":                  true,
                "min_tags":                         1,
diff --git a/internal/migrations/init_data.go b/internal/migrations/init_data.go
index 96151625..356a915a 100644
--- a/internal/migrations/init_data.go
+++ b/internal/migrations/init_data.go
@@ -43,7 +43,7 @@ Sitemap: `
 )
 
 var (
-       tables = []interface{}{
+       tables = []any{
                &entity.Activity{},
                &entity.Answer{},
                &entity.Collection{},
diff --git a/internal/migrations/v25.go b/internal/migrations/v25.go
index 560a852a..228c2ef2 100644
--- a/internal/migrations/v25.go
+++ b/internal/migrations/v25.go
@@ -39,7 +39,7 @@ func addFileRecord(ctx context.Context, x *xorm.Engine) error 
{
        if err != nil {
                return fmt.Errorf("get legal config failed: %w", err)
        }
-       legalConfig := make(map[string]interface{})
+       legalConfig := make(map[string]any)
        if exist {
                if err := json.Unmarshal([]byte(legalInfo.Content), 
&legalConfig); err != nil {
                        return fmt.Errorf("unmarshal legal config failed: %w", 
err)
diff --git a/internal/migrations/v6.go b/internal/migrations/v6.go
index 9171ad47..88fb5849 100644
--- a/internal/migrations/v6.go
+++ b/internal/migrations/v6.go
@@ -45,7 +45,7 @@ func addNewAnswerNotification(ctx context.Context, x 
*xorm.Engine) error {
                }
        }
 
-       m := make(map[string]interface{})
+       m := make(map[string]any)
        _ = json.Unmarshal([]byte(cond.Value), &m)
        m["new_answer_title"] = "[{{.SiteName}}] {{.DisplayName}} answered your 
question"
        m["new_answer_body"] = "<strong><a 
href='{{.AnswerUrl}}'>{{.QuestionTitle}}</a></strong><br><br>\n\n<small>{{.DisplayName}}:</small><br>\n<blockquote>{{.AnswerSummary}}</blockquote><br>\n<a
 href='{{.AnswerUrl}}'>View it on {{.SiteName}}</a><br><br>\n\n<small>You are 
receiving this because you authored the thread. <a 
href='{{.UnsubscribeUrl}}'>Unsubscribe</a></small>"
diff --git a/internal/repo/meta/meta_repo.go b/internal/repo/meta/meta_repo.go
index 767bd04c..9680fb41 100644
--- a/internal/repo/meta/meta_repo.go
+++ b/internal/repo/meta/meta_repo.go
@@ -72,7 +72,7 @@ func (mr *metaRepo) UpdateMeta(ctx context.Context, meta 
*entity.Meta) (err erro
 
 // AddOrUpdateMetaByObjectIdAndKey if exist record with same objectID and key, 
update it. Or create a new one
 func (mr *metaRepo) AddOrUpdateMetaByObjectIdAndKey(ctx context.Context, 
objectId, key string, f func(*entity.Meta, bool) (*entity.Meta, error)) error {
-       _, err := mr.data.DB.Transaction(func(session *xorm.Session) 
(interface{}, error) {
+       _, err := mr.data.DB.Transaction(func(session *xorm.Session) (any, 
error) {
                session = session.Context(ctx)
 
                // 1. acquire meta entity with target object id and key
diff --git a/internal/repo/plugin_config/plugin_user_config_repo.go 
b/internal/repo/plugin_config/plugin_user_config_repo.go
index 19d6af5f..83da8e75 100644
--- a/internal/repo/plugin_config/plugin_user_config_repo.go
+++ b/internal/repo/plugin_config/plugin_user_config_repo.go
@@ -44,7 +44,7 @@ func NewPluginUserConfigRepo(data *data.Data) 
plugin_common.PluginUserConfigRepo
 
 func (ur *pluginUserConfigRepo) SaveUserPluginConfig(ctx context.Context, 
userID string,
        pluginSlugName, configValue string) (err error) {
-       _, err = ur.data.DB.Transaction(func(session *xorm.Session) 
(interface{}, error) {
+       _, err = ur.data.DB.Transaction(func(session *xorm.Session) (any, 
error) {
                session = session.Context(ctx)
                old := &entity.PluginUserConfig{
                        UserID:         userID,
diff --git a/internal/repo/revision/revision_repo.go 
b/internal/repo/revision/revision_repo.go
index 09ba1aac..8b9e0840 100644
--- a/internal/repo/revision/revision_repo.go
+++ b/internal/repo/revision/revision_repo.go
@@ -64,7 +64,7 @@ func (rr *revisionRepo) AddRevision(ctx context.Context, 
revision *entity.Revisi
        if !rr.allowRecord(revision.ObjectType) {
                return nil
        }
-       _, err = rr.data.DB.Transaction(func(session *xorm.Session) 
(interface{}, error) {
+       _, err = rr.data.DB.Transaction(func(session *xorm.Session) (any, 
error) {
                session = session.Context(ctx)
                _, err = session.Insert(revision)
                if err != nil {
diff --git a/internal/repo/role/user_role_rel_repo.go 
b/internal/repo/role/user_role_rel_repo.go
index 7bd14ece..1925339c 100644
--- a/internal/repo/role/user_role_rel_repo.go
+++ b/internal/repo/role/user_role_rel_repo.go
@@ -45,7 +45,7 @@ func NewUserRoleRelRepo(data *data.Data) role.UserRoleRelRepo 
{
 
 // SaveUserRoleRel save user role rel
 func (ur *userRoleRelRepo) SaveUserRoleRel(ctx context.Context, userID string, 
roleID int) (err error) {
-       _, err = ur.data.DB.Transaction(func(session *xorm.Session) 
(interface{}, error) {
+       _, err = ur.data.DB.Transaction(func(session *xorm.Session) (any, 
error) {
                session = session.Context(ctx)
                item := &entity.UserRoleRel{UserID: userID}
                exist, err := session.Get(item)
diff --git a/internal/repo/search_common/search_repo.go 
b/internal/repo/search_common/search_repo.go
index 314c5187..80651723 100644
--- a/internal/repo/search_common/search_repo.go
+++ b/internal/repo/search_common/search_repo.go
@@ -107,8 +107,8 @@ func (sr *searchRepo) SearchContents(ctx context.Context, 
words []string, tagIDs
                ub    *builder.Builder
                qfs   = qFields
                afs   = aFields
-               argsQ = []interface{}{}
-               argsA = []interface{}{}
+               argsQ = []any{}
+               argsA = []any{}
        )
 
        if order == "relevance" {
@@ -212,8 +212,8 @@ func (sr *searchRepo) SearchContents(ctx context.Context, 
words []string, tagIDs
                return
        }
 
-       queryArgs := []interface{}{}
-       countArgs := []interface{}{}
+       queryArgs := []any{}
+       countArgs := []any{}
 
        queryArgs = append(queryArgs, querySQL)
        queryArgs = append(queryArgs, argsQ...)
@@ -246,7 +246,7 @@ func (sr *searchRepo) SearchQuestions(ctx context.Context, 
words []string, tagID
        words = filterWords(words)
        var (
                qfs  = qFields
-               args = []interface{}{}
+               args = []any{}
        )
        if order == "relevance" {
                if len(words) > 0 {
@@ -313,8 +313,8 @@ func (sr *searchRepo) SearchQuestions(ctx context.Context, 
words []string, tagID
                args = append(args, answers)
        }
 
-       queryArgs := []interface{}{}
-       countArgs := []interface{}{}
+       queryArgs := []any{}
+       countArgs := []any{}
 
        countSQL, _, err := builder.MySQL().Select("count(*) total").From(b, 
"c").ToSQL()
        if err != nil {
@@ -358,7 +358,7 @@ func (sr *searchRepo) SearchAnswers(ctx context.Context, 
words []string, tagIDs
 
        var (
                afs  = aFields
-               args = []interface{}{}
+               args = []any{}
        )
        if order == "relevance" {
                if len(words) > 0 {
@@ -409,8 +409,8 @@ func (sr *searchRepo) SearchAnswers(ctx context.Context, 
words []string, tagIDs
                args = append(args, questionID)
        }
 
-       queryArgs := []interface{}{}
-       countArgs := []interface{}{}
+       queryArgs := []any{}
+       countArgs := []any{}
 
        countSQL, _, err := builder.MySQL().Select("count(*) total").From(b, 
"c").ToSQL()
        if err != nil {
@@ -575,9 +575,9 @@ func (sr *searchRepo) parseResult(ctx context.Context, res 
[]map[string][]byte,
        return resultList, nil
 }
 
-func addRelevanceField(searchFields, words, fields []string) (res []string, 
args []interface{}) {
+func addRelevanceField(searchFields, words, fields []string) (res []string, 
args []any) {
        relevanceRes := []string{}
-       args = []interface{}{}
+       args = []any{}
 
        for _, searchField := range searchFields {
                var (
@@ -585,7 +585,7 @@ func addRelevanceField(searchFields, words, fields 
[]string) (res []string, args
                        replacement  = "REPLACE(%s, ?, '')"
                        replaceField = searchField
                        replaced     string
-                       argsField    = []interface{}{}
+                       argsField    = []any{}
                )
 
                res = fields
diff --git a/internal/repo/user/user_repo.go b/internal/repo/user/user_repo.go
index a85cd79a..1533cc5e 100644
--- a/internal/repo/user/user_repo.go
+++ b/internal/repo/user/user_repo.go
@@ -51,7 +51,7 @@ func NewUserRepo(data *data.Data) usercommon.UserRepo {
 
 // AddUser add user
 func (ur *userRepo) AddUser(ctx context.Context, user *entity.User) (err 
error) {
-       _, err = ur.data.DB.Transaction(func(session *xorm.Session) 
(interface{}, error) {
+       _, err = ur.data.DB.Transaction(func(session *xorm.Session) (any, 
error) {
                session = session.Context(ctx)
                userInfo := &entity.User{}
                exist, err := session.Where("username = ?", 
user.Username).Get(userInfo)
diff --git a/internal/schema/question_schema.go 
b/internal/schema/question_schema.go
index 84b97b83..13320828 100644
--- a/internal/schema/question_schema.go
+++ b/internal/schema/question_schema.go
@@ -330,24 +330,24 @@ type UserAnswerInfo struct {
        CreateTime   int    `json:"create_time"`
        UpdateTime   int    `json:"update_time"`
        QuestionInfo struct {
-               Title    string        `json:"title"`
-               UrlTitle string        `json:"url_title"`
-               Tags     []interface{} `json:"tags"`
+               Title    string `json:"title"`
+               UrlTitle string `json:"url_title"`
+               Tags     []any  `json:"tags"`
        } `json:"question_info"`
 }
 
 type UserQuestionInfo struct {
-       ID               string        `json:"question_id"`
-       Title            string        `json:"title"`
-       UrlTitle         string        `json:"url_title"`
-       VoteCount        int           `json:"vote_count"`
-       Tags             []interface{} `json:"tags"`
-       ViewCount        int           `json:"view_count"`
-       AnswerCount      int           `json:"answer_count"`
-       CollectionCount  int           `json:"collection_count"`
-       CreatedAt        int64         `json:"created_at"`
-       AcceptedAnswerID string        `json:"accepted_answer_id"`
-       Status           string        `json:"status"`
+       ID               string `json:"question_id"`
+       Title            string `json:"title"`
+       UrlTitle         string `json:"url_title"`
+       VoteCount        int    `json:"vote_count"`
+       Tags             []any  `json:"tags"`
+       ViewCount        int    `json:"view_count"`
+       AnswerCount      int    `json:"answer_count"`
+       CollectionCount  int    `json:"collection_count"`
+       CreatedAt        int64  `json:"created_at"`
+       AcceptedAnswerID string `json:"accepted_answer_id"`
+       Status           string `json:"status"`
 }
 
 const (
diff --git a/internal/schema/revision_schema.go 
b/internal/schema/revision_schema.go
index 946d1165..b3ac0aad 100644
--- a/internal/schema/revision_schema.go
+++ b/internal/schema/revision_schema.go
@@ -97,7 +97,7 @@ type GetRevisionResp struct {
        Title           string        `json:"title"`
        UrlTitle        string        `json:"url_title"`
        Content         string        `json:"-"`
-       ContentParsed   interface{}   `json:"content"`
+       ContentParsed   any           `json:"content"`
        Status          int           `json:"status"`
        CreatedAt       time.Time     `json:"-"`
        CreatedAtParsed int64         `json:"create_at"`
diff --git a/internal/schema/siteinfo_schema.go 
b/internal/schema/siteinfo_schema.go
index 76f66cb0..0e43bb42 100644
--- a/internal/schema/siteinfo_schema.go
+++ b/internal/schema/siteinfo_schema.go
@@ -178,9 +178,9 @@ type SiteCustomCssHTMLReq struct {
 
 // SiteThemeReq site theme config
 type SiteThemeReq struct {
-       Theme       string                 `validate:"required,gt=0,lte=255" 
json:"theme"`
-       ThemeConfig map[string]interface{} `validate:"omitempty" 
json:"theme_config"`
-       ColorScheme string                 `validate:"omitempty,gt=0,lte=100" 
json:"color_scheme"`
+       Theme       string         `validate:"required,gt=0,lte=255" 
json:"theme"`
+       ThemeConfig map[string]any `validate:"omitempty" json:"theme_config"`
+       ColorScheme string         `validate:"omitempty,gt=0,lte=100" 
json:"color_scheme"`
 }
 
 type SiteSeoReq struct {
@@ -213,10 +213,10 @@ type SiteUsersResp SiteUsersReq
 
 // SiteThemeResp site theme response
 type SiteThemeResp struct {
-       ThemeOptions []*ThemeOption         `json:"theme_options"`
-       Theme        string                 `json:"theme"`
-       ThemeConfig  map[string]interface{} `json:"theme_config"`
-       ColorScheme  string                 `json:"color_scheme"`
+       ThemeOptions []*ThemeOption `json:"theme_options"`
+       Theme        string         `json:"theme"`
+       ThemeConfig  map[string]any `json:"theme_config"`
+       ColorScheme  string         `json:"color_scheme"`
 }
 
 func (s *SiteThemeResp) TrTheme(ctx context.Context) {
diff --git a/internal/schema/user_schema.go b/internal/schema/user_schema.go
index 7ba8817a..d209c8f5 100644
--- a/internal/schema/user_schema.go
+++ b/internal/schema/user_schema.go
@@ -200,7 +200,7 @@ func (r *GetOtherUserInfoByUsernameResp) 
ConvertFromUserEntityWithLang(ctx conte
                        r.SuspendedUntil = userInfo.SuspendedUntil.Unix()
                        trans := translator.GlobalTrans.Tr(lang, 
"ui.dates.long_date_with_time")
                        suspendedUntilFormatted := 
day.Format(userInfo.SuspendedUntil.Unix(), trans, "UTC")
-                       r.StatusMsg = translator.TrWithData(lang, 
reason.UserStatusSuspendedUntil, map[string]interface{}{
+                       r.StatusMsg = translator.TrWithData(lang, 
reason.UserStatusSuspendedUntil, map[string]any{
                                "SuspendedUntil": suspendedUntilFormatted,
                        })
                }
diff --git a/internal/service/question_common/question.go 
b/internal/service/question_common/question.go
index feb5626e..33380644 100644
--- a/internal/service/question_common/question.go
+++ b/internal/service/question_common/question.go
@@ -622,7 +622,7 @@ func (qs *QuestionCommon) SitemapCron(ctx context.Context) {
        }
 }
 
-func (qs *QuestionCommon) SetCache(ctx context.Context, cachekey string, info 
interface{}) error {
+func (qs *QuestionCommon) SetCache(ctx context.Context, cachekey string, info 
any) error {
        infoStr, err := json.Marshal(info)
        if err != nil {
                return 
errors.InternalServer(reason.UnknownError).WithError(err).WithStack()
diff --git a/internal/service/siteinfo/siteinfo_service.go 
b/internal/service/siteinfo/siteinfo_service.go
index 92b3e0c7..cf43d68d 100644
--- a/internal/service/siteinfo/siteinfo_service.go
+++ b/internal/service/siteinfo/siteinfo_service.go
@@ -183,7 +183,7 @@ func (s *SiteInfoService) SaveSiteBranding(ctx 
context.Context, req *schema.Site
 }
 
 // SaveSiteWrite save site configuration about write
-func (s *SiteInfoService) SaveSiteWrite(ctx context.Context, req 
*schema.SiteWriteReq) (resp interface{}, err error) {
+func (s *SiteInfoService) SaveSiteWrite(ctx context.Context, req 
*schema.SiteWriteReq) (resp any, err error) {
        recommendTags, reservedTags := make([]string, 0), make([]string, 0)
        recommendTagMapping, reservedTagMapping := make(map[string]bool), 
make(map[string]bool)
        for _, tag := range req.ReservedTags {
diff --git a/internal/service/siteinfo_common/siteinfo_service.go 
b/internal/service/siteinfo_common/siteinfo_service.go
index ef4869cc..fda11722 100644
--- a/internal/service/siteinfo_common/siteinfo_service.go
+++ b/internal/service/siteinfo_common/siteinfo_service.go
@@ -56,7 +56,7 @@ type SiteInfoCommonService interface {
        GetSiteCustomCssHTML(ctx context.Context) (resp 
*schema.SiteCustomCssHTMLResp, err error)
        GetSiteTheme(ctx context.Context) (resp *schema.SiteThemeResp, err 
error)
        GetSiteSeo(ctx context.Context) (resp *schema.SiteSeoResp, err error)
-       GetSiteInfoByType(ctx context.Context, siteType string, resp 
interface{}) (err error)
+       GetSiteInfoByType(ctx context.Context, siteType string, resp any) (err 
error)
        IsBrandingFileUsed(ctx context.Context, filePath string) bool
 }
 
@@ -224,7 +224,7 @@ func (s *siteInfoCommonService) EnableShortID(ctx 
context.Context) (enabled bool
        return siteSeo.IsShortLink()
 }
 
-func (s *siteInfoCommonService) GetSiteInfoByType(ctx context.Context, 
siteType string, resp interface{}) (err error) {
+func (s *siteInfoCommonService) GetSiteInfoByType(ctx context.Context, 
siteType string, resp any) (err error) {
        siteInfo, exist, err := s.siteInfoRepo.GetByType(ctx, siteType)
        if err != nil {
                return err
diff --git a/pkg/converter/str.go b/pkg/converter/str.go
index 40c147fd..5164609c 100644
--- a/pkg/converter/str.go
+++ b/pkg/converter/str.go
@@ -47,7 +47,7 @@ func IntToString(data int64) string {
 
 // InterfaceToString converts data to string
 // It will be used in template render
-func InterfaceToString(data interface{}) string {
+func InterfaceToString(data any) string {
        switch t := data.(type) {
        case int:
                i := data.(int)

Reply via email to