diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..5b19dc4
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,265 @@
+# Options for analysis running.
+run:
+ # The default concurrency value is the number of available CPU.
+ # concurrency: 4
+
+ # Timeout for analysis, e.g. 30s, 5m.
+ # Default: 1m
+ timeout: 10m
+
+ # Exit code when at least one issue was found.
+ # Default: 1
+ # issues-exit-code: 2
+
+ # Include test files or not.
+ # Default: true
+ tests: false
+
+ # List of build tags, all linters use it.
+ # Default: [].
+ # build-tags:
+ # - mytag
+
+ # Which dirs to skip: issues from them won't be reported.
+ # Can use regexp here: `generated.*`, regexp is applied on full path.
+ # Default value is empty list,
+ # but default dirs are skipped independently of this option's value (see skip-dirs-use-default).
+ # "/" will be replaced by current OS file path separator to properly work on Windows.
+ # skip-dirs:
+ # - src/external_libs
+ # - autogenerated_by_my_lib
+
+ # Enables skipping of directories:
+ # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
+ # Default: true
+ skip-dirs-use-default: true
+
+ # Which files to skip: they will be analyzed, but issues from them won't be reported.
+ # Default value is empty list,
+ # but there is no need to include all autogenerated files,
+ # we confidently recognize autogenerated files.
+ # If it's not please let us know.
+ # "/" will be replaced by current OS file path separator to properly work on Windows.
+ # skip-files:
+ # - ".*\\.my\\.go$"
+ # - lib/bad.go
+
+ # If set we pass it to "go list -mod={option}". From "go help modules":
+ # If invoked with -mod=readonly, the go command is disallowed from the implicit
+ # automatic updating of go.mod described above. Instead, it fails when any changes
+ # to go.mod are needed. This setting is most useful to check that go.mod does
+ # not need updates, such as in a continuous integration and testing system.
+ # If invoked with -mod=vendor, the go command assumes that the vendor
+ # directory holds the correct copies of dependencies and ignores
+ # the dependency descriptions in go.mod.
+ #
+ # Allowed values: readonly|vendor|mod
+ # By default, it isn't set.
+ # modules-download-mode: readonly
+
+ # Allow multiple parallel golangci-lint instances running.
+ # If false (default) - golangci-lint acquires file lock on start.
+ allow-parallel-runners: false
+
+ # Define the Go version limit.
+ # Mainly related to generics support since go1.18.
+ # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.18
+ # go: '1.19'
+
+# output configuration options
+output:
+ # Format: colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions
+ #
+ # Multiple can be specified by separating them by comma, output can be provided
+ # for each of them by separating format name and path by colon symbol.
+ # Output path can be either `stdout`, `stderr` or path to the file to write to.
+ # Example: "checkstyle:report.json,colored-line-number"
+ #
+ # Default: colored-line-number
+ format: colored-line-number
+
+ # Print lines of code with issue.
+ # Default: true
+ print-issued-lines: true
+
+ # Print linter name in the end of issue text.
+ # Default: true
+ print-linter-name: true
+
+ # Make issues output unique by line.
+ # Default: true
+ uniq-by-line: true
+
+ # Add a prefix to the output file references.
+ # Default is no prefix.
+ path-prefix: ""
+
+ # Sort results by: filepath, line and column.
+ sort-results: false
+linters:
+ # Disable all linters.
+ # Default: false
+ disable-all: true
+
+ # Enable specific linter
+ # https://golangci-lint.run/usage/linters/#enabled-by-default
+ enable:
+ - revive
+ - goimports
+ - unconvert
+ - unparam
+ - gosec
+ - bodyclose
+ - errcheck
+ - govet
+ - unused
+ - staticcheck
+ - typecheck
+ - ineffassign
+ - gosimple
+ - exhaustive
+ - nilerr
+
+ # Enable all available linters.
+ # Default: false
+ # enable-all: false
+
+ # Disable specific linter
+ # https://golangci-lint.run/usage/linters/#disabled-by-default
+ # disable:
+ # - asasalint
+
+ # Enable presets.
+ # https://golangci-lint.run/usage/linters
+ # presets:
+ # - bugs
+ # - comment
+ # - complexity
+ # - error
+ # - format
+ # - import
+ # - metalinter
+ # - module
+ # - performance
+ # - sql
+ # - style
+ # - test
+ # - unused
+
+ # Run only fast linters from enabled linters set (first run won't be fast)
+ # Default: false
+ fast: false
+issues:
+ # List of regexps of issue texts to exclude.
+ #
+ # But independently of this option we use default exclude patterns,
+ # it can be disabled by `exclude-use-default: false`.
+ # To list all excluded by default patterns execute `golangci-lint run --help`
+ #
+ # Default: https://golangci-lint.run/usage/false-positives/#default-exclusions
+ exclude:
+ - "should have a package comment"
+ # Excluding configuration per-path, per-linter, per-text and per-source
+ exclude-rules:
+ - text: "G404:" # Use of weak random number generator (math/rand instead of crypto/rand)"
+ linters:
+ - gosec
+ - text: "G109:" # Use of weak random number generator (math/rand instead of crypto/rand)"
+ linters:
+ - gosec
+ # Exclude some linters from running on tests files.
+ - path: _test\.go
+ linters:
+ - gocyclo
+ - errcheck
+ - dupl
+ - gosec
+ # Exclude known linters from partially hard-vendored code,
+ # which is impossible to exclude via `nolint` comments.
+ # `/` will be replaced by current OS file path separator to properly work on Windows.
+ - path: internal/hmac/
+ text: "weak cryptographic primitive"
+ linters:
+ - gosec
+ # Exclude some `staticcheck` messages.
+ - linters:
+ - staticcheck
+ text: "SA9003:"
+ # Exclude `lll` issues for long lines with `go:generate`.
+ - linters:
+ - lll
+ source: "^//go:generate "
+ # Independently of option `exclude` we use default exclude patterns,
+ # it can be disabled by this option.
+ # To list all excluded by default patterns execute `golangci-lint run --help`.
+ # Default: true.
+ exclude-use-default: false
+ # If set to true exclude and exclude-rules regular expressions become case-sensitive.
+ # Default: false
+ exclude-case-sensitive: false
+ # The list of ids of default excludes to include or disable.
+ # https://golangci-lint.run/usage/false-positives/#default-exclusions
+ # Default: []
+ # include:
+ # - EXC0001
+ # - EXC0002
+ # - EXC0003
+ # - EXC0004
+ # - EXC0005
+ # - EXC0006
+ # - EXC0007
+ # - EXC0008
+ # - EXC0009
+ # - EXC0010
+ # - EXC0011
+ # - EXC0012
+ # - EXC0013
+ # - EXC0014
+
+ # Maximum issues count per one linter.
+ # Set to 0 to disable.
+ # Default: 50
+ max-issues-per-linter: 0
+ # Maximum count of issues with the same text.
+ # Set to 0 to disable.
+ # Default: 3
+ max-same-issues: 0
+ # Show only new issues: if there are unstaged changes or untracked files,
+ # only those changes are analyzed, else only changes in HEAD~ are analyzed.
+ # It's a super-useful option for integration of golangci-lint into existing large codebase.
+ # It's not practical to fix all existing issues at the moment of integration:
+ # much better don't allow issues in new code.
+ #
+ # Default: false.
+ new: false
+ # Show only new issues created after git revision `REV`.
+ # new-from-rev: HEAD
+ # Show only new issues created in git patch with set file path.
+ # new-from-patch: path/to/patch/file
+ # Fix found issues (if it's supported by the linter).
+ fix: true
+severity:
+ # Set the default severity for issues.
+ #
+ # If severity rules are defined and the issues do not match or no severity is provided to the rule
+ # this will be the default severity applied.
+ # Severities should match the supported severity names of the selected out format.
+ # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity
+ # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#SeverityLevel
+ # - GitHub: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message
+ #
+ # Default value is an empty string.
+ default-severity: error
+ # If set to true `severity-rules` regular expressions become case-sensitive.
+ # Default: false
+ case-sensitive: true
+ # When a list of severity rules are provided, severity information will be added to lint issues.
+ # Severity rules have the same filtering capability as exclude rules
+ # except you are allowed to specify one matcher per severity rule.
+ # Only affects out formats that support setting severity information.
+ #
+ # Default: []
+ rules:
+ - linters:
+ - dupl
+ severity: info
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0f03957..dcec5be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# go-utils
+
+## [v1.34.0] - 2023-09-19
+### New Features
+- add generate uuid functionality and update linter
+
+
## [v1.33.0] - 2023-07-20
### New Features
@@ -106,6 +112,9 @@
- fix marshal issue on gorm.DeletedAt empty value ([#32](https://github.com/kumparan/kumnats/issues/32))
+
+## [v.1.20.0] - 2022-03-11
+
## [v1.20.0] - 2022-03-11
### New Features
@@ -274,7 +283,8 @@
- init go-utils
-[Unreleased]: https://github.com/kumparan/kumnats/compare/v1.33.0...HEAD
+[Unreleased]: https://github.com/kumparan/kumnats/compare/v1.34.0...HEAD
+[v1.34.0]: https://github.com/kumparan/kumnats/compare/v1.33.0...v1.34.0
[v1.33.0]: https://github.com/kumparan/kumnats/compare/v1.32.1...v1.33.0
[v1.32.1]: https://github.com/kumparan/kumnats/compare/v1.32.0...v1.32.1
[v1.32.0]: https://github.com/kumparan/kumnats/compare/v1.31.0...v1.32.0
@@ -291,7 +301,8 @@
[v1.23.0]: https://github.com/kumparan/kumnats/compare/v1.22.0...v1.23.0
[v1.22.0]: https://github.com/kumparan/kumnats/compare/v1.21.0...v1.22.0
[v1.21.0]: https://github.com/kumparan/kumnats/compare/v1.20.1...v1.21.0
-[v1.20.1]: https://github.com/kumparan/kumnats/compare/v1.20.0...v1.20.1
+[v1.20.1]: https://github.com/kumparan/kumnats/compare/v.1.20.0...v1.20.1
+[v.1.20.0]: https://github.com/kumparan/kumnats/compare/v1.20.0...v.1.20.0
[v1.20.0]: https://github.com/kumparan/kumnats/compare/v1.19.3...v1.20.0
[v1.19.3]: https://github.com/kumparan/kumnats/compare/v1.19.2...v1.19.3
[v1.19.2]: https://github.com/kumparan/kumnats/compare/v1.19.1...v1.19.2
diff --git a/Makefile b/Makefile
index 77af81f..3beff4d 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ changelog_args=-o CHANGELOG.md -tag-filter-pattern '^v'
test_command=richgo test ./... $(TEST_ARGS) -v --cover
lint:
- golangci-lint run --concurrency 4 --print-issued-lines=false --exclude-use-default=false --enable=revive --enable=goimports --enable=unconvert --fix
+ golangci-lint run
changelog:
ifdef version
diff --git a/bson_test.go b/bson_test.go
index 55a19cf..f20d19b 100644
--- a/bson_test.go
+++ b/bson_test.go
@@ -8,7 +8,7 @@ import (
"github.com/stretchr/testify/require"
)
-func BenchmarkTimeFromObjectIDHex(b *testing.B) {
+func BenchmarkTimeFromObjectIDHex(_ *testing.B) {
cases := []string{
"63acfc824ffda9000ee65045",
"5c4b288bac1b2972d0291377",
diff --git a/cron.go b/cron.go
index 3a325bb..c93cd01 100644
--- a/cron.go
+++ b/cron.go
@@ -11,6 +11,7 @@ var cronNextAtTimeFormat = "2006-01-02T15:04:05"
// GetCronNextAt supports
// - Standard crontab specs, e.g. "* * * * ?"
// - Descriptors, e.g. "@midnight", "@every 1h30m"
+//
// if cron parsing error then return current time
func GetCronNextAt(cronTab string) string {
now := time.Now()
diff --git a/cron_test.go b/cron_test.go
index 41899e7..46487d2 100644
--- a/cron_test.go
+++ b/cron_test.go
@@ -4,7 +4,7 @@ import (
"testing"
"time"
- "github.com/agiledragon/gomonkey"
+ "github.com/agiledragon/gomonkey/v2"
"github.com/stretchr/testify/assert"
)
diff --git a/encryption/aes.go b/encryption/aes.go
index 8f37714..1699d03 100644
--- a/encryption/aes.go
+++ b/encryption/aes.go
@@ -91,7 +91,7 @@ func (c *AESCryptor) generateIVKey(iv string) (bIv []byte, err error) {
return hex.DecodeString(ivKey)
}
-func (c *AESCryptor) pkcs5Padding(ciphertext []byte, blockSize int, after int) []byte {
+func (c *AESCryptor) pkcs5Padding(ciphertext []byte, blockSize int, _ int) []byte {
padding := (blockSize - len(ciphertext)%blockSize)
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
diff --git a/go.mod b/go.mod
index c6a5688..4ede514 100644
--- a/go.mod
+++ b/go.mod
@@ -4,9 +4,10 @@ go 1.18
require (
github.com/99designs/gqlgen v0.14.0
- github.com/agiledragon/gomonkey v2.0.2+incompatible
+ github.com/agiledragon/gomonkey/v2 v2.10.1
github.com/getsentry/sentry-go v0.11.0
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
+ github.com/gofrs/uuid/v5 v5.0.0
github.com/goodsign/monday v1.0.0
github.com/graph-gophers/graphql-go v1.4.0
github.com/leekchan/accounting v0.3.1
@@ -22,7 +23,7 @@ require (
gorm.io/gorm v1.22.4
)
-require gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
+require gopkg.in/yaml.v3 v3.0.1 // indirect
require (
github.com/aymerick/douceur v0.2.0 // indirect
diff --git a/go.sum b/go.sum
index d0db8a6..59b5a03 100644
--- a/go.sum
+++ b/go.sum
@@ -6,8 +6,8 @@ github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3
github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
-github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
-github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
+github.com/agiledragon/gomonkey/v2 v2.10.1 h1:FPJJNykD1957cZlGhr9X0zjr291/lbazoZ/dmc4mS4c=
+github.com/agiledragon/gomonkey/v2 v2.10.1/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
@@ -56,6 +56,8 @@ github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AE
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M=
+github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
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=
@@ -286,8 +288,9 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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=
gorm.io/gorm v1.22.4 h1:8aPcyEJhY0MAt8aY6Dc524Pn+pO29K+ydu+e/cXSpQM=
gorm.io/gorm v1.22.4/go.mod h1:1aeVC+pe9ZmvKZban/gW4QPra7PRoTEssyc922qCAkk=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/string.go b/string.go
index fcc75be..1ae939c 100644
--- a/string.go
+++ b/string.go
@@ -4,6 +4,9 @@ import (
"encoding/json"
"strconv"
"strings"
+
+ "github.com/gofrs/uuid/v5"
+ "github.com/sirupsen/logrus"
)
// StandardizeSpaces -> JoinURL long query to one line query
@@ -125,3 +128,14 @@ func TrimSpacePointerString(s *string) {
}
*s = strings.TrimSpace(*s)
}
+
+// GenerateUUID generate random UUID v4
+func GenerateUUID() string {
+ u, err := uuid.NewV4()
+ if err != nil {
+ logrus.Error(err)
+ return ""
+ }
+
+ return u.String()
+}
diff --git a/string_test.go b/string_test.go
index d5fe56b..57815ab 100644
--- a/string_test.go
+++ b/string_test.go
@@ -122,3 +122,9 @@ func Test_TrimSpacePointerString(t *testing.T) {
assert.Equal(t, out, in)
}
}
+
+func TestGenerateUUID(t *testing.T) {
+ uuid := GenerateUUID()
+ assert.NotEqual(t, "", uuid)
+ assert.Equal(t, 36, len(uuid))
+}