Go语言中如何对字符串指针执行空格修剪与HTML转义操作
错误原因
报错是类型不匹配导致的:
strings.TrimSpace和html.EscapeString两个函数的入参要求为string类型,但你直接传入了*string类型的u.Username- 两个函数执行后返回的是
string类型,不能直接赋值给*string类型的Username字段
解决方法
在u.Username非空的判断分支里,先对指针解引用拿到原始字符串值,处理完成后再取处理后字符串的地址赋值回去即可。
修正后的代码如下:
import ( "html" "strings" ) type User struct { Username *string `json:"username"` Email string `json:"email"` Password string `json:"password"` } func (u *User) PrepareUser() { if u.Username != nil { // 先解引用拿到原始字符串,处理后取地址赋值回去 processed := html.EscapeString(strings.TrimSpace(*u.Username)) u.Username = &processed // 可选逻辑:如果处理后是空字符串需要设为nil,可开启下面的判断 // if processed == "" { // u.Username = nil // } } u.Email = html.EscapeString(strings.TrimSpace(u.Email)) u.Password = strings.TrimSpace(u.Password) }
可选扩展(Go 1.18+支持)
如果项目使用Go 1.18及以上版本,也可以封装通用的取指针工具函数简化写法:
// 通用取指针工具函数 func ptr[T any](v T) *T { return &v } // 分支内逻辑可以简化为一行 u.Username = ptr(html.EscapeString(strings.TrimSpace(*u.Username)))
内容的提问来源于stack exchange,提问作者Sanzhar Alimkhanov
相关产品推荐
相关产品推荐

