如何在Golang中正确使用可变参数args?

时间:2019-06-13 01:52:14

标签: go

我是Go的完全入门者,我正在尝试将可变参数args作为字符串传递给encodeit方法,该字符串将对该字符串进行哈希处理,否则传递一个空字符串。我不会打印出哈希字符串。

我尝试了多种方法,但是无法正常工作。

package main

import(
    "crypto/sha512"
    "encoding/hex"
    "fmt"
)

func encodeit(content string) string {
    sha_512 := sha512.New()
    sha_512.Write([]byte(content))
    contentH := sha_512.Sum(nil)
    contentHash := hex.EncodeToString([]byte(contentH))
    return contentHash
}

func some(payload ...string) {
    if len(payload) == 1 {
        contentHash := encodeit(payload)
    } else {
        contentHash := encodeit("")
    }
    return contentHash
}

func main() {
    fmt.Println(some(`{"stockSymbol": "TSLA"}`))
}

这是错误日志

# command-line-arguments
.\stackOverflow.go:19:26: cannot use payload (type []string) as type string in argument to encodeit
.\stackOverflow.go:23:2: too many arguments to return
.\stackOverflow.go:23:9: undefined: contentHash
.\stackOverflow.go:27:18: some("{\"stockSymbol\": \"TSLA\"}") used as value

2 个答案:

答案 0 :(得分:1)

当使用省略号(...)时,

payload成为字符串数组[[string])。可以在循环中使用键值对它进行迭代:

func printEncoded(payload ...string) {
    for i, value := range payload {
        fmt.Println(i, encode(value))
    }
}

使用printEncoded("TSLA","AMD","DOW"),您将不必创建自己的[]string数组作为参数([]string{"TSLA","AMD","DOW"})。

您还将要看一下JSON软件包进行解析:{"stockSymbol": "TSLA"}

Fixed Playground

答案 1 :(得分:0)

检查函数的返回值:

func some(payload ...string) string

您错过了返回类型string