Table des matières
Slice(切片)
Map
结构体
JSON
文本和HTML模板
小结
Maison interface Web tutoriel HTML Go 学习笔记(四)- 复合数据类型_html/css_WEB-ITnose

Go 学习笔记(四)- 复合数据类型_html/css_WEB-ITnose

Jun 24, 2016 am 11:20 AM

跟 js 不一样,go 的数组是固定的,不过可以通过 Slice(切片)来截取或增加数组内容。数组的索引从 0 开始,到长度-1结束,数组长度通过 len 获取。

var a [3]int // 数组声明var b [3]int = [3]int{1, 2, 3} // 数组声明+初始化fmt.Printf("%v, %v, %#v\n", len(a), a[0], a)fmt.Printf("%v, %v, %#v\n", len(b), b[0], b)// 3, 0, [3]int{0, 0, 0}// 3, 1, [3]int{1, 2, 3}
Copier après la connexion

数组未带初始化时,为该类型默认的零值。

a := [...]int{1, 2, 3} // 简化声明b := [...]int{2: -1}fmt.Printf("%v, %v, %#v\n", len(a), a[0], a)fmt.Printf("%v, %v, %#v\n", len(b), b[2], b)// 3, 1, [3]int{1, 2, 3}// 3, -1, [3]int{0, 0, -1}
Copier après la connexion

省略号 ...是根据初始值个数来计算的的,可以方便我们修改数据。

Slice(切片)

Slice(切片)代表变长的序列,slice 的语法和数组很像,只是没有固定长度而已。

一个 slice 由三个部分构成:指针、长度和容量,内置的 len和 cap函数分别返回 slice 的长度和容量。

arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}a := arr[:]b := arr[:5]c := arr[5:]fmt.Printf("%v, %v, %#v\n", len(arr), cap(arr), arr)fmt.Printf("%v, %v, %#v\n", len(a), cap(a), a)fmt.Printf("%v, %v, %#v\n", len(b), cap(b), b)fmt.Printf("%v, %v, %#v\n", len(c), cap(c), c)// 10, 10, [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}// 10, 10, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}// 5, 10, []int{0, 1, 2, 3, 4}// 5, 5, []int{5, 6, 7, 8, 9}
Copier après la connexion

或者直接创建 Slice 类型:

arr := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Copier après la connexion

注意, []里没写数组大小以及 ...,这是声明一个 Slice 类型。

slice 之间不能最 ==比较,唯一合法的比较操作是和nil比较。

arr := []int{1, 2, 3}arr = append(arr, 4, 5)b := []int{6, 7, 8}arr = append(arr, b...)fmt.Printf("%v, %v, %#v\n", len(arr), cap(arr), arr)// 8, 12, []int{1, 2, 3, 4, 5, 6, 7, 8}
Copier après la connexion

通过 append添加 Slice 元素。

Map

它是一个无序的key/value对的集合,就类似 js 的对象字面量一样,只是带了类型。

a := make(map[string]int)a["aa"] = 11a["bb"] = 22b := map[string]int{  "aa": 11,  "bb": 22,}delete(b, "aa")fmt.Printf("%#v\n", a)fmt.Printf("%#v\n", b)// map[string]int{"aa":11, "bb":22}// map[string]int{"bb":22}
Copier après la connexion

通过 make创建,或直接字面量创建 map,通过 delete删除指定键。

a := map[string]map[string]int{  "aa": {    "aaa": 111,  },  "bb": {    "bbb": 222,  },}fmt.Printf("%v\n", a)// map[aa:map[aaa:111] bb:map[bbb:222]]
Copier après la connexion

嵌套的 map 也还好,就是声明部分比较长,键值的表示跟 js 的几乎一样。

结构体

这个概念是我大学的时候学 C 接触到的概念,之后就再也没接触了。。不过 go 的结构体还是比较简单直观的。

type Point struct {  X int  Y int}// 或者type Point struct {  X, Y int}
Copier après la connexion

使用:

a := Point{11, 22} // 按值的顺序b := Point{Y: 11, X: 22} // 通过成员赋值fmt.Printf("%+v\n", a)fmt.Printf("%+v\n", b)// {X:11 Y:22}// {X:22 Y:11}
Copier après la connexion

嵌入:

type Point struct {  X, Y int}type Circle struct {  Center Point  Radius int}type Wheel struct {  Circle Circle  Spokes int}
Copier après la connexion

使用的时候要注意,不能直接填值,要跟类型一起填充。

a := Wheel{Circle{Point{11, 22}, 33}, 44}fmt.Printf("%+v\n", a)// {Circle:{Center:{X:11 Y:22} Radius:33} Spokes:44}
Copier après la connexion

JSON

算是扩展说明了,因为只是 结构体 和 encoding/json包的应用。

结构体声明如下:

type Movie struct {  Title  string  Year   int  `json:"released"`  Color  bool `json:"color,omitempty"`  Actors []string}
Copier après la connexion

应用如下:

