Golang-Funktionsmethodentyp-Assertionsverwendungsmethode

WBOY
Freigeben: 2023-05-16 11:01:44
Original
1011 Leute haben es durchsucht

Golang ist eine effiziente Programmiersprache, die aufgrund ihrer Einfachheit, Effizienz und Zuverlässigkeit derzeit sehr beliebt ist. Zusicherungen von Funktions- und Methodentypen in Golang sind eines der wichtigen Werkzeuge, die häufig von fortgeschrittenen Programmierern verwendet werden. In diesem Artikel werden wir uns mit der Verwendung von Methodentypzusicherungen für Golang-Funktionen befassen.

  1. Einführung in die Methodentypzusicherung

In Golang ist die Methodentypzusicherung die Typkonvertierung zwischen Zeigern und Werten. Durch die Verwendung der Punktnotation zum Aufrufen von Methoden tut Golang etwas hinter den Kulissen. Wenn Sie eine Methode aufrufen, übergeben Sie tatsächlich den Empfänger (für Werte und Zeiger) an die Methode. Mithilfe von Methodentypzusicherungen können wir Werte und Zeiger frei konvertieren.

Zum Beispiel:

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)
Nach dem Login kopieren
  1. Zeigertyp und Werttyp

In Golang kann eine Struktur ein Werttyp oder ein Zeigertyp sein. Eine Struktur vom Typ Zeiger kann ihren Zustand in einer Methode ändern, während eine Struktur vom Typ Wert ihren Zustand nicht ändert.

Zeigertyp 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
Nach dem Login kopieren

Werttyp 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
Nach dem Login kopieren
  1. Verwendung der Methodentypzusicherung

In Golang kann uns die Methodentypzusicherung dabei helfen, die Konvertierung zwischen Zeigertypen und Werttypen zu meistern. Im folgenden Beispiel demonstrieren wir, wie Methodentypzusicherungen verwendet werden.

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")
    }
}
Nach dem Login kopieren

Die Verwendung von Methodentypzusicherungen vereinfacht den Programmierprozess, indem sie uns die Freiheit gibt, zwischen Werten und Zeigern zu konvertieren.

  1. Zusammenfassung

In Golang ist die Methodentypbehauptung eines der wichtigen Werkzeuge, die häufig von fortgeschrittenen Programmierern verwendet werden. Mit Methodentypzusicherungen können wir Werte und Zeiger frei konvertieren und so den Programmierprozess vereinfachen. In diesem Artikel wird der Unterschied zwischen Zeigertypen und Werttypen sowie die Verwendung von Methodentypzusicherungen erläutert. Für Anfänger können Methodentypzusicherungen etwas kompliziert sein, aber mit zunehmender Erfahrung wird es von großem Nutzen sein, Methodentypzusicherungen zu verstehen und zu beherrschen.

Das obige ist der detaillierte Inhalt vonGolang-Funktionsmethodentyp-Assertionsverwendungsmethode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage