メソッドgolang

方法

ゴーは、クラスを持っていません。ただし、種類のメソッドを定義することができます。

メインパッケージ

のインポート(
    " 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: =頂点{ 34 } 
    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で再現

おすすめ

転載: blog.csdn.net/weixin_34194551/article/details/93402063