ホームページ  >  記事  >  バックエンド開発  >  go の値の受け渡しとアドレスの受け渡しの例

go の値の受け渡しとアドレスの受け渡しの例

藏色散人
藏色散人転載
2020-10-30 15:00:202218ブラウズ

次のコラムでは、golang チュートリアル コラムで go の値の受け渡しとアドレスの受け渡しの例を紹介します。 !

go の値の受け渡しとアドレスの受け渡しの例

最初に簡単な例を見てみましょう

1. 変数の前に & を追加して、変数のアドレスを示します。変数 (つまり、この変数へのポインター) の場合、ポインター変数の前に * を追加すると、このポインターに対応する値が示されます (自分で理解してください)

//main.gopackage main
func ByAss() {
  s := 100
  p := &s  // s 的地址给了p

  fmt.Println(*p) //100 所以p对应的值变成了100
  *p += 100
  fmt.Println(*p)  //200
  fmt.Println(s) //200 p和s相同的地址,所以s也变成200}//demo.gopackage main
func main() {
  ByAss()}

Go のデフォルトではパラメーターを値で渡す、つまり渡しますパラメータのコピー。関数がパラメーターのコピーを受け取った後、変数の使用中にコピーの値が変更される可能性がありますが、Function(arg1) などの元の変数には影響しません。

2. 通常の値の受け渡し (この例に注目してください。非常に単純に見えますが、無視しやすいです)

func ByValue1(n1 int) {
  //此时n1 是n 的一个拷贝,所以地址不一样
  fmt.Println(&n1)//0xc00000a098}package main
func main() {
  n := 100
  fmt.Println(&n) //0xc00000a090
  ByValue1(n)//传递副本}

関数に直接値を渡したい場合は、パラメーターの値を変更するには、パラメーターのコピーを操作する代わりに、パラメーターのアドレスを関数に渡す必要があります (&variable など、変数名の前にアンパサンドを追加します)。 Function(&arg1) などの参照 このとき関数に渡されるのはポインタです。

#3. アドレスを使用して

func main() {
    n := 100
    fmt.Println(&n) //0xc00000a090
    ByReference(&n) //传递指针
    fmt.Println(n) //200}//注意函数 参数类型需要是用指针符号(*)func ByReference(n1 *int) {

   *n1 += 100
   fmt.Println(n1)//0xc00000a090 地址与n相同, 所以n值被改变了
  //注意
  //ip := &n1//这个写法有问题,表示地址的地址
  //fmt.Println(ip)}

4 を渡す場合。配列

## を確認します。 # (a) 配列 値渡しでもあります
arr := [5]int{1,3,5,6,7}arrByValue(&arr) //也需要使用& 符号fmt.Println(arr) //[100 300 5 6 7]func arrByValue(arr1 *[5]int) {
 arr2 := arr1
 arr2[0] = 100
 arr2[1] = 300}

5 以下はスライス(変数配列)の例です スライスは参照渡しです
func main() {
    arr := []int{1,3,5,6,7}
    bbb(arr) //没有使用& 符号
    fmt.Print(arr[0])// 11 结果已经改变,说明数组是地址传递

    //就算不通过函数,也是引用传递
    //arr := []int{1,3,5,6,7}
    //arr2 := arr
    //arr2[1] = 0
    //fmt.Print(arr)//[1 0 5 6 7]}//aaafunc bbb(arr1 []int) {
   arr1[0] += 10}

    (b) in 関数が呼び出されるとき、スライス、ディクショナリ、マップ、インターフェイス、チャネルなどの参照型は、デフォルトで (ポインタが明示的に指定されていなくても) 参照によって渡されます。

以上がgo の値の受け渡しとアドレスの受け渡しの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。