如何在切片

时间:2017-07-09 18:50:06

标签: string go slice

在示例中,一切正常。但他们不使用变量a并立即显示它https://play.golang.org/p/O0XwtQJRej

但我有一个问题:

package main
import (
    "fmt"
    "strings"
)

func main() {
    str := "fulltext"
    var slice []string
    slice = strings.Split(str , "")

    fmt.Printf("anwer: ", slice)
}

答案中有多余的字符,例如

  

%! (EXTRA [] string =

P.S。我知道我需要使用append将元素添加到切片中,但现在我不明白如何在这里应用append。

UP: 现在我有了答案:

  

anwer:%!(EXTRA [] string = [f u l l t e x t])

但我只需要:

  

[f u l l t e x t]

但我不明白我应该如何更改代码?

2 个答案:

答案 0 :(得分:2)

问题不在于将strings.Split()的返回值赋值给局部变量slice,这完全没问题。

问题在于您使用了需要格式字符串的fmt.Printf(),并且基于该格式字符串,它格式化/替换了预期的参数。由于您的格式字符串不包含任何动词,因此fmt.Printf()调用不需要参数,但是您将其传递一个,因此它会用这些额外的字符(错误字符串类型)发出信号。

提供有效的格式字符串,表明您将提供1个参数,即切片:

fmt.Printf("answer: %v", slice)

这样,输出为:

answer: [f u l l t e x t]

或者使用fmt.Println(),它不期望格式字符串:

fmt.Println("answer:", slice)

(请注意冒号后面没有空格,因为fmt.Println()如果其中一个值为string类型,则会在2个值之间添加空格。

输出是一样的。试试Go Playground上的示例。

保持fmt.Printf(),当参数涉及string值时,%q动词通常更有用,因为它会打印引用的字符串值,更容易发现某些错误(例如不可见的字符,或者如果string包含空格,它将变得明显):

fmt.Printf("answer: %q\n", slice)

输出(在Go Playground上试试):

answer: ["f" "u" "l" "l" "t" "e" "x" "t"]

如果你想附加一个函数调用的结果,它的外观如下:

slice := []string{"initial", "content"}
slice = append(slice, strings.Split(str, "")...)

fmt.Printf("answer: %q\n", slice)

现在输出(在Go Playground上试试):

answer: ["initial" "content" "f" "u" "l" "l" "t" "e" "x" "t"]

答案 1 :(得分:0)

给printf指定期望的格式,在大多数情况下,%v没问题。

package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "fulltext"
    var slice []string
    slice = strings.Split(str, "")

    fmt.Printf("anwer: %v", slice)
}

请参阅https://golang.org/pkg/fmt/了解详情。