关闭不返回所需的输出

时间:2018-11-15 17:43:21

标签: function go closures

我想知道为什么我的函数不返回行。我使用的是闭包,我的目标是显示解码文本中的每一行。我能够使用Python实现此目标。

这是我的Python代码:

def get_line():
    lines = base64_decode()
    index = 0

    def closure():
        nonlocal index

        def go_next():
            nonlocal index

            next_line = line[index]
            index += 1

            return next_line

        if index != len(lines):
            return go_next()
        else:
            index = 0
            return go_next()

    return closure

这是我的Go代码:

package main

import (
    "encoding/base64"
    "fmt"
    "log"
    "strings"
)

func base64Decode() string {
    str := "REDACTED"
    data, err := base64.StdEncoding.DecodeString(str)

    if err != nil {
        log.Fatal("Error:", err)
    }

    return string(data)
}

func getLine(str string) func() string {
    i := 0
    lines := strings.Split(str, "\n")

    return func() string {
        if i != len(lines) {
            nextLine := lines[i]

            i++
            return nextLine
        }

        return ""
    }
}

func main() {
    fmt.Println(getLine(base64Decode()))
}

运行此命令时会发生的情况是仅打印:0x1095850,而不是文本中的This is the first line

1 个答案:

答案 0 :(得分:2)

您必须调用该函数:

func main() {
    fmt.Println(getLine(base64Decode())())
}