サーチ…


前書き

Goの関数は、一連のアクションを実行するための、組織化された再利用可能なコードを提供します。関数はコーディングプロセスを簡素化し、冗長ロジックを防止し、コードを簡単にフォローします。このトピックでは、Goの関数、引数、パラメータ、return文、およびスコープの宣言と使用について説明します。

構文

  • func()//引数なしで戻り値のない関数型
  • func(x int)int //整数を受け入れ、整数を返します
  • func(a、b int、z float32)bool // 2つの整数を受け取り、1つのfloatを返し、ブール値を返します
  • func(接頭辞string、values ... int)// 1つの文字列と1つ以上の整数を受け入れる "variadic"関数
  • func()(int、bool)// 2つの値を返す関数
  • func(a、b int、z float64、opt ... interface {})(成功ブール)// 2つの整数、1つのfloat、1つ以上のインタフェースと1つ以上のインタフェースを受け取り、ブール値という名前の戻り値を返します)

基本的な宣言

パラメータを受け付けず、値を返さない単純な関数:

func SayHello() {
    fmt.Println("Hello!")
}

パラメーター

関数は、オプションでパラメータのセットを宣言できます。

func SayHelloToMe(firstName, lastName string, age int) {
    fmt.Printf("Hello, %s %s!\n", firstName, lastName)
    fmt.Printf("You are %d", age)
}

firstNameの型はlastNameと同じであるため、省略されていることに注意してください。

戻り値

関数は、1つ以上の値を呼び出し側に返すことができます。

func AddAndMultiply(a, b int) (int, int) {
    return a+b, a*b
}

2番目の戻り値は、エラーvarでもかまいません。

import errors

func Divide(dividend, divisor int) (int, error) {
    if divisor == 0 {
        return 0, errors.New("Division by zero forbidden")
    }
    return dividend / divisor, nil
}

2つの重要なことに注意する必要があります:

  • 1つの戻り値に対して括弧を省略することができます。
  • return文は、宣言されたすべての戻り値の値を提供する必要があります。

名前付き戻り値

戻り値は、ローカル変数に割り当てることができます。空のreturn文を使用すると、現在の値を返すことができます。これは"裸の"リターンとして知られています。裸のreturn文は、より長い関数では読みやすさを損なうため、短い関数でのみ使用してください。

func Inverse(v float32) (reciprocal float32) {
    if v == 0 {
        return
    }
    reciprocal = 1 / v
    return
}

遊び場で遊ぶ

//A function can also return multiple values
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

遊び場で遊ぶ

2つの重要なことに注意する必要があります:

  • 戻り値の前後の括弧は必須です。
  • 空のreturn文を必ず指定する必要があります。

リテラル関数とクロージャ

簡単なリテラル関数、 Hello! stdoutに:

package main

import "fmt"

func main() {
    func(){
        fmt.Println("Hello!")
    }()
}

遊び場で遊ぶ


str引数をstdoutに出力するリテラル関数:

package main

import "fmt"

func main() {
    func(str string) {
        fmt.Println(str)
    }("Hello!")
}

遊び場で遊ぶ


変数str閉じるリテラル関数:

package main

import "fmt"

func main() {
    str := "Hello!"
    func() {
        fmt.Println(str)
    }()
}

遊び場で遊ぶ


変数にリテラル関数を代入することは可能です:

package main

import (
    "fmt"
)

func main() {
    str := "Hello!"
    anon := func() {
        fmt.Println(str)
    }
    anon()
}

遊び場で遊ぶ

バリアント関数

variadic関数は任意の数の末尾の引数で呼び出すことができます。これらの要素はスライスに格納されます。

package main

import "fmt"

func variadic(strs ...string) {
     // strs is a slice of string
     for i, str := range strs {
         fmt.Printf("%d: %s\n", i, str)
     }
}

func main() {
     variadic("Hello", "Goodbye")
     variadic("Str1", "Str2", "Str3")
}

遊び場で遊ぶ

あなたはまた、variadic関数にスライスを与えることができ......

func main() {
     strs := []string {"Str1", "Str2", "Str3"}

     variadic(strs...)
}

遊び場で遊ぶ



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow