Golangの関数メソッド・タイプ・アサーションの使用方法

WBOY
リリース: 2023-05-16 11:01:44
オリジナル
1011 人が閲覧しました

Golang は、そのシンプルさ、効率性、信頼性により現在人気のある効率的なプログラミング言語です。 Golang の関数およびメソッドのタイプ アサーションは、上級プログラマーがよく使用する重要なツールの 1 つです。この記事では、Golang 関数のメソッド型アサーションの使用について詳しく説明します。

  1. メソッド型アサーションの概要

Golang では、メソッド型アサーションはポインターと値の間の型変換です。ドット表記を使用してメソッドを呼び出すことにより、Golang は舞台裏で何かを行っています。メソッドを呼び出すときは、実際にはレシーバー (値とポインター用) をメソッドに渡します。メソッド型アサーションを使用すると、値とポインターの間で自由に変換できます。

例:

type MyType struct {
    field int
}

func (mt MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

func (mt *MyType) sayBye() {
    fmt.Println("Bye from MyType with field:", mt.field)
}

mt := &MyType{field: 42}
mt.sayHi() // Hi from MyType with field: 42

var i interface{} = mt
i.(MyType).sayHi() // Hi from MyType with field: 42

i.(MyType).sayBye() // 运行时error:invalid type assertion: i.(MyType) (non-interface type *interface {} on left)
ログイン後にコピー
  1. ポインタ型と値型

Golang では、構造体は値型またはポインタ型になります。ポインタ型の構造体はメソッド内で状態を変更できますが、値型の構造体は状態を変更しません。

ポインタ型 MyType:

type MyType struct {
    field int
}

func (mt *MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

mt := &MyType{field: 42}
mt.sayHi() // Hi from MyType with field: 42
ログイン後にコピー

値型 MyType:

type MyType struct {
    field int
}

func (mt MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

mt := MyType{field: 42}
mt.sayHi() // Hi from MyType with field: 42
ログイン後にコピー
  1. メソッド型アサーションの使用

Golang では、メソッド Typeアサーションは、ポインター型と値型の間の変換を習得するのに役立ちます。次の例では、メソッド型アサーションの使用方法を示します。

type MyType struct {
    field int
}

func (mt MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

func (mt *MyType) sayBye() {
    fmt.Println("Bye from MyType with field:", mt.field)
}

func main() {
    mt := &MyType{field: 42}
    mt.sayHi() // Hi from MyType with field: 42

    // 方法类型断言:值类型转换成指针类型
    var imt interface{} = MyType{field: 24}
    p, ok := imt.(*MyType) // ok 变量用于检查类型断言是否成功
    if ok {
        p.sayHi() // Hi from MyType with field: 24
    } else {
        fmt.Println("assertion failed")
    }

    // 方法类型断言:指针类型转换成值类型
    imt = mt
    v, ok := imt.(MyType) // ok 变量用于检查类型断言是否成功
    if ok {
        v.sayHi() // Hi from MyType with field: 42
    } else {
        fmt.Println("assertion failed")
    }
}
ログイン後にコピー

メソッド型アサーションを使用すると、値とポインターの間で自由に変換できるため、プログラミング プロセスが簡素化されます。

  1. 概要

Golang では、メソッド型アサーションは上級プログラマーがよく使用する重要なツールの 1 つです。メソッド型アサーションを使用すると、値とポインターの間で自由に変換できるため、プログラミング プロセスが簡素化されます。この記事では、ポインター型と値型の違い、およびメソッド型アサーションの使用方法について詳しく説明します。初心者にとって、メソッド タイプ アサーションは少し複雑かもしれませんが、経験を積むにつれて、メソッド タイプ アサーションを理解し、習得することは非常に有益です。

以上がGolangの関数メソッド・タイプ・アサーションの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート