feat(serialization): add 'd', 'w',' 'M' units support for time duration

- Updated Makefile to include `-checklinkname=0` in LDFLAGS
This commit is contained in:
yusing
2025-09-12 11:41:59 +08:00
parent 1be2ea44a2
commit 04d823d616
3 changed files with 38 additions and 1 deletions

View File

@@ -6,7 +6,7 @@ export GOOS = linux
WEBUI_DIR ?= ../godoxy-frontend
DOCS_DIR ?= ../godoxy-wiki
LDFLAGS = -X github.com/yusing/go-proxy/pkg.version=${VERSION}
LDFLAGS = -X github.com/yusing/go-proxy/pkg.version=${VERSION} -checklinkname=0
ifeq ($(agent), 1)
NAME = godoxy-agent

View File

@@ -0,0 +1,21 @@
package serialization
import (
"time"
_ "unsafe"
)
//go:linkname unitMap time.unitMap
var unitMap map[string]uint64
const (
unitDay uint64 = 24 * uint64(time.Hour)
unitWeek uint64 = 7 * unitDay
unitMonth uint64 = 30 * unitDay
)
func init() {
unitMap["d"] = unitDay
unitMap["w"] = unitWeek
unitMap["M"] = unitMonth
}

View File

@@ -0,0 +1,16 @@
package serialization
import (
"testing"
"time"
"github.com/stretchr/testify/require"
expect "github.com/yusing/go-proxy/internal/utils/testing"
)
// NOTE: -ldflags=-checklinkname=0 is required to test this function
func TestParseDuration(t *testing.T) {
require.Equal(t, 24*time.Hour, expect.Must(time.ParseDuration("1d")))
require.Equal(t, 7*24*time.Hour, expect.Must(time.ParseDuration("1w")))
require.Equal(t, 30*24*time.Hour, expect.Must(time.ParseDuration("1M")))
}