Heim > Backend-Entwicklung > Golang > Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)

Freigeben: 2023-07-24 17:40:13
nach vorne
1179 Leute haben es durchsucht

Karte abrufen

Wir haben zuvor gesagt, dass die Karte in der Go-Sprache Daten in Form von Schlüssel-Wert-Paaren speichert, wie folgt. Für diejenigen, die sich nicht erinnern, klicken Sie bitte auf: Ein Artikel führt Sie dazu, die Grundlagen der Go-Sprachkarte und die grundlegende Kartenergänzung der Go-Sprache zu verstehen.

//方式一
var student = map[string]string{
    "Name": "张三",
    "Age":  "18",
}
//方式二
var student2 = make(map[string]string, 10)
student2["Name"] = "张三"
student2["Age"] = "18"
Nach dem Login kopieren

Aber das scheint einen Nachteil zu haben, ich weiß nicht, wie viele Schlüssel ich habe, und der Typ Wert ist festgelegt.

Theoretisch sollte der entsprechende Wert vom Typ Ageint sein nicht einfach zu lösen. Um diese Probleme zu lösen, wurde der Strukturtyp eingeführt.

Ergänzendes Vorspiel

Bevor wir mit der Struktur beginnen, schauen wir uns zwei seltsame Wissenspunkte an.


自定义类型

代码

type 自定义类型名 类型名
例:
type NewInt int
Nach dem Login kopieren

完整代码

package main


import "fmt"


type NewInt int


func main() {
    var n1 NewInt = 1
    fmt.Println(n1)//结果为1
}
Nach dem Login kopieren

如果要是理解的话,可以理解为NewInt包含了int的功能。

这里可以把NewInt当作int来使用。

注:NewInt是一个新的类型,它包含int,并不等于int


类型别名

代码

type 类型别名 = 类型名
例:
type Nint = int
Nach dem Login kopieren

完整代码

package main


import "fmt"


type Nint = int


func main() {
    var n1 Nint = 1
    fmt.Println(n1)//1
}
Nach dem Login kopieren

自定义类型和类型别名区别

可能猛一看,感觉自定义类型和类型别名似乎一样,但是其实是不太一样的。

代码

package main


import "fmt"


type Nint1 int   //自定义类型
type Nint2 = int //类型别名


func main() {
    var n1 Nint1 = 1
    var n2 Nint2 = 1
    fmt.Printf("n1类型:%T,n2类型:%T", n1, n2)
}
Nach dem Login kopieren

执行结果。

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)

Fazit: Benutzerdefinierte Typen sind wirklich benutzerdefinierte Typen. Die Typen haben sich nur am Typnamen geändert, aber das Wesentliche bleibt gleich. ?? Randstil: einfarbig; Randfarbe: RGB (231, 234, 237); Hintergrundfarbe: RGB (243, 244, 244); Randradius: 3 Pixel; Auffüllung rechts: 2 Pixel; Auffüllung links: 2 Pixel; Schriftgröße: 0,9em; : einfarbig; Randfarbe: RGB (231, 234, 237); Hintergrundfarbe: RGB (243, 244, 244); Randradius: 3 Pixel; Abstand rechts: 2 Pixel; Abstand links: 2 Pixel; Schriftgröße : 0.9em;">Python
Klassen in Sprachen wie Python sind nicht mehr so ​​einfach wie einfache Strukturen.


structure

gehört zu

Grundlegende Datentypen

. JavaPython等语言中的类,已经不再是简简单单的结构体那么简单了。

结构体属于基本数据类型

内存图大概如下

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)


结构体定义

定义结构体需要用到关键字typestruct

Die Speicherzuordnung sieht ungefähr wie folgt aus

🎜. 🎜🎜

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)🎜< p style="max-width:90%">🎜🎜

🎜Sie müssen Schlüsselwörter verwenden, um die Struktur zu definieren🎜🎜type🎜🎜and🎜🎜struct🎜🎜. 🎜🎜

语法

type 结构体名 struct {
    字段1 字段类型1
    字段2 字段类型2
    ...
}
Nach dem Login kopieren

示例,通过结构体描述一个学生。

type Student struct {
    Name   string
    Age    int
    Height int
    Weight int
    phone string
}
Nach dem Login kopieren

注:如果字段类型是相同的,可以写在同一行。

type Student struct {
  Name                string
  Age, Height, Weight int
  phone               string
}
Nach dem Login kopieren

结构体初始化

方式一,赋值时初始化

