From 0ae27f613a370d65a450709b53d838642d0b5aea Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Tue, 5 May 2026 15:03:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=86=99=E6=97=B6=E5=A4=8D=E5=88=B6=EF=BC=88?= =?UTF-8?q?CoW=EF=BC=89=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E8=AF=BB=E5=86=99=E9=A3=8E=E9=99=A9=E4=B8=8E=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=90=8C=E6=AD=A5=E9=97=AE=E9=A2=98=EF=BC=88?= =?UTF-8?q?by=20AI=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Discover.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Discover.go b/Discover.go index 7d8d60f..d459654 100644 --- a/Discover.go +++ b/Discover.go @@ -380,16 +380,29 @@ var numberMatcher = regexp.MustCompile(`^\d+(s|ms|us|µs|ns?)?$`) func (d *Discoverer) addApp(app, callConf string, fetch bool) bool { d.appLock.Lock() conf := d.GetConfig() - if conf.Calls == nil { - conf.Calls = make(map[string]string) + + // 1. 写时复制(Copy-on-Write):创建一个全新的 Map 避免影响读操作 + newCalls := make(map[string]string) + for k, v := range conf.Calls { + newCalls[k] = v } - if conf.Calls[app] == callConf && d.appNodes[app] != nil { + + if newCalls[app] == callConf && d.appNodes[app] != nil { d.appLock.Unlock() return false } - conf.Calls[app] = callConf + + newCalls[app] = callConf + conf.Calls = newCalls // 将新的 Map 赋值给 ConfigStruct + + // 2. 更新实例配置 d.SetConfig(conf) + // 3. 如果是默认的全局实例,保持包级全局配置同步 + if d == DefaultDiscoverer { + SetConfig(conf) + } + callInfo := &callInfoType{ Timeout: 10 * time.Second, HttpVersion: 2,