パッケージメイン インポート( "FMT" ) / * 値の転送 パラメータの実際のコピー〔の値の関数の形で【パラメータ コンテンツに対処するためのすべての変更は、外の世界の実際のパラメータとは何の関係もありません パラメータなどのすべての基本データ型は値で渡された場合 * / FUNC ChangeBaseValue(V int型){ fmt.Printf( "メインます。vアドレス=%P \ n" は、&V) V * = 2 すべてのローカル変数、関数リターンは//解放されたとき(仮パラメータは、ここにVに含まれます) } / * 参照渡し(アドレス転送) [機能]仮パラメータの記録は、実際のパラメータアドレス[あります] すべての変更は、実際のコンテンツが直接外の世界のパラメータを変更に対処するためになさ * / FUNC ChangeBaseValuePtr(V * int型){ fmt.Printf( "メインます。vアドレス=%P \ n" は、V) * V * = 2 } Person型構造体{ 年齢はint } / * 値は、構造体を渡します Pは、実際のパラメータzhangsanのコピーの形でパラメータ値であります Pは、任意のインパクトzhangsanを持っていないために何でもします pが生成され実行されている関数のローカル変数、終了する機能が解除されています * / FUNC ChangeObjectValue(P人){ fmt.Printf( "ChangeObjectValue:Pアドレス=%P \ n" は、&P) p.Age * = 2 すべてのローカル変数、関数リターンは//解放されたとき(仮パラメータは、ここにVに含まれます) } / * 基準構造転送(転送アドレス) 正式なパラメータpは、実際の記録パラメータzhansanメモリアドレスです いかなる修正の内容についてPは、直接zhangsanを変更することです pが生成され実行されている関数のローカル変数、終了する機能が解除されています * / FUNC ChangeObjectValuePtr(P *人){ fmt.Printf( "ChangeObjectValue:Pアドレス=%P \ n" は、P) p.Age * = 2 すべてのローカル変数、関数リターンは//解放されたとき(仮パラメータは、ここにVに含まれます) } / * 渡された値:パラメータとして配列 スライスやマップ:既存のコンテンツ/要素は、参照によって渡されます * / FUNC ChangeContainerValue(配列[3] INT、スライス[] INT、MMAPマップ[ストリング] INT){ fmt.Printf( "ChangeContainerValue:配列[0]アドレス=%P \ n"、&配列[0]) fmt.Printf( "ChangeContainerValue:スライス[0]アドレス=%P \ n"、&スライス[0]) fmt.Printf( "ChangeContainerValue:マップアドレス=%P \ n" は、MMAP) 配列[0] = 100 スライス[0] = 200 MMAP [ "ボス"] = 300 } ChangeContainerValuePtr FUNC(配列* [3] INT、スライス* [] INT、MMAP *マップ[ストリング] INT){ (*配列)[0] = 100 (*スライス)[0] = 200 (* MMAP)[ "ボス"] = 300 *スライス=アペンド(*スライス、4) (* MMAP) "第4位にランク"] = 4 } / *伝送の基本的なタイプの値と参照渡し* / main021関数(){ = 10があります。 fmt.Printf( "主アドレス=%P \ n"、&) ChangeBaseValue(A) fmt.Printf( "主アドレス=%P \ n"、&) fmt.Println(A) ChangeBaseValuePtr(&) fmt.Printf( "主アドレス=%P \ n"、&) fmt.Println(A) } 送信された基準構造を通過する/ *値* / main022関数(){ zhangsan:= {人年齢:10} fmt.Printf( "メイン:zhangsanアドレス=%P \ n"、&zhangsan) // ChangeObjectValue(zhangsan) ChangeObjectValuePtr(&zhangsan) fmt.Println(zhangsan.Age) } FUNCのmain(){ VARアレイ= [3] INT {1,2,3} スライス:=メイク([] INT、0) スライス=アペンド(スライス、1、2、3) MMAP:=メイク(マップ[文字列] int型) MMAP [ "ボス"] = 1 MMAP [ "第二"] = 2 MMAP [ "最も若い"] = 3 fmt.Printf( "メイン:配列[0]アドレス=%P \ n"、&配列[0]) fmt.Printf( "メイン:スライス[0]アドレス=%P \ n"、&スライス[0]) fmt.Printf( "メイン:マップアドレス=%P \ n" は、MMAP) // ChangeContainerValue(アレイ、スライス、MMAP) ChangeContainerValuePtr(&アレイ、およびスライス&MMAP) fmt.Println(アレイ) fmt.Println(スライス) fmt.Println(MMAP) }
出力:
メイン:配列[0]アドレス= 0xc0000102e0 メイン:スライス[0]アドレス= 0xc000010300 メイン:マップアドレス= 0xc000062240 [100 2 3] [200 2 3 4] マップ[ボス:第二子300:2最年少:3の第四:4]