String 如何检查附加的切片是否等于字符串?

String 如何检查附加的切片是否等于字符串?,string,go,slice,String,Go,Slice,因此,我们的计划是在切片中包含一个字符串,例如“a”,一旦它变成“a100”,那么就停止运行一个for循环,该循环将数字添加到它的末尾。当我尝试下面的代码时,它会显示“(不匹配的类型[]字符串和字符串)”,这是因为我必须将切片转换为字符串吗?如果是,我该怎么做?谢谢 package main import "fmt" func main() { var s []string s = append(s, "a") fmt.Println(s) for i :=

因此,我们的计划是在切片中包含一个字符串,例如“a”,一旦它变成“a100”,那么就停止运行一个for循环,该循环将数字添加到它的末尾。当我尝试下面的代码时,它会显示“(不匹配的类型[]字符串和字符串)”,这是因为我必须将切片转换为字符串吗?如果是,我该怎么做?谢谢

package main

import "fmt"

func main() {
    var s []string
    s = append(s, "a")
    fmt.Println(s)
    for i := 0; i <= 1000; i++ {
        s = append(s, i)
        if s == "a10" {
            fmt.Println("Worked", s)
        } else {
            fmt.Println(s)
        }
    }
}
主程序包
输入“fmt”
func main(){
var s[]字符串
s=附加(s,“a”)
fmt.Println(s)

对于i:=0;i您可以通过执行以下操作将
[]字符串
转换为字符串`:

import "strings"

//...

if strings.Join(s, "") == "a10" {
      fmt.Println("Worked", s)
} else {
      fmt.Println(s)
}
您还需要将
i
(一个int)转换为
字符串
,最有可能使用的是
strconv.Itoa
。最后,您编写的代码如下所示:

主程序包
进口(
“fmt”
“strconv”
“字符串”
)
func main(){
var s[]字符串
s=附加(s,“a”)
fmt.Println(s)

对于i:=0;我感谢您的回答,尽管我遗漏了我也需要将i(int)转换为字符串。您可以用类似的方法进行转换吗?谢谢您的更新评论。我忘记了我需要从切片中删除先前添加的(i)。否则我会得到像[a23][a234]之类的东西,而不是[a1][a2]请注意,strings.Join()并不便宜,特别是当切片开始变得相当长或其中包含长字符串时。它比使用
+
(或
+=
)追加要便宜得多,但字符串的不可变性仍然意味着您要分配一个完整的新字节数组(大小等于字符串切片中长度的总和)在每个strings.Join()调用上。我不确定您的计划是什么,但您最好使用[]字节而不是[]字符串。最终结果是尝试创建类似于nonce的内容。因此,我将生成一个散列,并不断追加1、2、3…123等的数字(例如不是0123),直到散列以4 0开头。
package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    var s []string
    s = append(s, "a")
    fmt.Println(s)
    for i := 0; i <= 1000; i++ {
        s = append(s, strconv.Itoa(i))
        if strings.Join(s, "") == "a01" {
            fmt.Println("Worked", s)
            return
        } else {
            fmt.Println(s)
        }
    }
}
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var s := "a"
    fmt.Println(s)
    for i := 0; i <= 1000; i++ {
        s += strconv.Itoa(i)
        if s == "a01" {
            fmt.Println("Worked", s)
            return
        } else {
            fmt.Println(s)
        }
    }
}
for i := 0; i <= 1000; i++ {
    s := []string{"a"}
    s = append(s, strconv.Itoa(i))
    if strings.Join(s, "") == "a10" {
        fmt.Println("Worked", s)
        return
    } else {
        fmt.Println(s)
    }
}