####に(B)を含む、機能を行く
ような***のように緩やかな波のよう*** Baizhangピーク、地形くん、信条
金曜日あなたに、今日、あなたはとにかく、それについて興奮していない持って、私はとても興奮しています、自由の2日間があり、
我々は機能を学んだ1と袋の移動のいくつかの知識は、それから...今日学ぶ
---
#####のinit関数
の各プログラムソースファイルに対しては、初期化を含めることができますmain関数が実行される前に、囲碁実行フレームと呼ばれる機能、;
パッケージメイン インポート"FMT" FUNCのinit(){ fmt.Print( "INIT ") } FUNCのmain(){ fmt.Print("主") }
出力:INITメイン
のinitノートや機能の詳細:
1.ファイルが含まれている場合***グローバル変数定義、プロセスの初期化機能と主な機能***グローバル変数の定義のように行われる- > init関数- >メイン機能;
2.その主な役割は、いくつかの初期化が完了することにある
パケットはinit関数を複数有する場合は3を、インポートシーケンスの実行順序、例えば:
導入B、B Cが導入され、それはCを実行するために実行されます。グローバル変数の定義、初期化関数は、次に、パケットBを実行し、最終的にパケットを行います。
主パッケージ のインポート"FMT" VaRのA = TEST01() FUNCのinit(){ fmt.Println( "INIT")//実行順序2 fmt.Println(A)//実行順序3 } FUNC TEST01(){int型 FMT。 println( "TEST01")//実行順序1 リターン1 } FUNCメイン(){ fmt.Println( "主")の実行順序// 4 }
---
#####匿名関数
ゴーは、1つの機能を使用したい場合は、匿名関数は、複数の通話を実現することができますが、あなたは、無名関数を使用することができ、関数の名前ではありません無名関数、無名関数をサポートしています。
匿名の場合グローバル変数に割り当てられた機能は、この無名関数は、プログラムの有効範囲内で有効な、グローバルな無名関数となっています。
主パッケージ のインポート"FMT" FUNCメイン(){ 直接呼び出し定義する@ SUM = FUNC(A、Bはint){int型の リターンA + B }(10,20) fmt.Println(SUM) //匿名関数変数に割り当て、匿名変数による関数呼び出し :FUNC =(、BのINT){INT + Bを返す } SUMは=(10,20) fmt.Println(SUM) }
---
#####閉鎖
クロージャは、実際に、その全体的な機能を参照すると、環境関連の組合せであります
メインパッケージ インポート"FMT" FUNC追加()FUNC(INT)INT { VARのN INT = 1つの 戻りFUNC(iはINT)INTを{ N + = iが N返す } } FUNCメイン(){ :追加=() FMTを。 println((1))// 2 fmt.Println((10))// 12 fmt.Println((2))// 14 }
説明:
1.追加データ型匿名関数を返す関数である。
2.匿名関数は、匿名関数に変数n、リターンの機能を追加するために、参照を返し、nは一体に形成され、閉鎖を構成する;
3。それは理解することができる:クロージャは、クラス、メソッド関数であり、nはフィールドであり、nの関数を使用して、各閉鎖;
関数は全N、繰り返し呼び出される場合、このように4。
パッケージメイン インポート( "FMT" ""文字列 ) {addStr()FUNC(STR列)列FUNC "VAR基地=" 戻りFUNC(STR列)列{ 基地+ = STRの 戻りベース } } //判断字符串的后缀是否为指定的 FUNC makeSuffix(接尾文字列)FUNC(文字列)文字列{ 戻りFUNC(複数列)列{ !strings.HasSuffix(S、サフィックス){もし リターンS +サフィックス } 戻りS } } メインFUNC(){ A:= addStr() fmt.Println(( "B"))// AB fmt.Println(( "C"))// ABC fmt.Println(( "D")) // あいうえお JPG: "JPG" = makeSuffix() PNG:= makeSuffix("。PNG ") fmt.Println(JPG(" a.jpg "))// a.jpg fmt.Println(JPG(" B"))/ /b.jpg fmt.Println(PNG( "a.png"))// a.png fmt.Println(PNG( "B")を)//b.png }
1.戻り閉鎖にサフィックス匿名関数とパラメータ変数、したがって一方が複数回通過することができるコールは、
---
#####機能延期
実行を遅らせることも知られている延期と、
機能は延期する場合、一時的に行わ、後文圧入関数が戻る前に、その後ザ・スタックによれば、第1の実施形態の実行原理を延期、終了される別個のスタックを延期します。
主パッケージ のインポート「FMT」 INT FUNC追加(A、BのINT){ 延期fmt.Println(「= A」、A)ステートメントがスタック上に配置される10 //出力順序3は、パラメータ値がコピーに関連します fmt.Println( "B ="、延期 B)// 20 出力順序2、ステートメントがスタック上に置かれたとき、パラメータ値がコピーに関連する 。= 11 B = A +:SUM 延期fmt.Println(「SUMを=」和)// 31を順次出力1。 戻りSUM } FUNCメイン(){ SUMは:追加(10,20)= fmt.Println(SUM)31は、出力順序// 4です }
*** ***スタックへの声明は、関連するパラメータの値がコピーされます延期で
ゴーでの開発(データベース、ロックリソースに接続、開いているファイル)のリソースを作成した後1.頻繁に使用さ延期file.Close ()はconn.close()
2.延期した後、作成されたリソースを使用し続けることができます。
---
渡し#####関数パラメータ
1は、関数の引数の型に値型と参照について話しています、私たちは深さをまとめてみましょう、この知識は、コンパイル言語で重要である;
; 1関数のパラメータが値で渡されている値型、関数のパラメータは、タイプが参照渡しされた基準である
、それは、値または参照セマンティクスによって渡され、渡されているかどうか2。渡された値がコピーの値であることを除いて関数のコピーが、可変である、コピー・アドレスは参照によって渡され、
通常の状況下で、効率、およびコピー値を、高コピーアドレス3.大きいデータによってパラメータデータのサイズ、効率低い;
4.値型:基本データ型INT、フロートシリーズ、ブール、文字列、アレイ、構造の一連;
5参照タイプ:ポインタ、スライス断面、マップ、ちゃん、インターフェース;
主パッケージ のインポート"FMT"は //値が渡さ FUNC TEST01を(INT A){ fmt.Printf( "[TEST01] A =アドレス値DA =%のP%が\ N-"、A、A&) } //の値を変更するために送信します元の値は、アドレス変数渡すことができる FUNC TEST03(INT *){ * A = 100 fmt.Printf( "[TEST03] = C%のVCアドレス値P =%\ N-"、*、&A) } //参照転送 FUNC TEST02([] INT){ fmt.Printf( "[TEST02] B =アドレス値VB =%P%\ N-"、A、A&) } FUNCメインを(){ VARのA = 10 int型 (fmt.Printfを"%= DAアドレス値P =%\ N-"、A、A&) TEST01(A) のvar B = [] {1,2} INT fmt.Printf( "%のB = VBアドレス値P =%\ N-" A、B、&B) TEST02(b)は、 VARのC = 10 TEST03(&C) fmt.Printf( "C値=%のVCアドレス=%のPを\ n"、C、およびC) }
---
スコープ#####変数
内部変数の関数宣言または定義1.ローカル、内部機能がスコープれる;
2.外部関数宣言または定義は、グローバル変数であり、全体のパッケージが有効範囲であります最初の文字は大文字場合、プロセス全体の範囲;
3.場合、変数宣言またはなど、コードブロック内で定義:IF /ブロックについて、範囲はブロックに制限されています。
メインパッケージ のインポート「FMT」 //グローバル変数 VAR名=「golangは、」 //大文字場合は、手順全体で有効な、他のパッケージを使用することができるされた のvar年齢= 22で FUNC TEST01(){ //ローカル変数 VAR aを10 = INT fmt.Println(A) //グローバル変数を使用 fmt.Println(名) 場合> 2 { ブロック内の//ローカル変数のみ有効であれば、ブロック VAR = int型D 100 fmt.Println(D ) } //ローカル変数ブロック内の、唯一の有効な場合にブロック //fmt.Println(d)//エラー } FUNCメイン(){ //ローカル変数 VARのB = INT 1 fmt.Println(B) / /グローバル変数 fmt.Println(名) TEST01() }
個人的なマイクロチャネル公共数最新の記事があります:学習交換との懸念へようこそ