有意思的闭包行为

看一段代码先

package main

import (
    "strings"
    "fmt"
)

func shortenString(message string) func() string {
    return func() string {
        messageSlice := strings.Split(message, " ")
        wordLength := len(messageSlice)
        if wordLength < 1 {
            return "Nothing Left!"
        } else {
            messageSlice = messageSlice[:(wordLength - 1)]
            message = strings.Join(messageSlice, " ")
            return message
        }
    }
}

func main() {
    myString := shortenString("Welcome to concurrency in Go!...")
    fmt.Println(myString())
    fmt.Println(myString())
    fmt.Println(myString())
    fmt.Println(myString())
    fmt.Println(myString())
    fmt.Println(myString())
}

运行结果如下:
Welcome to concurrency in
Welcome to concurrency
Welcome to
Welcome

有没有发现,多次运行同一个闭包函数,其修改的上层函数传参值是同一个值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容