Go Sprachnotizen 1-grundlegende Datentypen und Grammatik


Anfängernotizen, bitte verzeihen Sie mir etwaige Fehler und werden durch die Vertiefung des Lernens bereichert und aktualisiert

Eigenschaften

Prägnant, schnell, sicher
Parallele, interessante Open-Source-
Speicherverwaltung, Array-Sicherheit, schnelle Kompilierung

Haupteigenschaften

Automatische Speicherbereinigung
Reichhaltigere integrierte Typen
Funktion Mehrere Rückgabewerte
Fehlerbehandlung
Anonyme Funktionen und Schließungen
Typen und Schnittstellen
Gleichzeitige Programmierung
Reflection
Language Interaktivität

Sprachgebrauch

Eine Systemprogrammiersprache, die in riesigen zentralen Servern verwendet wird, die mit Webservern, Speicherclustern oder ähnlichen Zwecken ausgestattet sind.
Bietet massive parallele Unterstützung und eignet sich für die Entwicklung von Spieleservern

Programm ausführen

Grundlegende Zusammensetzung des Programms

package main  //包声明

import "fmt"  //引入包

func main() {
    
      //函数
   // 注释  /* 第一个简单的程序 */
   fmt.Println("Hello, World!")  
   //变量  
   //语句 & 表达式
}

Beachten Sie, dass '{' keine einzelne Zeile sein darf

Es gibt zwei Möglichkeiten, das Programm auszuführen

  • Führen Sie filename.go aus
  • go build
    filename.go generiert den Dateinamen der Binärdatei ./filename

Über die Tasche

Der Dateiname steht nicht in direktem Zusammenhang mit dem Paketnamen, und der Dateiname und der Paketname müssen nicht identisch sein.
Der Ordnername steht nicht in direktem Zusammenhang mit dem Paketnamen und muss nicht konsistent sein.
Die Dateien im selben Ordner können nur einen Paketnamen haben, andernfalls wird der Kompilierungsfehler gemeldet.

Art der Daten

Boolescher Typ

richtig oder falsch:

var b bool = true;

Nummerntyp

Integer-Typ int und Gleitkomma-Typ float32, float64

Zeichenfolgentyp

Go-Zeichenfolge ist eine Zeichenfolge der
Go-Sprache, die durch ein einzelnes Byte verbunden ist. Die UTF-8-Codierung wird verwendet, um Unicode-Text zu identifizieren.

Abgeleiteter Typ

  • Zeigertyp (Zeiger)
  • Array-Typ
  • Strukturierter Typ (Struktur)
  • Kanaltyp
  • Funktionsart
  • Scheibentyp
  • Schnittstellentyp (Schnittstelle)
  • Kartentyp

Grammatik

Variable deklarieren

Variablennamen in der Sprache Go bestehen aus Buchstaben, Zahlen und Unterstrichen. Das erste Zeichen darf keine Zahl sein.
Die allgemeine Form der Deklaration von Variablen ist die Verwendung des Schlüsselworts var:

war Bezeichner Typ

Einfaches Beispiel

var a int // Wenn es nicht initialisiert wird, ist es der Wert Null, der Wert bool Null ist falsch, der String ist ein leerer String
var b int = 32
var c, d int // mehrere Variablen deklarieren
var str1 string = “str”
e: = 10 // Wenn var weggelassen wird, muss die Variable neu deklariert werden und kann nur im Funktionskörper erscheinen

Multivariate Deklaration

Mehrere Variablen desselben Typs, nicht globale Variablen

var vname1, vname2, vname3 Typ
vname1, vname2, vname3 = v1, v2, v3

Ähnlich wie bei Python muss der deklarierte Typ nicht angezeigt werden, sondern wird automatisch abgeleitet

var vname1, vname2, vname3 = v1, v2, v3

Variablen, die auf der linken Seite von: = angezeigt werden, sollten nicht deklariert worden sein, da dies sonst zu Kompilierungsfehlern führt

vname1, vname2, vname3: = v1, v2, v3

Diese Art des Faktorisierens von Schlüsselwörtern wird im Allgemeinen verwendet, um globale Variablen zu deklarieren

var (
    vname1 v_type1
    vname2 v_type2
 )

Werttyp und Referenztyp

Alle Basistypen wie int, float, bool und string sind Werttypen. Variablen, die diese Typen verwenden, verweisen direkt auf den im Speicher gespeicherten Wert.
Verwenden Sie das Gleichheitszeichen =, um den Wert einer Variablen einer anderen Variablen zuzuweisen, z. B.: J = i Tatsächlich wird der Wert von i in den Speicher kopiert
(er kann als tiefe Kopie verstanden werden).

Eine Referenztypvariable r1 speichert die Speicheradresse (Nummer), an der sich der Wert von r1 befindet, oder die Position des ersten Wortes in der
Speicheradresse. Diese Speicheradresse wird als Zeiger bezeichnet, und dieser Zeiger wird tatsächlich in einem anderen Wert gespeichert im

