Backend-Entwicklung
Golang
Ein Artikel, der Ihnen hilft, die Grundlagen der Go-Sprachkarte zu verstehen
Ein Artikel, der Ihnen hilft, die Grundlagen der Go-Sprachkarte zu verstehen
Vorwort
Hallo zusammen, ich bin Zhou Ba. Dieses Mal werden wir weiterhin die Grundlagen der Go-Karte lernen.
Erinnerungen an die Vergangenheit
In den oben genannten Artikeln haben wir etwas über Datentypen, Array gelernt , Scheiben usw., um uns bei der Datenspeicherung zu helfen.
Besonders Slices, die mehrere Dinge speichern und flexibel hinzugefügt, gelöscht, geändert und überprüft werden können.
Aber das Schneiden bringt immer noch einige Unannehmlichkeiten mit sich.
Zum Beispiel hat ein Schüler mehrere Informationen, wie Name, Größe, Gewicht, Alter etc.
Wenn wir Scheiben verwenden, lagern wir es möglicherweise so.
package main
import "fmt"
func main() {
//学生1
var stu1 = []string{"张三", "188", "70KG", "18"}
//学生2
var stu2 = []string{"李四", "170", "66KG", "17"}
fmt.Println(stu1)
fmt.Println(stu2)
}Nach dem aktuellen Wissensstand kann ich nur so weit gehen, und mir fällt nur das hier ein.
Aber es wird einen offensichtlichen Nachteil geben, das heißt, wir müssen subscript verwenden, um den Wert zu erhalten oder den Wert ändern.
Und wir müssen zählen, wo sich der Index des Werts befindet, den wir ändern möchten, was relativ nicht so praktisch ist.
Wir stellen vor: Map, das in Python Dictionary und in Java Map heißt, scheint die Funktion einer Map zu haben.
map ist eine
Schlüssel-Wert-Paar (Schlüsselwert) Speicherstruktur, die ungeordnet ist und intern Hash (Hash) verwendet Umsetzung, Leistung Sehr hoch. In Go ist die Karte ein
Referenztyp und die Speicherzuordnung sieht wie folgt aus.
map基本使用
map语法
方式一,声明时赋值
var 变量名 = map[key类型][value类型]{
key:value,
key:value,//必须使用,结尾,否则会报错
}
//方式二,make方式
var 变量名 = make(map[key类型]value类型, 容量(cap))
//如果map是make方式声明的,第二个参数直接就是容量,元素个数是0,没有第三个参数示例
方式一,声明时赋值
代码
package main
import "fmt"
func main() {
var stu1 = map[string]string{
"Name": "张三",
"Age": "18",
"height": "188", //每行都要以,结尾,
}
var stu2 = map[string]string{
"Name": "李四",
"Age": "20",
"height": "170", //每行都要以,结尾,
}
fmt.Println(stu1, stu2)
//map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170]
}方式二,make方式
代码
package main
import "fmt"
func main() {
var stu1 = make(map[string]string,10)
stu1["Name"] = "张三"
stu1["Age"] = "18"
stu1["height"] = "188"
var stu2 = make(map[string]string,10)
stu2["Name"] = "李四"
stu2["Age"] = "20"
stu2["height"] = "170"
fmt.Println(stu1,stu2)
//map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170]
}ps:关于这两种方式,哪个使用的多。
我的建议是,如果确定有多少个字段,就使用第一种,如果不确定多少个字段,是动态添加的,用第二种。
使用第二种要大概估算好容量,超过会触发自动扩容机制,可能会产生那么一丝丝的性能影响。
遍历map(查)
遍历map,通常只用一种方式for range。
代码
package main
import "fmt"
func main() {
var stu1 = make(map[string]string, 10)
stu1["Name"] = "张三"
stu1["Age"] = "18"
stu1["height"] = "188"
for key, value := range stu1 {
//map遍历时,key值键,value是值
fmt.Println(key, value)
}
}只遍历key
package main
import "fmt"
func main() {
var stu1 = make(map[string]string, 10)
stu1["Name"] = "张三"
stu1["Age"] = "18"
stu1["height"] = "188"
for key := range stu1 {
//只遍历key
fmt.Println(key)
}
}修改map的值(改)
package main
import "fmt"
func main() {
//var stu1 = make(map[string]string, 10)
//stu1["Name"] = "张三"
//stu1["Age"] = "18"
//stu1["height"] = "188"
//
//stu1["Name"] = "张三666"//修改
//fmt.Println(stu1)
//同上
var stu1 = map[string]string{
"Name": "张三",
"Age": "18",
"height": "188", //每行都要以,结尾,
}
stu1["Name"] = "张三666"//修改
fmt.Println(stu1)
}删除map里面的值
删除map里面的值需要用到delete。
代码
package main
import "fmt"
func main() {
var stu1 = map[string]string{
"Name": "张三",
"Age": "18",
"height": "188", //每行都要以,结尾,
}
fmt.Println(stu1) //map[Age:18 Name:张三 height:188]
delete(stu1, "Name") //删除key以及key对应的值
fmt.Println(stu1) //map[Age:18 height:188]
}map取值注意事项
map在取值时,尽可能的判断一下是否key存在
package main
import "fmt"
func main() {
var stu1 = map[string]string{
"Name": "张三",
"Age": "18",
"height": "188", //每行都要以,结尾,
}
//result := stu1["Name"]//key存在,没问题
//fmt.Println(result)//张三
//result := stu1["Names"]//手一抖,key打错了
//fmt.Println(result)//结果为空,显然不是太友好
//取值标准用法
result, ok := stu1["Name"]
//如果key存在,ok为true,如果key不存在,ok为false
fmt.Println(result,ok)//张三 true
if ok {
fmt.Println(result)
} else {
fmt.Println("key不存在")
}
}
总结
上述我们学习了Go基础之map。如果在操作过程中有任何问题,记得下面讨论区留言,我们看到会第一时间解决问题。
Das obige ist der detaillierte Inhalt vonEin Artikel, der Ihnen hilft, die Grundlagen der Go-Sprachkarte zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Heiße KI -Werkzeuge
Undress AI Tool
Ausziehbilder kostenlos
Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos
AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.
Clothoff.io
KI-Kleiderentferner
Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!
Heißer Artikel
Heiße Werkzeuge
Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor
SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen
Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung
Dreamweaver CS6
Visuelle Webentwicklungstools
SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
Heiße Themen
Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren?
Apr 02, 2025 pm 04:54 PM
Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...
Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden?
Apr 02, 2025 pm 05:09 PM
Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...
Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly?
Apr 02, 2025 pm 02:09 PM
Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...
Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte?
Apr 02, 2025 pm 02:03 PM
Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...
Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt?
Apr 02, 2025 pm 04:12 PM
Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...
Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet?
Apr 02, 2025 pm 02:06 PM
In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...
Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann?
Apr 02, 2025 pm 03:48 PM
Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Bei der Entwicklung in Go ist die Verbindung zu Oracle -Datenbanken eine übliche Anforderung ...
Wie kann man in Go -Programmierung die Verbindungsressourcen zwischen MySQL und Redis korrekt verwalten?
Apr 02, 2025 pm 05:03 PM
Ressourcenverwaltung in Go -Programmierung: MySQL und Redis Connect und Release, um zu lernen, wie Ressourcen korrekt verwaltet werden, insbesondere mit Datenbanken und Caches ...


