サーチ…
前書き
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