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中,如果变量具有特定类型,则不能为其指定不同类型的值。