看一段代碼先
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
有沒有發現,多次運行同一個閉包函數,其修改的上層函數傳參值是同一個值