来自博客golang数组切片和字符串

时间:2016-09-26 10:39:44

标签: go

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,但它一直在说不匹配的类型。

1 个答案:

答案 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
        }
    }
}

工作代码:https://play.golang.org/p/feqeAlb80z