var movies = []Movie{  {Title: "Casablanca", Year: 1942, Color: false,    Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}},  {Title: "Cool Hand Luke", Year: 1967, Color: true,    Actors: []string{"Paul Newman"}},  {Title: "Bullitt", Year: 1968, Color: true,    Actors: []string{"Steve McQueen", "Jacqueline Bisset"}},}data, err := json.Marshal(movies)if err != nil {  log.Fatalf("JSON marshaling failed: %s", err)}fmt.Printf("%s\n", data)// [{"Title":"Casablanca","released":1942,"Actors":["Humphrey Bogart","Ingrid Bergman"]},{"Title":"Cool Hand Luke","released":1967,"color":true,"Actors":["Paul Newman"]},{"Title":"Bullitt","released":1968,"color":true,"Actors":["Steve McQueen","Jacqueline Bisset"]}]
Copier après la connexion

json 数据里 Year 变成了 released,Color 变成了 color,而且 Color 为 false 时,json 数据里忽略了这个字段。

这是因为构体成员 Tag 所导致的,也就是 json:"released"和 json:"color,omitempty"控制的。

文本和HTML模板

乍一看跟 es6 的字符模板一毛一样。。其实还是有一点点小区别的。

const templ = `{{.TotalCount}} issues:{{range .Items}}=======================Number: {{.Number}}User: {{.User.Login}}Title: {{.Title | printf "%.64s"}}Age: {{.CreatedAt | daysAgo}} days{{end}}`
Copier après la connexion

模板中标签中数据输出是以 .开头的字段,如果不是,那就是命令,例如 range开始 end结束的,就是个循环。

而 html 模板跟 text 模板唯一区别就是实体转义。

小结

复合数据类型,其实出了语法外,都是基本类型的各种组合。明天就是函数部分了,加油。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le but du & lt; Progress & gt; élément? Quel est le but du & lt; Progress & gt; élément? Mar 21, 2025 pm 12:34 PM

L'article traite du HTML & lt; Progress & GT; élément, son but, son style et ses différences par rapport au & lt; mètre & gt; élément. L'objectif principal est de l'utiliser & lt; Progress & gt; pour l'achèvement des tâches et & lt; mètre & gt; pour stati

Quel est le but du & lt; datalist & gt; élément? Quel est le but du & lt; datalist & gt; élément? Mar 21, 2025 pm 12:33 PM

L'article traite du HTML & lt; Datalist & GT; élément, qui améliore les formulaires en fournissant des suggestions de saisie semi-automatique, en améliorant l'expérience utilisateur et en réduisant les erreurs. COMMANDE COMPRES: 159

Quel est le but du & lt; mètre & gt; élément? Quel est le but du & lt; mètre & gt; élément? Mar 21, 2025 pm 12:35 PM

L'article traite du HTML & lt; mètre & gt; élément, utilisé pour afficher des valeurs scalaires ou fractionnaires dans une plage, et ses applications courantes dans le développement Web. Il différencie & lt; mètre & gt; De & lt; Progress & gt; et ex

Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Mar 20, 2025 pm 05:56 PM

L'article traite de la balise Meta de la fenêtre, essentielle pour la conception Web réactive sur les appareils mobiles. Il explique comment une utilisation appropriée garantit une mise à l'échelle optimale du contenu et une interaction utilisateur, tandis que la mauvaise utilisation peut entraîner des problèmes de conception et d'accessibilité.

Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Mar 20, 2025 pm 06:05 PM

L'article traite du & lt; iframe & gt; L'objectif de Tag dans l'intégration du contenu externe dans les pages Web, ses utilisations courantes, ses risques de sécurité et ses alternatives telles que les balises d'objet et les API.

HTML est-il facile à apprendre pour les débutants? HTML est-il facile à apprendre pour les débutants? Apr 07, 2025 am 12:11 AM

HTML convient aux débutants car il est simple et facile à apprendre et peut rapidement voir les résultats. 1) La courbe d'apprentissage de HTML est fluide et facile à démarrer. 2) Il suffit de maîtriser les balises de base pour commencer à créer des pages Web. 3) Flexibilité élevée et peut être utilisée en combinaison avec CSS et JavaScript. 4) Les ressources d'apprentissage riches et les outils modernes soutiennent le processus d'apprentissage.

Les rôles de HTML, CSS et JavaScript: responsabilités de base Les rôles de HTML, CSS et JavaScript: responsabilités de base Apr 08, 2025 pm 07:05 PM

HTML définit la structure Web, CSS est responsable du style et de la mise en page, et JavaScript donne une interaction dynamique. Les trois exercent leurs fonctions dans le développement Web et construisent conjointement un site Web coloré.

Quel est un exemple d'une balise de départ dans HTML? Quel est un exemple d'une balise de départ dans HTML? Apr 06, 2025 am 12:04 AM

Anexampleofastartingtaginhtmlis, qui abinginsaparagraph.startingtagsaressentialtinhtmlastheyinitiateelements, définit les éventualités, et la faculté de réduction des pages et de la construction de la création.

See all articles