Закрытие не возвращает желаемый результат - PullRequest
0 голосов
/ 15 ноября 2018

Мне интересно, почему моя функция не возвращает строки. Я использую замыкания, и моя цель - отобразить каждую строку из декодированного текста. Мне удалось добиться этого с помощью 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 голосов
/ 15 ноября 2018

Вы должны вызвать функцию:

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