From 04d823d616703b1df73e46c9ca9f0f5202778222 Mon Sep 17 00:00:00 2001 From: yusing Date: Fri, 12 Sep 2025 11:41:59 +0800 Subject: [PATCH] feat(serialization): add 'd', 'w',' 'M' units support for time duration - Updated Makefile to include `-checklinkname=0` in LDFLAGS --- Makefile | 2 +- internal/serialization/time.go | 21 +++++++++++++++++++++ internal/serialization/time_test.go | 16 ++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 internal/serialization/time.go create mode 100644 internal/serialization/time_test.go diff --git a/Makefile b/Makefile index ec6afa15..ae0bf0bb 100755 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/internal/serialization/time.go b/internal/serialization/time.go new file mode 100644 index 00000000..c35656cd --- /dev/null +++ b/internal/serialization/time.go @@ -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 +} diff --git a/internal/serialization/time_test.go b/internal/serialization/time_test.go new file mode 100644 index 00000000..eaebcf19 --- /dev/null +++ b/internal/serialization/time_test.go @@ -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"))) +}