2 Sprachänderungen für Go 1.21

Verbale Verhaltensänderungen

Go 1.20 wurde im Februar dieses Jahres veröffentlicht und Go 1.21 ist nicht mehr weit. Lassen Sie uns es zuerst blockieren und einen Blick auf einige interessante Änderungen in der Version Go 1.21 werfen.

Am Ende des Artikels sind zwei Interviewfragen beigefügt.

Panik (null)

func main() {
    
    
  defer func() {
    
    
    print(recover() == nil)
  }()
  panic(nil)
}

Lassen Sie uns zunächst darüber nachdenken, was dieser Code ausgeben wird. wahr oder falsch ist.

Gibt in Go 1.20 und früher „true“ aus.

Ab Go 1.21 wird jedoch „false“ ausgegeben. Dies liegt daran, dass Go 1.21 einen neuen Typ definiert *runtime.PanicNilError.

panic(nil)Danach wird eine Variable vom recover()Typ *runtime.PanicNilErrorund Wert zurückgegeben. Einzelheiten finden Sie im folgenden Code:panic called with nil argument

func main() {
    
    
	defer func() {
    
    
		r := recover()
		fmt.Printf("%T\n", r) // *runtime.PanicNilError
		fmt.Println(r) // panic called with nil argument
	}()
	panic(nil)
}

klare Funktion

Go 1.21 wird eine Clear-Funktion zum Bereinigen von Elementen in Karten und Slices hinzufügen. Der Beispielcode lautet wie folgt:

package main

import "fmt"

var x = 0.0
var nan = x / x

func main() {
    
    
	s := []int{
    
    1, 2, 3}
	clear(s)
	fmt.Println(s) // [0 0 0]

	m := map[float64]int{
    
    0.1: 9}
	m[nan] = 5
	clear(m)
	fmt.Println(len(m)) // 0
}

Die offizielle Quellcodebeschreibung lautet wie folgt:

// Die integrierte Funktion „clear“ löscht Karten und Slices.

// Bei Karten löscht „clear“ alle Einträge, was zu einer leeren Karte führt.

// Für Slices setzt Clear alle Elemente bis zur Länge des Slice

// auf den Nullwert des jeweiligen Elementtyps. Wenn das Argument

// Typ ist ein Typparameter, der Typ des Typparameters muss festgelegt werden

// enthält nur Karten- oder Slice-Typen und „clear“ führt die Operation aus

// durch das Typargument impliziert.

func clear[T ~[]Type | ~map[Type]Type1](t T „T ~[]Type | ~map[Type]Type1“)

Für die Karte löscht der Aufruf der Clear-Funktion direkt die Elemente in der Karte und wird zu einer leeren Karte.

Bei einem Slice bleibt durch den Aufruf der Clear-Funktion die Länge des ursprünglichen Slice unverändert und der Wert der darin enthaltenen Elemente wird auf den Nullwert des Slice-Elementtyps geändert.

Interview Fragen

Die Defer-Semantik wird häufig von Go-Entwicklern verwendet und ist der am einfachsten zu verstehende Fehler.

Werfen wir einen Blick auf die Ergebnisse der folgenden beiden Programme zum Thema Verzögerung.

package main

import "fmt"

func f() {
    
    
	defer func() {
    
    
		defer func() {
    
     recover() }()
		defer recover()
		panic(2)
	}()
	panic(1)
}

func main() {
    
    
	defer func() {
    
     fmt.Print(recover()) }()
	f()
}
  • A: 2
  • B: 1
  • C: Nil
  • D: Eine Panikausnahme auslösen
package main

import "fmt"

func main() {
    
    
	for i := 0; i < 3; i++ {
    
    
		defer func() {
    
     print(i) }()
	}
	for i := range [3]int{
    
    } {
    
    
		defer func() {
    
     print(i) }()
	}
}

  • A: 222333
  • B: 210333
  • C: 333333
  • D: 210210

Wenn Sie die Antwort wissen möchten, senden Sie eine Nachricht 121an das offizielle Konto.

Literatur-Empfehlungen

Open-Source-Adresse

Artikel und Beispielcode sind Open Source auf GitHub: Go Language Tutorials für Anfänger, Fortgeschrittene und Fortgeschrittene .

Offizieller Account: erweiterte Codierung. Folgen Sie dem offiziellen Konto, um die neuesten Go-Interviewfragen und den neuesten Technologie-Stack zu erhalten.

Persönliche Website: Jinchengs Blog .

Zhihu: Wuji .

Wohlfahrt

Ich habe ein Geschenkpaket mit Lernmaterialien für die Back-End-Entwicklung für Sie zusammengestellt, darunter den Einstieg in die Programmiersprache für fortgeschrittene Kenntnisse (Go, C++, Python), den Technologie-Stack für die Back-End-Entwicklung, Interviewfragen usw.

Folgen Sie dem öffentlichen Konto „Coding Advanced“, senden Sie eine Nachricht an das Backend , um ein Datenpaket zu erhalten. Diese Daten werden von Zeit zu Zeit aktualisiert und fügen Sie Daten hinzu, die ich für wertvoll halte. Sie können auch eine Nachricht „ Der Gruppe beitreten “ senden, um mit Ihren Kollegen zu kommunizieren und zu lernen und Fragen zu beantworten.

Verweise

  • https://twitter.com/go100and1
  • https://twitter.com/go100and1/status/1623546829773361152

Guess you like

Origin blog.csdn.net/perfumekristy/article/details/129099919