Golang中结构项字段的访问索引

Golang中结构项字段的访问索引,go,Go,如果是字符串,是否有可能在struct字段中使用某些索引更改字符 我的意思是我可以用字符串类型进行这样的操作: func main() { v := "Helv" v[3] = "p" } 如何对结构字段执行相同的操作?下面的作业不起作用 type ik struct { a int b string } func main() { f := ik{1, "Pasis"} fmt.Println(f.b) f.b[2] = "r" }

如果是字符串,是否有可能在struct字段中使用某些索引更改字符

我的意思是我可以用字符串类型进行这样的操作:

func main() {
    v := "Helv"
    v[3] = "p"
}
如何对结构字段执行相同的操作?下面的作业不起作用

type ik struct {
    a int
    b string
}

func main() {
    f := ik{1, "Pasis"}
    fmt.Println(f.b)
    f.b[2] = "r"
}

由于字符串在Go中是不可变的,因此需要将另一个字符串重新分配给变量。您可以通过以下切片技巧实现这一点

chars := "Helv"
// To replace the character in i'th index,
chars = chars[:i] + "p" + chars[i+1:]
所以,你的程序变成

type ik struct {
    a int
    b string
}

func main() {
    chars := "Helv"
    chars = chars[:3] + "p" + chars[4:]
    fmt.Println(chars)

    f := ik{1, "Pasis"}
    fmt.Println(f.b)
    f.b = f.b[:2] + "r" + f.b[3:]
    fmt.Println(f.b)
}

转到游戏场:

不,您根本无法分配给v[3]。字符串是不可变的,
v[3]=“p”
是编译时错误。可能无法分配字符串索引表达式(请参阅)。字符串是不可变的,只需用所需内容替换字符串即可。您可以创建一个具有正确内容的新字符串。查看包字符串以获得有用的字符串函数,并再次重做Go教程以获得该语言的基础知识。