Go &引用;不能在赋值中用作类型字符串;

Go &引用;不能在赋值中用作类型字符串;,go,Go,我有以下字符串: -1,856,32,0,0,0.000000,0.000000 0,0,0,137,0,0,0,140 0,0,101,0,0,0,42,0 0,0,0,0,0,0,0,0 0,0,0,0,0,0,554,0 -1,841,1,0,0,0.000000,0.000000 0,0,0,163,0,0,0,182 0,0,120,0,0,0,43,0 0,0,0,0,0,0,0,0 0,0,0,0,0,0,517,0 然后我使用分隔符-1将其拆分,这意味着将有一个由2个元素组成的

我有以下字符串:

-1,856,32,0,0,0.000000,0.000000
0,0,0,137,0,0,0,140
0,0,101,0,0,0,42,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,554,0
-1,841,1,0,0,0.000000,0.000000
0,0,0,163,0,0,0,182
0,0,120,0,0,0,43,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,517,0
然后我使用分隔符
-1
将其拆分,这意味着将有一个由2个元素组成的数组(我们称之为
array1
)。现在,假设在
array1
的第一个元素上,我想用
\r\n
再次拆分它,它将是一个由5个元素组成的数组(
array2
)。接下来,我想使用
作为分隔符来拆分
数组2
的第一个元素,但它给了我一个警告:

cannot use strings.Split(d0, ",") (type []string) as type string in assignment
代码如下:

array1 := strings.Split(string(b), "-1,")
for k, chunk := range chunks{
    // skip the first
    // because it's blank
    // duno why
    if k == 0{
        continue
    }

    array2 := strings.Split(chunk, "\r\n")

    d0 := data[0]
    d0 = strings.Split(d0, ",") // this give me error: cannot use strings.Split(d0, ",") (type []string) as type string in assignment
    lat, lng := d0[4], d0[5]
    // 
    //  TODO: match lat and lng againts lamp table in DB which is now in $coords
    //  
    fmt.Println(lat, lng)

    data = data[1:]
    for _, v := range data{
        _ = v
    }
}

您的问题的答案在您注意到的错误消息中:

无法使用字符串。拆分(d0,“,”)(类型[]字符串)作为分配中的类型字符串

原因是您将
d0
声明为具有类型“string”,然后尝试为其分配一段字符串。由于这些类型不同,编译器会生成您列出的错误并拒绝编译您的程序

d0 := data[0] // Here we declare d0 as a string and assign a value to it
d0 = strings.Split(d0, ",") // ERROR: "Split" returns a []string but d0 is a string!
要解决这个问题,您只需声明一个新变量,它是字符串的一部分,而不是尝试重用名称
d0

d0 := data[0] // Define d0 as a string
ss := strings.Split(d0, ",") // OK: Define ss as a []string

d0
具有类型
string
,拆分它的结果具有类型
[]string
。您无法为字符串分配片。是的,这是我所期望的,但它似乎是
d0
一个
[]字符串,因此它给了我一个错误。不,您得到错误是因为
d0
是一个
字符串
,而不是
[]字符串
。如果它是
[]字符串
,则尝试将其传递到
拆分
时会出现不同的错误。
Split
的返回类型与其参数类型不同,因此您不能将
d0
传递给Split并将结果分配给它。啊,我明白了您的意思,因此Go不能重新分配给其他类型。在这种情况下,我必须将结果分配给一个名为
d1
的新变量,错误就消失了。非常感谢@mkopriva.Correct,在Go中,如果变量具有特定类型,则不能为其指定不同类型的值。