ホームページ  >  記事  >  バックエンド開発  >  Goで関数の引数を渡すにはどうすればよいですか?

Goで関数の引数を渡すにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-05-11 17:00:331842ブラウズ

Go は厳密に型指定されたプログラミング言語であり、その関数パラメータは値によって渡されます。これは、パラメーターを関数に渡すとき、実際にはパラメーターの値のコピーを作成し、その値を処理のために関数に渡していることを意味します。したがって、Go で関数のパラメータ受け渡しを使用する場合は、次の点に注意する必要があります。

  1. 値型と参照型の違い

Go では、基本的なデータ型に加えて、値型を除くすべてのデータ型は参照型です。値型のデータを関数の引数として渡す場合は値のコピーが関数に渡され、参照型のデータを関数の引数として渡す場合はメモリ上のデータのアドレスが渡されます。

例として、値型と参照型のそれぞれのパラメータの受け渡し処理を見てみましょう。

package main

import "fmt"

func main() {
    // 值类型参数传递
    var a = 10
    fmt.Println("Before call func: ", a) // 输出 10

    changeByVal(a)

    fmt.Println("After call func: ", a) // 输出 10

    // 引用类型参数传递
    var b = []int{1, 2, 3}
    fmt.Println("Before call func: ", b) // 输出 [1 2 3]

    changeByRef(b)

    fmt.Println("After call func: ", b) // 输出 [4 5]
}

// 值类型参数传递
func changeByVal(num int) {
    num = 100
}

// 引用类型参数传递
func changeByRef(arr []int) {
    arr[0] = 4
    arr[1] = 5
}

値型のパラメータの受け渡しの場合、パラメータが渡されても、関数内では、パラメーター値は 100 に変更されますが、外部変数は影響を受けません。参照型パラメータを渡した場合、関数内でパラメータが変更され、関数外の実データにも影響が及びます。

  1. ポインタ型パラメータの受け渡し

参照型データを変更したい場合、ポインタ型パラメータの受け渡しを使用できます。ポインタは変数のアドレスを格納するデータ型で、Go では値によっても渡されます。

& 演算子を使用して変数のアドレスを取得し、* 演算子を使用してアドレスに格納されているデータを取得できます。

例:

package main

import "fmt"

func main() {
    var a = 10
    var b *int

    b = &a

    fmt.Println("Before call func: ", a) // 输出 10

    changeByPtr(b)

    fmt.Println("After call func: ", a) // 输出 100
}

func changeByPtr(num *int) {
    *num = 100
}

ポインターが指すデータ (元の変数 a) が関数内で変更され、実際の外部データも影響を受けることがわかります。

  1. ... を使用して可変長パラメーターを表す

関数が可変長パラメーターを受け取る必要がある場合は、... を使用してそれを表すこともできます。この構文は、Python の args および kwargs に似ています。

例:

package main

import "fmt"

func main() {
    printNames("John", "Alice", "Bob")
}

func printNames(names ...string) {
    for _, name := range names {
        fmt.Println(name)
    }
}

この例では、可変長パラメーターを使用して関数 printNames を定義し、受け取るパラメーターのタイプは文字列です。関数内では、 range を使用してすべてのパラメーターを反復処理し、その値を 1 つずつ出力します。

概要

Go では、関数のパラメーターの受け渡しは値によって行われるため、値の型と参照型の違いに注意する必要があります。参照型のデータを変更する必要がある場合は、ポインタ型のパラメータの受け渡しを使用できます。さらに、... を使用して可変長パラメータを表すこともでき、関数が可変長のパラメータを受け取りやすくなります。

以上がGoで関数の引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。