登录
首页 >  Golang >  Go问答

v无法被分配,是数组的引用问题?

来源:stackoverflow

时间:2024-02-26 16:36:27 169浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《v无法被分配,是数组的引用问题?》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我正在尝试解决一个难题来练习我的围棋。但是,我有点卡住了,这个错误并没有多大帮助。

./prog.go:22:23: 无法分配给 v[j] ./prog.go:22:23: 无法分配给 v[wlen - 1 - j]

func SpinWords(str string) string {
    ws := strings.Split(str, " ")
    for i := 0; i < len(ws); i++ {
        v := ws[i]
        wLen := len(v)

        if wLen > 4 {
            for j := 0; j < wLen/2; j++ {
                v[j], v[wLen-1-j] = v[wLen-1-j], v[j]
            }
            ws[i] = v
        }
    }

    return strings.Join(ws, " ")
}

这里几乎可以工作的代码:https://play.golang.org/p/j9byk642bfa


解决方案


您无法分配给 v 的元素,因为 v 是一个字符串,并且字符串是不可变的。您可以先将字符串转换为 []byte,然后使用其中的元素,但如果您的字符串包含多字节字符,则不安全。

v:=[]byte(ws[i])

或者您可以将字符串转换为 []rune 并使用它:

v:=[]rune(ws[i])

然后您可以分配给 v 的元素,完成后将其转换回字符串:

str:=string(v)

如果您想执行该操作,则必须将单词从字符串转换为 []rune

这段代码有效:)

package main

import (
    "fmt"
    "strings"
)

func main() {
    result := SpinWords("Welcome to the jungle we got fun and games")

    fmt.Println(result)
}

func SpinWords(str string) string {
    ws := strings.Split(str, " ")
    for i := 0; i < len(ws); i++ {
        v := ws[i]
        wLen := len(v)

        if wLen > 4 {
            vinrune := []rune(v)
            for j := 0; j < wLen/2; j++ {
                vinrune[j], vinrune[wLen-1-j] = vinrune[wLen-1-j], vinrune[j]
            }
            v = string(vinrune)
            ws[i] = v
        }
    }

    return strings.Join(ws, " ")
}

好了,本文到此结束,带大家了解了《v无法被分配,是数组的引用问题?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>