下級エンジニアの綴

新しく発見したことを綴っていこうと思っています。夢はでっかく上級エンジニアになることです。

go初心者が無名関数のクロージャについて学んだのでメモ

スターティングGo言語という本を読んでいるのですが、これは面白そうだなと思った機能があったのでメモ

package main
import "fmt"
func later() func(string) string { 
    // 1 つ 前 に 与え られ た 文字列 を 保存 する ため の 変数 
    var store string 
    // 引数 に 文字列 を とり 文字列 を 返す 関数 を 返す 
    return func( next string) string { 
        s := store store = next 
        return s 
    } 
} 
func main() {
    f := later() 
    fmt.Println(f("Golang")) // => "" 
    fmt.Println(f("is")) // => "Golang" 
    fmt.Println(f("awesome!")) // => "is"
}
a := 1
b := 2 // この変数だけクロージャから参照される
c := 3
return func() int{
    return b
}
package main

import "fmt"

func integers() func() int { 
    i := 0
    return func() int { 
        i += 1 
        return i 
    } 
} 

func main() { 
    ints := integers() 

    fmt.Println(ints()) // => "1" 
    fmt.Println(ints()) // => "2" 
    fmt.Println(ints()) // => "3" 

    otherInts := integers() 
    fmt.Println(otherInts()) // => "1" 

    fmt.Println(ints()) // => "4" 
    fmt.Println(ints()) // => "5" 

  // 初期化
    ints = integers() 

    fmt.Println(ints()) // => "1" 
    fmt.Println(ints()) // => "2" 
}

上手く使いこなせれると便利そうだなと思いました。

スターティングGo言語

スターティングGo言語