Go言語基本関数の基本的な使い方と例
2022-01-06 12:11:18
概要
関数は、あるタスクを実行するコードの基本ブロックです。
シンタックス
関数定義
func function name( argument list] ) (return value list]){
Execute the statement
}
I. 関数パラメータ
引数なしノーリターン
func add()
引数と戻り値付き
func add(a, b int) int
関数値の受け渡し
func swap(x,y int) int {
var temp int
temp = x
x = y
y = temp
return temp
}
関数の参照渡し
参照渡しとは、関数が呼ばれたときに実引数のアドレスが渡され、関数内で引数に加えられた変更が実引数に影響することです。
func swap(x *int ,y *int) {
var temp int
temp = *x // save the value on the x address
*x = *y // assign the y value to x
*y = temp // assign temp value to y
}
可変パラメータリスト デフォルトパラメータなし
func funcName(arg ... .type) {
}
func sum(numbers ... .int) int {
s := 0
for i:= range numbers {
s += numbers[i]
}
return s
}
パラメータとしての機能
func function(a, b int, f func(a, b int) int) int{
return f(a, b)
}
//needs to be packaged reflect runtime
func apply(op func(... .int) int, a, b int) (int, string){
p := reflect.ValueOf(op).Pointer()
opName := runtime.FuncForPC(p).Name();
return op(a, b), opName
}
ii. 返り値
複数の戻り値
func eavl(a, b int) (int, int) {
return a +b, a-b
}
戻り値をスキップする
q, _ = eavl(2, 1)
匿名機能
は関数名を持たない関数です
func(x, y int) int {
return x + y
}
匿名関数を変数に代入することができる
f := func() int {
...
}
またはセルフコール
func (a,b int) int {
return a+b
}(1,2)
関数型にメソッドを追加する
type Greeting func(name string) string
// Greeting 関数型にメソッドを追加する
func (g Greeting) say(n string) {
fmt.Println(g(n))
}
概要
- Go関数は複数の戻り値をサポートする
- 関数と呼び出しが同じパッケージ内にない場合、import キーワードを使用して最初にパッケージを取り込む必要があります。
- 関数が他のパッケージから呼び出される場合、最初の文字を大文字にする必要があります。
- 関数は一級市民であり、変数のように渡すことができる
- ポインタ、参照、その他のどのタイプの引数として渡されても、すべて値のコピーとして渡されます。違いは、コピーの対象がターゲット・オブジェクトかポインタのコピーかです
- GOの関数は、ネスト、オーバーロード、デフォルト引数をサポートしていません。
- GOの関数は、宣言されていない変数、変数の長さ、複数の戻り値、匿名性、クロージャなどをサポートしています。
- GOの関数は、funcと左中括弧{で宣言され、別行動はありません。
例
package main
import "fmt"
import "reflect"
import "runtime"
// i. Function parameters
/* with arguments and return */
func add(a, b int) int {
return a+b
}
/* function value passing */
// func swap(x,y int) int {
// var temp int
// temp = x
// x = y
// y = temp
// return temp
// }
/* function reference passing */
func swap(x *int ,y *int) {
var temp int
temp = *x // save the value at address x
*x = *y // assign the y value to x
*y = temp // assign temp value to y
}
/* Variable argument list No default arguments */
func sum(numbers ... .int) int {
s := 0
for i:= range numbers {
s += numbers[i]
}
return s
}
/* function as parameter */
func function(a, b int, f func(a, b int) int) int{
return f(a, b)
}
//need to guide package reflect runtime
func apply(op func(.. .int) int, a, b int) (int, string){
p := reflect.ValueOf(op).Pointer()
opName := runtime.FuncForPC(p).Name();
return op(a, b), opName
}
// i. Return values
/* Multiple return values */
func eavl(a, b int) (int, int) {
return a +b, a-b
}
func main() {
a,b:=20,5
fmt.Println(add(a, b))
swap(&a,&b)
fmt.Println(a,b)
fmt.Println(sum(a, b))
fmt.Println(function(a,b,add))
fmt.Println(apply(sum,a,b))
fmt.Println(eavl(a,b))
q, _ := eavl(a, b)
fmt.Println(q)
}
上記は、Go言語の基本的な関数の使い方と例の詳細です。Go言語の関数に関するより詳しい情報は、スクリプトハウスの他の関連記事にご注目ください
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン