type path []byte
func (p path) ToUpper() {
for i, b := range p {
if 'a' <= b && b <= 'z' {
p[i] = b + 'A' - 'a'
}
}
}
func main() {
pathName := path("/usr/bin/tso")
pathName.ToUpper()
fmt.Printf("%s\n", pathName)
}
[练习:转换ToUpper方法以使用指针接收器并查看其行为是否发生变化。]
如何使用指针方法?我试图取消引用* p并尝试从范围中删除i,但它一直在说不匹配的类型。
答案 0 :(得分:1)
由于path
是[]byte
上定义的恰好是切片的类型,因此不需要使用指针接收器,因为切片类型已经是引用类型。
但是,如果需要指针接收器,则需要取消引用方法中的指针值以获取基础切片值:
func (p *path) ToUpper() {
for i, b := range *p { // dereference p with a * to get the
// underlying []byte slice
if 'a' <= b && b <= 'z' {
(*p)[i] = b + 'A' - 'a' // derefernce p here as well
}
}
}