From 35ddffe6c6e9d43be80a0cb348669ec6ca438f5a Mon Sep 17 00:00:00 2001 From: Ge Song Date: Fri, 14 Apr 2023 22:27:29 +0800 Subject: [PATCH] =?UTF-8?q?exegroup/=E5=9F=BA=E4=BA=8Egolangci-lint?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exegroup/.golangci.yaml | 141 ++++++++++++++++++++++++++++++++++++++++ exegroup/group.go | 8 +-- exegroup/group_test.go | 1 + exegroup/httpserver.go | 14 ++-- 4 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 exegroup/.golangci.yaml diff --git a/exegroup/.golangci.yaml b/exegroup/.golangci.yaml new file mode 100644 index 0000000..d884b2f --- /dev/null +++ b/exegroup/.golangci.yaml @@ -0,0 +1,141 @@ +## 基于 golangci-lint@v1.52.2 +run: + timeout: 1m + build-tags: [ ] + skip-dirs: [ ] + skip-files: [ ] +linters: + disable-all: true + enable: + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - typecheck + - unused + - asasalint + - asciicheck + - bidichk + - bodyclose + - containedctx + - cyclop + - dupl + - durationcheck + - errname + - errorlint + - exhaustive + - exportloopref + - funlen + - gocheckcompilerdirectives + - gochecknoinits + - goconst + - gocritic + - gocyclo + - goimports + - gomnd + - goprintffuncname + - gosec + - lll + - loggercheck + - makezero + - nakedret + - nestif + - nilnil + - noctx + - nolintlint + - prealloc + - predeclared + - promlinter + - reassign + - revive + - rowserrcheck + - stylecheck + - tenv + - testableexamples + - testpackage + - tparallel + - unconvert + - unparam + - usestdlibvars + - wastedassign + - whitespace +linters-settings: + errcheck: + check-type-assertions: true + exclude-functions: [ ] + govet: + enable-all: true + disable: [ ] + cyclop: + max-complexity: 10 + package-average: 0.0 + dupl: + threshold: 150 + exhaustive: + check: + - switch + - map + funlen: + lines: 100 + statements: 60 + gocritic: + disabled-checks: + - commentFormatting + settings: + captLocal: + paramsOnly: false + underef: + skipRecvDeref: false + gocyclo: + min-complexity: 20 + gomnd: + ignored-functions: + - os.Chmod + - os.Mkdir + - os.MkdirAll + - os.OpenFile + - os.WriteFile + - prometheus.ExponentialBuckets + - prometheus.ExponentialBucketsRange + - prometheus.LinearBuckets + lll: + line-length: 240 + nakedret: + max-func-lines: 10 + nestif: + min-complexity: 5 + predeclared: + ignore: "" + q: false + reassign: + patterns: + - ".*" + rowserrcheck: + packages: + - github.com/jmoiron/sqlx + tenv: + all: true + usestdlibvars: + time-month: true + time-layout: true + crypto-hash: true + default-rpc-path: true + os-dev-null: true + sql-isolation-level: true + tls-signature-scheme: true + constant-kind: true + syslog-priority: true +issues: + max-same-issues: 10 + exclude-rules: + - source: "//noinspection" + linters: [ gocritic ] + - path: "_test\\.go" + linters: + - bodyclose + - dupl + - funlen + - goconst + - gosec + - noctx diff --git a/exegroup/group.go b/exegroup/group.go index 7af66d3..eee1f61 100644 --- a/exegroup/group.go +++ b/exegroup/group.go @@ -123,8 +123,8 @@ func (g *Group) start(ctx context.Context, c chan error) { } } -func (g *Group) wait(c chan error, cancel context.CancelFunc) (err error) { - err = <-c +func (g *Group) wait(c chan error, cancel context.CancelFunc) error { + err := <-c cancel() ctx := context.Background() if g.cfg.stopTimeout > 0 { @@ -144,10 +144,10 @@ func (g *Group) wait(c chan error, cancel context.CancelFunc) (err error) { select { case <-c: case <-ctx.Done(): - return + return err } } - return + return err } type config struct { diff --git a/exegroup/group_test.go b/exegroup/group_test.go index b6a5d04..14b3ab9 100644 --- a/exegroup/group_test.go +++ b/exegroup/group_test.go @@ -14,4 +14,5 @@ func Example_defaultGroup() { return ctx.Err() }) log.Println("exit:", g.Run(context.Background())) + // Output: } diff --git a/exegroup/httpserver.go b/exegroup/httpserver.go index 72f6c4a..aee7f18 100644 --- a/exegroup/httpserver.go +++ b/exegroup/httpserver.go @@ -2,14 +2,20 @@ package exegroup import ( "context" - "fmt" + "net" "net/http" + "strconv" "sync/atomic" + "time" ) -// HttpListenAndServe 提供 [http.Server] 的启动和停止函数; -func HttpListenAndServe(port int, handler http.Handler) (func(ctx context.Context) error, func(ctx context.Context)) { - server := &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: handler} +// HTTPListenAndServe 提供 [http.Server] 的启动和停止函数; +func HTTPListenAndServe(port int, handler http.Handler) (func(ctx context.Context) error, func(ctx context.Context)) { + server := &http.Server{ + Addr: net.JoinHostPort("", strconv.Itoa(port)), + Handler: handler, + ReadHeaderTimeout: time.Second, + } inShutdown := &atomic.Bool{} c := make(chan error, 1) goFunc := func(_ context.Context) error {