機能を行く、パッケージ(B)

####に(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()
}

  個人的なマイクロチャネル公共数最新の記事があります:学習交換との懸念へようこそ

おすすめ

転載: www.cnblogs.com/Mail-maomao/p/11411767.html