style(loadbalance): 使用自增运算符替代显式加法

totalWeight += 1 → totalWeight++

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-10 09:40:47 +08:00
parent 649a6ed23f
commit 4c12703334
3 changed files with 53 additions and 53 deletions

View File

@ -118,7 +118,7 @@ func (w *WeightedRoundRobin) Select(targets []*Target) *Target {
totalWeight := 0
for _, t := range healthy {
if t.Weight <= 0 {
totalWeight += 1 // 最小权重为 1
totalWeight++ // 最小权重为 1
} else {
totalWeight += t.Weight
}
@ -284,7 +284,7 @@ func (w *WeightedRoundRobin) SelectExcluding(targets []*Target, excluded []*Targ
totalWeight := 0
for _, t := range available {
if t.Weight <= 0 {
totalWeight += 1 // 最小权重为 1
totalWeight++ // 最小权重为 1
} else {
totalWeight += t.Weight
}

View File

@ -24,7 +24,7 @@ func createHealthyTarget(url string, healthy bool) *Target {
// TestRoundRobin_Select 测试轮询负载均衡选择器。
func TestRoundRobin_Select(t *testing.T) {
t.Run("多目标轮询", func(t *testing.T) {
t.Run("多目标轮询", func(_ *testing.T) {
rr := NewRoundRobin()
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -52,7 +52,7 @@ func TestRoundRobin_Select(t *testing.T) {
}
})
t.Run("单目标", func(t *testing.T) {
t.Run("单目标", func(_ *testing.T) {
rr := NewRoundRobin()
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -67,7 +67,7 @@ func TestRoundRobin_Select(t *testing.T) {
}
})
t.Run("空目标", func(t *testing.T) {
t.Run("空目标", func(_ *testing.T) {
rr := NewRoundRobin()
got := rr.Select([]*Target{})
if got != nil {
@ -75,7 +75,7 @@ func TestRoundRobin_Select(t *testing.T) {
}
})
t.Run("跳过不健康目标", func(t *testing.T) {
t.Run("跳过不健康目标", func(_ *testing.T) {
rr := NewRoundRobin()
targets := []*Target{
createHealthyTarget("http://backend1:8080", false),
@ -92,7 +92,7 @@ func TestRoundRobin_Select(t *testing.T) {
}
})
t.Run("所有目标都不健康", func(t *testing.T) {
t.Run("所有目标都不健康", func(_ *testing.T) {
rr := NewRoundRobin()
targets := []*Target{
createHealthyTarget("http://backend1:8080", false),
@ -105,7 +105,7 @@ func TestRoundRobin_Select(t *testing.T) {
}
})
t.Run("并发安全", func(t *testing.T) {
t.Run("并发安全", func(_ *testing.T) {
rr := NewRoundRobin()
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -126,7 +126,7 @@ func TestRoundRobin_Select(t *testing.T) {
// TestWeightedRoundRobin_Select 测试加权轮询负载均衡选择器。
func TestWeightedRoundRobin_Select(t *testing.T) {
t.Run("权重分配", func(t *testing.T) {
t.Run("权重分配", func(_ *testing.T) {
wrr := NewWeightedRoundRobin()
targets := []*Target{
{URL: "http://backend1:8080", Weight: 1},
@ -153,7 +153,7 @@ func TestWeightedRoundRobin_Select(t *testing.T) {
}
})
t.Run("权重为0", func(t *testing.T) {
t.Run("权重为0", func(_ *testing.T) {
wrr := NewWeightedRoundRobin()
targets := []*Target{
{URL: "http://backend1:8080", Weight: 0},
@ -181,7 +181,7 @@ func TestWeightedRoundRobin_Select(t *testing.T) {
}
})
t.Run("空目标", func(t *testing.T) {
t.Run("空目标", func(_ *testing.T) {
wrr := NewWeightedRoundRobin()
got := wrr.Select([]*Target{})
if got != nil {
@ -189,7 +189,7 @@ func TestWeightedRoundRobin_Select(t *testing.T) {
}
})
t.Run("所有目标权重为0或不健康", func(t *testing.T) {
t.Run("所有目标权重为0或不健康", func(_ *testing.T) {
wrr := NewWeightedRoundRobin()
targets := []*Target{
{URL: "http://backend1:8080", Weight: 0},
@ -204,7 +204,7 @@ func TestWeightedRoundRobin_Select(t *testing.T) {
}
})
t.Run("跳过不健康目标", func(t *testing.T) {
t.Run("跳过不健康目标", func(_ *testing.T) {
wrr := NewWeightedRoundRobin()
targets := []*Target{
{URL: "http://backend1:8080", Weight: 5},
@ -228,7 +228,7 @@ func TestWeightedRoundRobin_Select(t *testing.T) {
// TestLeastConnections_Select 测试最少连接负载均衡选择器。
func TestLeastConnections_Select(t *testing.T) {
t.Run("选择最少连接", func(t *testing.T) {
t.Run("选择最少连接", func(_ *testing.T) {
lc := NewLeastConnections()
target1 := &Target{URL: "http://backend1:8080", Connections: 10}
target1.Healthy.Store(true)
@ -247,7 +247,7 @@ func TestLeastConnections_Select(t *testing.T) {
}
})
t.Run("连接数相等时选择第一个", func(t *testing.T) {
t.Run("连接数相等时选择第一个", func(_ *testing.T) {
lc := NewLeastConnections()
targets := []*Target{
{URL: "http://backend1:8080", Connections: 5},
@ -265,7 +265,7 @@ func TestLeastConnections_Select(t *testing.T) {
}
})
t.Run("空目标", func(t *testing.T) {
t.Run("空目标", func(_ *testing.T) {
lc := NewLeastConnections()
got := lc.Select([]*Target{})
if got != nil {
@ -273,7 +273,7 @@ func TestLeastConnections_Select(t *testing.T) {
}
})
t.Run("跳过不健康目标", func(t *testing.T) {
t.Run("跳过不健康目标", func(_ *testing.T) {
lc := NewLeastConnections()
targets := []*Target{
{URL: "http://backend1:8080", Connections: 1},
@ -291,7 +291,7 @@ func TestLeastConnections_Select(t *testing.T) {
}
})
t.Run("所有目标都不健康", func(t *testing.T) {
t.Run("所有目标都不健康", func(_ *testing.T) {
lc := NewLeastConnections()
targets := []*Target{
{URL: "http://backend1:8080", Connections: 1},
@ -309,7 +309,7 @@ func TestLeastConnections_Select(t *testing.T) {
// TestIPHash_Select 测试IP哈希负载均衡选择器。
func TestIPHash_Select(t *testing.T) {
t.Run("相同IP返回相同目标", func(t *testing.T) {
t.Run("相同IP返回相同目标", func(_ *testing.T) {
ih := NewIPHash()
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -333,7 +333,7 @@ func TestIPHash_Select(t *testing.T) {
}
})
t.Run("不同IP分配", func(t *testing.T) {
t.Run("不同IP分配", func(_ *testing.T) {
ih := NewIPHash()
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -359,7 +359,7 @@ func TestIPHash_Select(t *testing.T) {
}
})
t.Run("空目标", func(t *testing.T) {
t.Run("空目标", func(_ *testing.T) {
ih := NewIPHash()
got := ih.SelectByIP([]*Target{}, "192.168.1.1")
if got != nil {
@ -367,7 +367,7 @@ func TestIPHash_Select(t *testing.T) {
}
})
t.Run("Select方法使用空IP", func(t *testing.T) {
t.Run("Select方法使用空IP", func(_ *testing.T) {
ih := NewIPHash()
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -382,7 +382,7 @@ func TestIPHash_Select(t *testing.T) {
}
})
t.Run("跳过不健康目标", func(t *testing.T) {
t.Run("跳过不健康目标", func(_ *testing.T) {
ih := NewIPHash()
targets := []*Target{
createHealthyTarget("http://backend1:8080", false),
@ -401,7 +401,7 @@ func TestIPHash_Select(t *testing.T) {
// TestConnectionsAtomic 测试连接数的原子操作。
func TestConnectionsAtomic(t *testing.T) {
t.Run("IncrementConnections", func(t *testing.T) {
t.Run("IncrementConnections", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080", Connections: 0}
target.Healthy.Store(true)
@ -416,7 +416,7 @@ func TestConnectionsAtomic(t *testing.T) {
}
})
t.Run("DecrementConnections", func(t *testing.T) {
t.Run("DecrementConnections", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080", Connections: 5}
target.Healthy.Store(true)
@ -431,7 +431,7 @@ func TestConnectionsAtomic(t *testing.T) {
}
})
t.Run("并发IncrementConnections", func(t *testing.T) {
t.Run("并发IncrementConnections", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080", Connections: 0}
target.Healthy.Store(true)
@ -450,7 +450,7 @@ func TestConnectionsAtomic(t *testing.T) {
}
})
t.Run("并发DecrementConnections", func(t *testing.T) {
t.Run("并发DecrementConnections", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080", Connections: 1000}
target.Healthy.Store(true)
@ -469,7 +469,7 @@ func TestConnectionsAtomic(t *testing.T) {
}
})
t.Run("混合增减操作", func(t *testing.T) {
t.Run("混合增减操作", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080", Connections: 100}
target.Healthy.Store(true)
@ -498,7 +498,7 @@ func TestConnectionsAtomic(t *testing.T) {
}
})
t.Run("允许负值", func(t *testing.T) {
t.Run("允许负值", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080", Connections: 0}
target.Healthy.Store(true)
@ -511,7 +511,7 @@ func TestConnectionsAtomic(t *testing.T) {
// TestHealthStatus 测试健康状态操作。
func TestHealthStatus(t *testing.T) {
t.Run("IsHealthy", func(t *testing.T) {
t.Run("IsHealthy", func(_ *testing.T) {
tests := []struct {
name string
target *Target
@ -530,7 +530,7 @@ func TestHealthStatus(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Run(tt.name, func(_ *testing.T) {
got := tt.target.Healthy.Load()
if got != tt.want {
t.Errorf("Healthy.Load() = %v, want %v", got, tt.want)
@ -539,7 +539,7 @@ func TestHealthStatus(t *testing.T) {
}
})
t.Run("SetHealthy", func(t *testing.T) {
t.Run("SetHealthy", func(_ *testing.T) {
target := &Target{URL: "http://backend1:8080"}
target.Healthy.Store(true)
@ -559,7 +559,7 @@ func TestHealthStatus(t *testing.T) {
// TestFilterHealthy 测试filterHealthy辅助函数。
func TestFilterHealthy(t *testing.T) {
t.Run("过滤健康目标", func(t *testing.T) {
t.Run("过滤健康目标", func(_ *testing.T) {
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
createHealthyTarget("http://backend2:8080", false),
@ -580,7 +580,7 @@ func TestFilterHealthy(t *testing.T) {
}
})
t.Run("全部健康", func(t *testing.T) {
t.Run("全部健康", func(_ *testing.T) {
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
createHealthyTarget("http://backend2:8080", true),
@ -592,7 +592,7 @@ func TestFilterHealthy(t *testing.T) {
}
})
t.Run("全部不健康", func(t *testing.T) {
t.Run("全部不健康", func(_ *testing.T) {
targets := []*Target{
createHealthyTarget("http://backend1:8080", false),
createHealthyTarget("http://backend2:8080", false),
@ -604,14 +604,14 @@ func TestFilterHealthy(t *testing.T) {
}
})
t.Run("空切片", func(t *testing.T) {
t.Run("空切片", func(_ *testing.T) {
got := filterHealthy([]*Target{})
if len(got) != 0 {
t.Errorf("len(filterHealthy) = %d, want 0", len(got))
}
})
t.Run("nil切片", func(t *testing.T) {
t.Run("nil切片", func(_ *testing.T) {
got := filterHealthy(nil)
if len(got) != 0 {
t.Errorf("len(filterHealthy) = %d, want 0", len(got))
@ -648,7 +648,7 @@ func TestBalancerInterface(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Run(tt.name, func(_ *testing.T) {
got := tt.balancer.Select(targets)
if got == nil {
t.Fatal("Select() = nil, want non-nil")
@ -662,7 +662,7 @@ func TestBalancerInterface(t *testing.T) {
// TestConsistentHash 测试一致性哈希负载均衡器。
func TestConsistentHash(t *testing.T) {
t.Run("创建默认配置", func(t *testing.T) {
t.Run("创建默认配置", func(_ *testing.T) {
ch := NewConsistentHash(0, "ip")
if ch == nil {
t.Fatal("NewConsistentHash() = nil")
@ -675,14 +675,14 @@ func TestConsistentHash(t *testing.T) {
}
})
t.Run("自定义虚拟节点数", func(t *testing.T) {
t.Run("自定义虚拟节点数", func(_ *testing.T) {
ch := NewConsistentHash(200, "uri")
if ch.GetVirtualNodes() != 200 {
t.Errorf("GetVirtualNodes() = %d, want 200", ch.GetVirtualNodes())
}
})
t.Run("SelectByKey 空目标", func(t *testing.T) {
t.Run("SelectByKey 空目标", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
got := ch.SelectByKey([]*Target{}, "192.168.1.1")
if got != nil {
@ -690,7 +690,7 @@ func TestConsistentHash(t *testing.T) {
}
})
t.Run("SelectByKey 单目标", func(t *testing.T) {
t.Run("SelectByKey 单目标", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -705,7 +705,7 @@ func TestConsistentHash(t *testing.T) {
}
})
t.Run("SelectByKey 多目标相同键", func(t *testing.T) {
t.Run("SelectByKey 多目标相同键", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -727,7 +727,7 @@ func TestConsistentHash(t *testing.T) {
}
})
t.Run("GetStats", func(t *testing.T) {
t.Run("GetStats", func(_ *testing.T) {
ch := NewConsistentHash(100, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -745,7 +745,7 @@ func TestConsistentHash(t *testing.T) {
}
})
t.Run("Rebuild 跳过不健康目标", func(t *testing.T) {
t.Run("Rebuild 跳过不健康目标", func(_ *testing.T) {
ch := NewConsistentHash(10, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", false),
@ -763,7 +763,7 @@ func TestConsistentHash(t *testing.T) {
// TestConsistentHashSelectExcludingByKey 测试一致性哈希排除选择功能。
func TestConsistentHashSelectExcludingByKey(t *testing.T) {
t.Run("空排除列表", func(t *testing.T) {
t.Run("空排除列表", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -789,7 +789,7 @@ func TestConsistentHashSelectExcludingByKey(t *testing.T) {
}
})
t.Run("部分排除", func(t *testing.T) {
t.Run("部分排除", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -814,7 +814,7 @@ func TestConsistentHashSelectExcludingByKey(t *testing.T) {
}
})
t.Run("全部排除", func(t *testing.T) {
t.Run("全部排除", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -832,7 +832,7 @@ func TestConsistentHashSelectExcludingByKey(t *testing.T) {
}
})
t.Run("排除包含nil目标", func(t *testing.T) {
t.Run("排除包含nil目标", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -853,7 +853,7 @@ func TestConsistentHashSelectExcludingByKey(t *testing.T) {
}
})
t.Run("并发安全", func(t *testing.T) {
t.Run("并发安全", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -881,7 +881,7 @@ func TestConsistentHashSelectExcludingByKey(t *testing.T) {
wg.Wait()
})
t.Run("相同键一致性", func(t *testing.T) {
t.Run("相同键一致性", func(_ *testing.T) {
ch := NewConsistentHash(150, "ip")
targets := []*Target{
createHealthyTarget("http://backend1:8080", true),
@ -925,7 +925,7 @@ func TestIsValidAlgorithm(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Run(tt.name, func(_ *testing.T) {
got := IsValidAlgorithm(tt.algorithm)
if got != tt.want {
t.Errorf("IsValidAlgorithm(%q) = %v, want %v", tt.algorithm, got, tt.want)

View File

@ -197,7 +197,7 @@ func (c *ConsistentHash) GetVirtualNodes() int {
return c.virtualNodes
}
// Stats 返回一致性哈希统计信息。
// ConsistentHashStats 返回一致性哈希统计信息。
type ConsistentHashStats struct {
// VirtualNodes 每个目标的虚拟节点数量
VirtualNodes int