LoginSignup
0
0

More than 3 years have passed since last update.

Go 言語仕様2(関数)

Last updated at Posted at 2021-02-12

概要

複数の言語を扱っていると仕様が混ざるので、まとめておく。

前回:
Go 言語仕様1(変数、型)

内容

  • 関数

関数

  • 基本的なところ
package main

import "fmt"

// NoReturn return値なし
func NoReturn(s string) {
    fmt.Println(s)
}

// Return return値あり
func Return(x int, y int) int {
    return x + y
}

// ReturnSome return値複数あり
func ReturnSome(x int, y int) (int, int) {
    plus := x + y
    minus := x - y

    return plus, minus
}

// Default returnの変数をデフォルトで宣言しておく
func Default(ss string) (result string) {
    // 関数内で宣言の必要なし
    result = "Hello, " + ss
    // return値も省略可
    return
}

func main() {
    NoReturn("Golang") // Golang

    sum := Return(10, 20)
    fmt.Println(sum) // 30

    p, m := ReturnSome(1000, 200)
    fmt.Println(p, m) // 1200 800

    fmt.Println(Default("Golang")) // Hello, Golang
}

  

  • 無名関数
package main

import "fmt"

func main() {
    // 関数名は付けない。関数を変数に格納するイメージ。
    f := func(x int, y int) int {
        return x + y
    }

    fmt.Println(f(20, 10)) // 30

    // 直接実行することもできる
    ff := func(x int, y int) int {
        return x + y
    }(20, 10)

    fmt.Println(ff) // 30
}

  

  • 引数、戻り値に関数を指定する
package main

import "fmt"

// Return 関数をreturnする
func Return() func() {
    return func() {
        fmt.Println("Golang")
    }
}

// Execute 引数で渡ってきた関数を実行する
func Execute(f func()) {
    f()
}

func main() {
    f := Return()
    f()

    Execute(f)
}

  

  • クロージャー
package main

import "fmt"

// LaterFunc クロージャー
func LaterFunc() func(int) int {
    var sum int
    // LaterFunc内で定義された無名関数は、LaterFunc内のローカル変数sumにアクセスできる
    return func(i int) int {
        result := sum
        sum = sum + i
        return result
    }
}

func main() {
    // 戻り値の無名関数も、LaterFunc内のローカル変数sumにアクセスできる
    f := LaterFunc()
    // さらに、ローカル変数sumの値は保持される
    fmt.Println(f(10)) // 0
    fmt.Println(f(10)) // 10
    fmt.Println(f(10)) // 20
    fmt.Println(f(10)) // 30
    fmt.Println(f(10)) // 40
}

次回

Go 言語仕様3(エラーハンドリング、for文、型アサーション、switch文、型スイッチ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0