func main() {
  var s1 = Student{
    Name:   &amp;amp;amp;quot;张三&amp;amp;amp;quot;,
    Age:    18,
    Height: 180,
    Weight: 120,
    phone:  &amp;amp;amp;quot;6666666&amp;amp;amp;quot;,
  }
  fmt.Println(s1)
}
Nach dem Login kopieren

方式二,先声明,后赋值

func main() {
  var s1 Student
  s1.Name = &amp;amp;amp;quot;张三&amp;amp;amp;quot;
  s1.Age = 18
  s1.Height = 180
  s1.Weight = 120
  s1.phone = &amp;amp;amp;quot;66666&amp;amp;amp;quot;
}
Nach dem Login kopieren

两个执行结果。

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)


匿名结构体

有时候我们的函数可能会要求传入一个结构体,但是你又不想定义,就想临时用一下,赶紧传参得了。

这时候可以考虑匿名结构体。

方式一,先声明,后赋值

func main() {
  var car struct {
    Name   string;
    CarNum string
  }
  car.Name = &amp;amp;amp;quot;QQ&amp;amp;amp;quot;
  car.CarNum = &amp;amp;amp;quot;京6666&amp;amp;amp;quot;
  fmt.Println(car) //{QQ 京6666}
}
Nach dem Login kopieren

方式二,声明+初始化

func main() {
  var car = struct {
    Name   string;
    CarNum string
  }{
    Name:   &amp;amp;amp;quot;QQ&amp;amp;amp;quot;,
    CarNum: &amp;amp;amp;quot;京6666&amp;amp;amp;quot;,
  }


  fmt.Println(car) //{QQ 京6666}
}
Nach dem Login kopieren

两个执行结果。

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)


通过&amp;amp;amp;方式初始化结构体

通过&amp;amp;amp;的方式初始化,性能会提高一点,因为返回的是第一个的指针

但是操作过程跟上述一样,Go已经封装好了。

代码

func main() {
  //方式一,等于一个空&amp;amp;amp;amp;结构体在赋值
  var s1 = &amp;amp;amp;amp;Student{}
  s1.Name = &amp;amp;amp;quot;张三&amp;amp;amp;quot;
  //...
  //方式二,直接赋值
  var s2 = &amp;amp;amp;amp;Student{
    Name:   &amp;amp;amp;quot;&amp;amp;amp;quot;,
    Age:    0,
    Height: 0,
    Weight: 0,
    phone:  &amp;amp;amp;quot;&amp;amp;amp;quot;,
  }
  //方式三不可以
  //var s3 &amp;amp;amp;amp;Student//error
}
Nach dem Login kopieren

使用&amp;amp;amp;的方式基本跟原来一样,但是方式三不行。


&amp;amp;amp;初始化结构体函数注意事项

如果使用&amp;amp;amp;的方式,那函数参数也要变一下的。

package main


import &amp;amp;amp;quot;fmt&amp;amp;amp;quot;


type Student struct {
  Name                string
  Age, Height, Weight int
  phone               string
}


func sayStudent1(s Student) {
  fmt.Println(s)
}
func sayStudent2(s *Student) {
  //如果穿的是结构体地址,那么接收就需要用*
  fmt.Println(s)
}
func main() {
  var s1 = Student{
    Name:   &amp;amp;amp;quot;111&amp;amp;amp;quot;,
    Age:    0,
    Height: 0,
    Weight: 0,
    phone:  &amp;amp;amp;quot;1111&amp;amp;amp;quot;,
  }
  var s2 = &amp;amp;amp;amp;Student{
    Name:   &amp;amp;amp;quot;2222&amp;amp;amp;quot;,
    Age:    0,
    Height: 0,
    Weight: 0,
    phone:  &amp;amp;amp;quot;2222&amp;amp;amp;quot;,
  }
  sayStudent1(s1)
  sayStudent2(s2)
}
Nach dem Login kopieren

执行结果。

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)


关于结构体默认值

代码

func main() {
  var s1 = Student{}
  fmt.Println(s1)
}
Nach dem Login kopieren

执行结果。

Struktur der Grundlagen der Go-Sprache (Frühjahrskapitel)

在操作结构体时,即使没有赋值,也会有默认值,所以不用担心会报错。

int默认值是0,string默认值是"",等。

Das obige ist der detaillierte Inhalt vonStruktur der Grundlagen der Go-Sprache (Frühjahrskapitel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Go语言进阶学习
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