この方法の質量参加メカニズムと原則を呼び出し:(重要!)
説明:メソッド呼び出し及び質量参加機構及び機能は、基本的には同じではなく、同じ場所は、メソッドに渡され、また、引数として、メソッドを呼び出す、変数メソッド呼び出しです。私たちは説明してみましょう:
ケース1:実行する方法がgetSumが+説明前面に示されています
説明:
1)メソッド呼び出しメカニズムを呼び出し、同じ機能する変数を採用しています。
変数は、変数自体も道を行くために引数として渡されたとき2)ない同じ場所、メソッドを呼び出します。(変数は、基準タイプ、アドレスコピーである場合、変数は、値がコピーされ、値型の場合)
ケース2:以下、プログラムを書きます:
1)宣言構造Cirle、フィールド半径
2)メソッド宣言領域とCirle結合、それはエリアに戻ることができます。
3)ヒント:ドロープロセス領域+説明を行うために
使用方法の深さ分析:
メソッド宣言(定義)
FUNC(recevier型)methodNameの(パラメータリスト)(返されたリスト){
メソッド本体の
リターン戻り値
}
1)パラメータのリスト:入力表現
2)recevierタイプ:この方法の種類及びこのバインド、またはメソッド作用型の種類を入力したことを示し
3)recevierタイプ:タイプの構造であってもよい、カスタムの他のタイプであってもよいです
4)recevierタイプ:可変人構造(実施例):変数(例)などのタイプを入力しています
5)値のリストを返す:戻りを示す値が、複数であってもよいです
図メイン6)方法:その特定の機能ブロックを実現するために
7)return文は必要ありません
メソッドの考慮事項および詳細について説明します。
1)構造型は、値型がメソッド呼び出しで、コンプライアンス値型伝達機構は、値の転送モードのコピーであります
プログラマが処理を希望する場合2)、可変構造の値を変更し、構造がポインタの方法によって処理することができます
ケースプレゼンテーション:
型サークルのstruct {
半径のfloat64
}
@我々の方法の効率を向上させるために、一般タイプおよび構造に結合したポインタである
エリア2()のfloat64 {FUNC(C *とのサークル)
cはポインタであるため、//ため、そのフィールドのアクセスをスタンダード(* C)です。 RADIUS
//戻り3.14 *(* C).radius *(* C).radius
//(*c).radius等価c.radiusの
c.radius = 10.0
* c.radius 3.14 c.radiusリターン
}
FUNCのメイン(){
円C VARの
c.radius = 7.0
// RES2:=(&C).area2()
RES2:c.area2 =()
//底最適化コンパイラ(&C).area2()と等価c.ares2()
//コンパイラが自動的にC&に追加するため
fmt.Println( "=の領域"、RES2)
fmt.Println( "c.radius ="、c.radius)// 10
}
3)指定されたデータ型にGolang作用における方法(すなわち:)結合および指定されたデータ型、このように定義されたタイプはintなどではなく、構造体以外の方法を有することができ、これがあってもよいFLOAT32方法
ケース:
メインのためのパッケージ変更
のインポート(
「FMT」
)
整数型はint
FUNC(iは整数)プリント(){
fmt.Println( "I =" I)
}
//メソッドを記述し、iの値を変更することができ
FUNC(iは整数*)の変更(){
* iは=私は+ *を1
}
FUNCのmain(){
VAR I整数= 10
i.print()
i.change()
fmt.Println( "I =" I)
}
アクセス範囲ルール4)を制御するための方法、および機能。メソッド名の最初の文字を小文字このパッケージは唯一のアクセス方法は、大文字ができ、このパッケージや他のパッケージにアクセスすることができます。
タイプがString()このメソッドを実装している場合5)、その後、fmt.Printlnデフォルトでは、この変数の文字列()の出力を呼び出します
ケース:
タイプの学生のstruct {
名前の文字列の
年齢はint
}
FUNC(STU *スチューデント)文字列()文字列{
STR:= fmt.Sprintf( "名前= [%V]年齢= [%V]"、stu.Name、stu.Age)
戻りSTR
}
FUNCのメイン(){
STU:学生= {
名: "トム"、
年齢:20、
}
//あなたがメソッドの*学生、String型を実装する場合は、自動的に呼び出します
fmt.Println(&STU)を
}
メソッドと関数の違い:
1)別の方法で呼び出します
関数が呼び出された関数名(引数のリスト)を
法と呼ばれている:メソッド名変数(引数リスト)
2)正常な機能のために、受信者は値型であり、ポインタ型データを直接送信することができません
案例:
Person型構造体{
Nameストリング
}
FUNCのTEST01(Pパーソン){
fmt.Println(p.Name)
}
FUNCのTEST02(のP *の人){
fmt.Println(p.Name)
}
FUNCのメイン(){
P-:人= {「トム」}
の値がコピーされているため、TEST01(P-)//は、そのように書かれたアドレスTEST01(* p)は文句であろう通過できない
TEST02(&P)を//アドレスがコピーであるので、そのままの値ではありませんコピー、TEST02(P)ので、エラーが書き込まれます。
}
3)方法(例えば、構造体法)、及び受信機は値型であり、この方法は、順番に同じであってもよい、式ポインタの変数によって直接呼び出すことができます。
案例:
Person型構造体{
Nameストリング
}
FUNC(P人)TEST03() {// 主な機能が、着信アドレスを介して、しかし次のメイン関数の値唯一の方法であるので、pの値は、ジャックの受信コピーである場合値は変更されません。
= p.Name "ジャック"
fmt.Println( "TEST03()="、p.Name)//ジャック
}
FUNC(P *人)test04は( ){// ポインタタイプので、それが受信されたアドレスへのポインタになり、メソッドの名前の値の変化は、主な機能は、値を変更することです。
= p.Name "メアリー"
fmt.Println( "test04()="、p.Name)//メアリー
}
FUNCのメイン(){
P:= {人"トム"}
p.test03()
fmt.Println( "主()= p.name"、p.Name)//トム
(P&).test03()フォームから渡された//アドレスが、本質はコピーの値のまま
fmt.Println( "メインp.name ="、p.Name)//トム
(P-&).test04()
fmt.Println( "メイン()p.name ="、P。名)//メアリーの
p.test04()//同等(&P).test04()は、フォームからの値型を通過したが、それでも基本的にアドレスをコピーしています
}
要約:
1)にかかわらず、コールの形態の、実際の決定は、この方法が主に見て、結合のタイプである、コピーの値であるか、またはアドレスをコピーします。
2)(Pパーソン)として、結合の値と入力した場合、値がコピーされ、ポインタは、(P *が人)として、結合のタイプである場合、アドレスがコピーされます。