无法打印完整的字符串数组

时间:2019-02-02 09:09:31

标签: function go

我正在尝试从一个函数返回一个字符串数组,但是它仅输出最后一个索引位置值。这是我的代码和输出。

package main

import (
    "fmt"
)

func main() {

    myquote := varFunc("Go", "Bunny", "Let's", "Change", "ourself")
    fmt.Println("here also:", myquote)

}

func varFunc(s ...string) string {

    fmt.Println(s)

    fmt.Printf("%T\n", s)
    quote := ""
    for _, v := range s {

        quote = v
        fmt.Println("init: ", quote)
    }
    fmt.Println("is there: ", quote)
    return quote

}

游乐场:https://play.golang.org/p/jyZDL5oPmcz

我的输出:

[Go Bunny Let's Change ourself]
[]string
init:  Go
init:  Bunny
init:  Let's
init:  Change
init:  ourself
is there:  ourself
here also: ourself

Program exited.

2 个答案:

答案 0 :(得分:3)

因为您正在用=运算符覆盖最后一个值。如果我正确理解,您正在尝试将数组打印为单个字符串。将+=符号应用于qoute,它应该对您有用。

package main

import (
    "fmt"
)

func main() {

    myquote := varFunc("Go", "Bunny", "Let's", "Change", "ourself")
    fmt.Println("here also:", myquote)

}

func varFunc(s ...string) string {

    fmt.Println(s)

    fmt.Printf("%T\n", s)
    quote := ""
    for _, v := range s {

        quote += v + " "
        fmt.Println("init: ", quote)
    }
    fmt.Println("is there: ", quote)
    return quote

}

答案 1 :(得分:2)

您的代码返回quote的最后一个值,它是字符串数组s上一次迭代的值。

如果您需要返回字符串数组s,请返回它。不好意思,请问我。

func varFunc(s ...string) []string {

    fmt.Println(s)

    fmt.Printf("%T\n", s)
    quote := ""
    for _, v := range s {

        quote = v
        fmt.Println("init: ", quote)
    }
    fmt.Println("is there: ", quote)
    return s

}