如何在golang中有效地连接字符串数组和字符串

Rah*_*hul 7 go

我在golang中有一堆字符串和[]字符串,我需要连接它们.但由于某些原因,我需要摆脱很多空白.

这是代码

    tests := strings.TrimSpace(s[0])
    dep_string := make ([]string, len(tests) + len(sfinal))
    dep_string = append (dep_string,tests)
    for _,v := range sfinal {
      dep_string = append(dep_string,v)
    }
    fmt.Println("dep_String is ",dep_string)


Input: 
s[0] = "filename"
sfinal = [test test1]

expected output
[filename test test1]

actual output
[     filename test test1]
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪; 即使使用TrimSpace后我也无法摆脱多余的空间.有没有有效的方法来连接它们?

Vit*_*ius 7

空白是由dep_string中的所有空元素引起的.当您使用make函数时,它会创建一个具有指定长度和容量的切片,并填充一堆任何内容.然后,当您使用append时,它会看到切片已达到其最大容量,扩展切片,然后在所有内容之后添加您的元素.解决方案是制作一个能够容纳所有元素的切片,但初始长度为零:

dep_string := make ([]string, 0, len(tests) + len(sfinal))
Run Code Online (Sandbox Code Playgroud)

strings.TrimSpace是不必要的.您可以在http://blog.golang.org/slices上阅读更多内容


Bil*_*ose 0

当你进行赋值时dep_string := make ([]string, len(tests) + len(sfinal)),Go 将分配的内存清零,因此前面有空字符串dep_stringlen(tests) + len(sfinal)正如现在所写的,在所有这些归零的字符串之后,您将附加到切片的末尾。

运行此命令以查看这些空白出现在代码中的位置。您可以通过制作长度为 0 且容量为 0 的切片来修复len(tests) + len(sfinal)此问题。然后您可以使用 来连接它们strings.Join