面试题答案
一键面试package main
import (
"fmt"
)
type Inner struct {
Value int
}
type Outer struct {
Name string
InnerSlice []Inner
}
func formatOuter(outer Outer) string {
var innerValuesStr string
for i, inner := range outer.InnerSlice {
if i > 0 {
innerValuesStr += ", "
}
innerValuesStr += fmt.Sprintf("%d", inner.Value)
}
return fmt.Sprintf("%s: [%s]", outer.Name, innerValuesStr)
}
格式化过程中可能遇到的问题及解决方法:
- 空切片处理:如果
InnerSlice
为空,代码需要正确处理,生成Name: []
的格式。上述代码通过直接在空切片时生成空字符串来处理。 - 性能问题:在循环中使用
fmt.Sprintf
和字符串拼接可能会有性能问题。在大量数据场景下,可以考虑使用strings.Builder
来提高性能。例如:
func formatOuterWithBuilder(outer Outer) string {
var sb strings.Builder
sb.WriteString(outer.Name)
sb.WriteString(": [")
for i, inner := range outer.InnerSlice {
if i > 0 {
sb.WriteString(", ")
}
fmt.Fprintf(&sb, "%d", inner.Value)
}
sb.WriteString("]")
return sb.String()
}
这里使用strings.Builder
避免了每次字符串拼接都创建新的字符串,提高了性能。