phpcyy opened a new issue, #3159: URL: https://github.com/apache/dubbo-go/issues/3159
### ✅ 验证清单 - [x] 🔍 我已经搜索过 [现有 Issues](https://github.com/apache/dubbo-go/issues),确信这不是重复问题 ### 🚀 Go 版本 1.25.5 ### 📦 Dubbo-go 版本 v3.3.1 ### 🖥️ 服务端配置 _No response_ ### 💻 客户端配置 _No response_ ### 🌐 协议配置 _No response_ ### 📋 注册中心配置 _No response_ ### 💾 操作系统 🍎 macOS ### 📝 Bug 描述 客户端程序运行调用 triple 协议,服务会崩溃,报错「fatal error: concurrent map writes」 ### 🔄 重现步骤 ``` func TestClone(t *testing.T) { u1, _ := NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0&configVersion=1.0") u1.SetAttribute("hello", "world") for i := 0; i < 1000; i++ { go func() { u1.Clone() }() } time.Sleep(2 * time.Second) } ``` 执行 `go test -trimpath -race -v -run TestClone -timeout 30s | head -n 100` 运行结果 ``` === RUN TestClone ================== WARNING: DATA RACE Write at 0x00c0000a1920 by goroutine 34: runtime.mapaccess2_faststr() internal/runtime/maps/runtime_faststr_swiss.go:162 +0x29c dubbo.apache.org/dubbo-go/v3/common.(*URL).SetAttribute() dubbo.apache.org/dubbo-go/v3/common/url.go:568 +0x100 dubbo.apache.org/dubbo-go/v3/common.(*URL).Clone.func2() dubbo.apache.org/dubbo-go/v3/common/url.go:883 +0x4c dubbo.apache.org/dubbo-go/v3/common.(*URL).RangeAttributes() dubbo.apache.org/dubbo-go/v3/common/url.go:893 +0x144 dubbo.apache.org/dubbo-go/v3/common.(*URL).Clone() dubbo.apache.org/dubbo-go/v3/common/url.go:882 +0x148 dubbo.apache.org/dubbo-go/v3/common.TestClone.func1() dubbo.apache.org/dubbo-go/v3/common/url_test.go:421 +0x2c ``` ### ✅ 预期行为 代码正常运行,无并发问题。 ### ❌ 实际行为 提示 Data Race,有并发问题。 ### 💡 可能的解决方案 修复 Clone() 逻辑,去掉 copier.Copy() 的浅拷贝,通过加锁和直接赋值避免 map 的浅拷贝。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
