方法
ゴーは、クラスを持っていません。ただし、種類のメソッドを定義することができます。
メインパッケージ のインポート( " FMT " " 数学" ) を入力頂点構造体{ X、Y用のfloat64 } (頂点v)のFUNC ABS()のfloat64 { 戻り math.Sqrt(のvX *のvX + VY * VY) } FUNC(V * 頂点)スケール(のfloat64 F){ のvX =のvX * F VY = VYの*のF } FUNC(頂点V)ScaleValue(のfloat64 F){ のvX =のvX * F VY = VYの*のF } メインFUNC(){ V: =頂点{ 3、4 } fmt.Println(v.Abs()) v.Scale(2 ) fmt.Println(v.Abs()) v.ScaleValue(2 ) fmt.Println(v.Abs()) P: =&に p.Scale(2 ) fmt.Println(p.Abs()) }
次のように出力されます。
5
10
10
20
3点に注意してください。
ポインタレシーバ1.方法は、受信点に値を変更することができます。
それらが呼び出されたときにポインタ受信機と2の方法は、受信された値またはポインタのいずれかを取ります。
VAR 頂点V v.Scale(5) // OK :P =&V p.Scale(10)// OK
それらが呼び出されたときに値レシーバと3の方法は、受信された値またはポインタのいずれかを取ります。
VAR 頂点V fmt.Println(v.Abs())// OK :P =&Vの fmt.Println(p.Abs())// OK
インタフェース
メインパッケージ のインポート( " FMTを" ) I型インタフェース{ Mを() } T型構造体{ Sの文字列 } FUNC(のT *のT)をM(){ fmt.Println(TS) } FUNCメイン(){ VAR I I T: T = { " ハロー" } 、I =&T IM() V: = T { " 世界" } 、I = V IM() }
主機能コードエラーの半後:割当タイプIとしてV(タイプT)を使用することができない:Tは、Iを実装していない(M法は、ポインタ受信機を有します)
M値に受信機タイプの場合:
FUNC(TのT)M(){ fmt.Println(TS) }
コードの主な機能は正常に機能します。
ます。https://www.cnblogs.com/gattaca/p/7890726.htmlで再現