diff --git a/internal/addrs/module.go b/internal/addrs/module.go index 4ae72b4e42..04ceac7625 100644 --- a/internal/addrs/module.go +++ b/internal/addrs/module.go @@ -33,11 +33,21 @@ func (m Module) String() string { if len(m) == 0 { return "" } - var steps []string + size := 0 for _, s := range m { - steps = append(steps, "module", s) + size += len(s) } - return strings.Join(steps, ".") + var sb strings.Builder + // 8 is len("module.") + len(".") + sb.Grow(8*len(m) + size) + for i, s := range m { + sb.WriteString("module.") + sb.WriteString(s) + if i != len(m)-1 { + sb.WriteString(".") + } + } + return sb.String() } func (m Module) Equal(other Module) bool { diff --git a/internal/addrs/module_test.go b/internal/addrs/module_test.go index 829704faf1..86065df4c7 100644 --- a/internal/addrs/module_test.go +++ b/internal/addrs/module_test.go @@ -55,3 +55,17 @@ func TestModuleEqual_false(t *testing.T) { }) } } + +func BenchmarkModuleStringShort(b *testing.B) { + module := Module{"a", "b"} + for n := 0; n < b.N; n++ { + module.String() + } +} + +func BenchmarkModuleStringLong(b *testing.B) { + module := Module{"southamerica-brazil-region", "user-regional-desktop", "user-name"} + for n := 0; n < b.N; n++ { + module.String() + } +}