面试题答案
一键面试设计思路
- 字符串拆分:使用
strings.Split
函数将输入字符串按';'
拆分,得到每个user:action
对的切片。 - 查找特定用户:遍历切片,使用
strings.SplitN
函数将每个user:action
对按':'
拆分,找到特定用户(如user3
)。 - 替换操作:找到特定用户后,替换其
action
部分。 - 重新拼接字符串:使用
strings.Builder
高效地重新拼接修改后的user:action
对。 - 并发安全:使用
sync.Mutex
来保护共享资源,防止并发访问时的数据竞争。 - 性能优化:尽量减少内存分配和字符串复制操作,使用
strings.Builder
避免每次拼接都产生新的字符串。
关键代码片段
package main
import (
"fmt"
"strings"
"sync"
)
var mu sync.Mutex
func replaceAction(input string, targetUser string, newAction string) string {
mu.Lock()
defer mu.Unlock()
parts := strings.Split(input, ";")
var result strings.Builder
for i, part := range parts {
subParts := strings.SplitN(part, ":", 2)
if len(subParts) != 2 {
continue
}
user := subParts[0]
action := subParts[1]
if user == targetUser {
action = newAction
}
if i > 0 {
result.WriteByte(';')
}
result.WriteString(user)
result.WriteByte(':')
result.WriteString(action)
}
return result.String()
}
你可以这样调用这个函数:
func main() {
input := "user1:action1;user2:action2;user3:action3;user4:action4"
targetUser := "user3"
newAction := "newAction"
output := replaceAction(input, targetUser, newAction)
fmt.Println(output)
}