Wenn die Zuweisungsanweisung r2 = r1 verwendet wird, wird nur die Referenz (Adresse) kopiert.
Wenn der Wert von r1 geändert wird, verweisen alle Verweise auf diesen Wert auf den geänderten Inhalt
(kann als flache Kopie verstanden werden).

Sie können die Werte zweier Variablen direkt wie bei Python austauschen:

a, b = b, a

Leere Kennung

Der leere Bezeichner _ wird auch zum Verwerfen von Werten verwendet. Beispielsweise wird der Wert 5 verworfen in: _, b = 5, 7.
_ Ist eigentlich eine schreibgeschützte Variable und ihr Wert kann nicht erhalten werden. Dies liegt daran, dass alle deklarierten Variablen in der Sprache Go verwendet werden müssen. Manchmal ist es jedoch nicht erforderlich, alle von einer Funktion erhaltenen Rückgabewerte zu verwenden.
sowie:

package main

import "fmt"

func main() {
    
    
  _,numb,strs := numbers() //只获取函数返回值的后两个
  fmt.Println(numb,strs)
}

//一个可以返回多个值的函数
func numbers()(int,int,string){
    
    
  a , b , c := 1 , 2 , "str"
  return a,b,c
}

Die endgültige Ausgabe ist 2 str

Die parallele Zuweisung wird auch verwendet, wenn eine Funktion mehrere Rückgabewerte zurückgibt. Beispielsweise werden val und error err durch gleichzeitiges Aufrufen von Func1 erhalten: val, err = Func1 (var1).

Konstante

Konstante Definition

Das Definitionsformat von Konstanten:

const bezeichner [typ] = wert

[Typ] kann weggelassen werden, der Compiler leitet automatisch die
explizite Typdefinition ab: const b string = "abc" die
implizite Typdefinition: const b = "abc"

Jota

iota, eine spezielle Konstante, kann als Konstante betrachtet werden, die vom Compiler geändert werden kann.

iota wird auf 0 zurückgesetzt, wenn das Schlüsselwort const angezeigt wird (vor der ersten Zeile innerhalb von const), und jede neue Zeile der Konstantendeklaration in const zählt iota (iota kann als Zeilenindex im const-Anweisungsblock verstanden werden).

const (
    a = iota
    b = iota
    c = iota
)

Das erste Jota ist gleich 0. Immer wenn Iota in einer neuen Zeile verwendet wird, wird sein Wert automatisch um 1 erhöht, sodass a = 0, b = 1, c = 2 wie folgt abgekürzt werden kann:

const (
    a = iota
    b
    c
)

Beispiele:

package main

import "fmt"

func main() {
    
    
    const (
            a = iota   //0
            b          //1
            c          //2
            d = "ha"   //独立值,iota += 1
            e          //"ha"   iota += 1
            f = 100    //iota +=1
            g          //100  iota +=1
            h = iota   //7,恢复计数
            i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
    // 0 1 2 ha ha 100 100 7 8
}

Beispiel für eine Verschiebung nach links:

package main

import "fmt"
const (
    i=1<<iota
    j=3<<iota
    k
    l
)

func main() {
    
    
    fmt.Println(i,j,k,l)
    // 1 6 12 24
}

iota bedeutet, automatisch 1 von 0 zu addieren, also i = 1 << 0, j = 3 << 1 (<< bedeutet Verschiebung nach links), dh: i = 1, j = 6, das ist kein Problem, der Schlüssel liegt in k und l, k = 3 << 2, l = 3 << 3 aus dem Ausgabeergebnis.

Einfach ausgedrückt:

i = 1: um 0 Bits nach links verschieben und unverändert als 1 bleiben;
j = 3: um 1 Bit nach links verschieben und binär 110 werden, was 6 ist;
k = 3: um 2 Bits nach links verschieben und werden binär 1100, was 12 ist;
l = 3: Verschiebung um 3 Bits nach links, es wird 11000 in binär, dh 24.

注 : << n == * (2 ^ n)。

Operator

Ähnlich wie C ++ (möglicherweise sind alle Sprachen ähnlich):

Bitweiser Operator

Fügen Sie hier eine Bildbeschreibung ein

Aufgabenverwalter

Fügen Sie hier eine Bildbeschreibung ein

Andere Betreiber

Fügen Sie hier eine Bildbeschreibung ein

Bedingte Anweisungen

Zusätzlich zu if, if ... else, wenn verschachtelt und gewechselt wird, gibt es eine select
select-Anweisung, die einer switch-Anweisung ähnelt, aber select führt einen ausführbaren Fall nach dem Zufallsprinzip aus. Wenn kein Fall ausgeführt werden muss, wird er blockiert, bis ein Fall ausgeführt werden muss.

Go hat keinen ternären Operator

Schleifenanweisung

für, für verschachtelte
Kontrolle: brechen, fortfahren, gehen

Ich denke du magst

Origin blog.csdn.net/MinutkiBegut/article/details/115274392
Empfohlen
Rangfolge