go est un langage de haut niveau. Le langage Go est un langage de programmation open source créé par Google en 2009. Il est conçu pour résoudre des problèmes pratiques dans le processus de développement de systèmes à grande échelle. Il prend en charge la concurrence, les spécifications unifiées, la simplicité, l'élégance et les performances puissantes. L’objectif est « d’avoir à la fois la vitesse de développement des langages dynamiques comme Python et les performances et la sécurité des langages compilés comme C/C++ ».
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
Les langages informatiques sont divisés en langages de haut niveau et en langages de bas niveau. Le langage de haut niveau est principalement relatif au langage assembleur. Il s'agit d'une programmation plus proche du langage naturel et des formules mathématiques. Il est fondamentalement séparé du système matériel de la machine et écrit les programmes d'une manière plus facile à comprendre. Le programme écrit est appelé programme source.
Le langage de haut niveau ne fait pas référence à un langage spécifique, mais comprend de nombreux langages de programmation, tels que les populaires go语言
, java, c, c++, C#, pascal, python, lisp, prolog, FoxPro, Easy Language, version chinoise de C. langage, etc. La syntaxe et le format de commande de ces langages sont différents.
Le langage Go est un langage de programmation open source de haut niveau créé par Google en 2009 Il est conçu pour résoudre des problèmes pratiques dans le processus de développement de systèmes à grande échelle. Il prend en charge la concurrence, les spécifications unifiées, la simplicité, l'élégance et la puissance. Il est utilisé par de nombreux langages Go. L'évangéliste l'a salué comme "le langage C à l'ère du cloud computing". L'objectif principal du langage Go est de « disposer à la fois de la vitesse de développement des langages dynamiques tels que Python et des performances et de la sécurité des langages compilés tels que C/C++ ».
Le langage Go est parfois décrit comme un « langage de type C », ou « le langage C du 21ème siècle ». Go hérite d'une syntaxe d'expression, d'une structure de flux de contrôle, de types de données de base, d'un transfert de valeur de paramètre d'appel, de pointeurs et de nombreuses autres idées similaires du langage C. Il possède également l'efficacité de fonctionnement du code machine compilé que le langage C a toujours apprécié et est cohérent avec Seamless existant. adaptation au système d'exploitation.
Avantages et inconvénients de Go
Voix du programmeur : Si le monde réel m'oblige à prototyper, tester et déployer un système de production en quelques jours, et que je peux gérer 5 fois plus de requêtes par seconde qu'avant, la surcharge du processeur et de la mémoire sont encore très petits. Je pense que seul le langage Go peut le faire.
Le langage Go présente les avantages suivants :
Version binaire séparée : la compilation du projet Go générera un fichier exécutable statique. Ce fichier peut être exécuté indépendamment sans aucune autre dépendance. Cette approche est particulièrement adaptée aux environnements de conteneurs cloud natifs. - Compilation croisée : compilez des binaires sur n'importe quel système d'exploitation fonctionnant sur d'autres plates-formes. Par exemple, sur un système Mac, des fichiers binaires peuvent être compilés et peuvent fonctionner sous Linux et Windows.
- Collecte des ordures : le langage Go prend en charge le ramassage des ordures. En comparaison, C++, Rust, etc. obligent les développeurs à se contrôler.
- Performance d'exécution : Go est très rapide. Les performances sont proches du C++. Bien supérieur à Java, Python et Node.
- Efficacité de développement : le langage Go possède à la fois les performances d'exécution des langages statiques et l'efficacité de développement des langages dynamiques.
- Simplicité et efficacité : la philosophie de conception du langage Go inclut la simplicité et l'efficacité. Un contre-exemple typique est le langage Java, complexe et volumineux.
- Concurrence : le niveau de langage prend en charge la concurrence, simplifie le développement simultané via des coroutines et des canaux et améliore les performances de concurrence.
- Bibliothèque standard riche : la bibliothèque standard Go couvre le texte, les E/S, le réseau, le cryptage, les services Web, le RPC distant, le moteur de modèles et d'autres fonctions.
- Peut appeler le langage C : vous pouvez appeler des fonctions du langage C pour optimiser davantage les performances et réutiliser l'immense écosystème du langage C.
- Temps de compilation rapide : Go compile extrêmement rapidement. Vous pouvez vous référer à deux systèmes de génération de blogs statiques, Hexo (développement Node) et Hugo (développement Go).
- Type d'ingénierie : le but de la conception du langage Go est de devenir un langage d'ingénierie pour résoudre des problèmes d'ingénierie réels. Le langage Go définit les spécifications de développement et fournit une multitude d'outils. En utilisant le langage Go, vous pouvez écrire des programmes faciles à lire et à comprendre, et faciles à tester, à maintenir et à développer. [Recommandations associées :
- Tutoriel vidéo Go, Enseignement de la programmation]
Le langage Go présente les défauts suivants :
- Manque de cadre lourd. Tels que Ruby's Rails, Python's Django et Java's Spring.
- Gestion des erreurs : pas de système d'exception. Les responsables de Go résolvent ce problème.
- Gestion des packages logiciels : Depuis longtemps, Go ne dispose pas officiellement de système de gestion des packages. Jusqu'à récemment, la version 1.13 de Go introduisait officiellement Go Module en tant qu'outil officiel de gestion des dépendances.
- Il ne s'agit pas d'un modèle de programmation orienté objet standard : c'est aussi une innovation du langage Go. Si vous êtes un fervent défenseur de la POO, vous pourriez être un peu mal à l'aise avec la syntaxe avancée de
golang
rune
package main
import "fmt"
//rune相当于go的char 使用utf8编码,中文占3个字节,英文一个字节
func main() {
s:= "ok我爱你"
fmt.Println(len(s)) // 11
fmt.Println(len([]rune(s))) // 5
fmt.Println(len([]byte(s))) // 11
// str是int32类型
for i, str := range s {
fmt.Printf("%d %c", i, str)
fmt.Println()
}
// str是byte类型
for i, str := range []byte(s) {
fmt.Printf("%d %x", i, str)
fmt.Println()
}
// str是rune类型
for i, str := range []rune(s) {
fmt.Printf("%d %c", i, str)
fmt.Println()
}
}
Copier après la connexion
slice La couche inférieure de slice est un tableau
slice est une vue du tableau
- la tranche peut être étendue vers l'arrière, mais ne peut pas être étendue vers l'avant
- s[i] ne peut pas dépasser la ou les lentilles, et l'expansion vers l'arrière ne peut pas dépasser la ou les casquettes du tableau sous-jacentes
- intérieur de la tranche Trois variables sont conservés. Le pointeur ptr pointe vers le premier élément de la tranche, len spécifie la longueur de la tranche et cap spécifie la capacité de la tranche.
- Lorsqu'une tranche est ajoutée, si la capacité n'est pas suffisante, elle sera doublée.
-
有如下
arr := [...]{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6]
s2 := s1[3:5]
则
s1值为[2,3,4,5], len(s1)=4, cap(s1)=6
s2值为[5,6], len(s2)=2, cap(s2)=3
slice底层是数组
slice可以向后扩展,不可以向前扩展
s[i]不可以超过len(s), 向后扩展不可以超越底层数组cap(s)
Copier après la connexion
接着上题
arr := [...]{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6]
s2 := s1[3:5]
s3 := append(s2, 10)
s4 := append(s3, 11)
s5 := append(s4, 12)
则
s1值为[2,3,4,5]
s2值为[5,6]
s3值为[5,6,10]
s4值为[5,6,10,11]
s5值为[5,6,10,11,12]
arr值为[0, 1, 2, 3, 4, 5, 6, 10]
由于s4和时s5已经超过arr的cap,此时系统会生成一个新的数组,所以s4和s5是对新数组的view,即s4和s5 no longer view arr
Copier après la connexion
- Si le plafond est dépassé lors de l'ajout d'éléments, le système réattribuera un tableau sous-jacent plus grand et le tableau d'origine sera copié. Si personne n'utilise le tableau d'origine, ce sera gc
En raison du transfert de valeur, il doit être accepté La valeur de retour de append
map
Go langage tous les types ont des valeurs par défaut
Lorsque la clé de la valeur de la carte n'existe pas, seule la valeur par défaut sera renvoyée et aucune erreur sera signalé. Utilisez key pour déterminer si la clé existe, ok := m["key"]
- map utilise une table de hachage, et les clés utilisées comme carte doivent être relativement égales
- En plus de la tranche, de la carte et de la fonction intégrée les types peuvent être utilisés comme clés
- Le type de structure ne contient pas les champs ci-dessus et peut également être utilisé comme clé
-
-
struct
Seule l'utilisation de pointeurs peut modifier le contenu de la structure
les pointeurs nuls peuvent également appeler méthodes
- Comment étendre les types de systèmes ou les types d'autres personnes : Grâce à l'héritage de structure, alias par type
package main
// 如何扩充系统类型或者别人的类型:通过结构体继承,通过类型起别名
type queue []int
func (q *queue) push(v int) {
*q = append(*q, v)
}
func (q *queue) pop() int {
head := (*q)[0]
*q = (*q)[1:]
return head
}
func (q *queue) isEmpty() bool {
return len(*q) == 0
}
func main() {
}
Copier après la connexion
- Récepteur de valeur vs récepteur de pointeur,
Le récepteur de valeur est unique au langage Go
Pour changer le contenu, vous devez utiliser un récepteur pointeur,
-
Pensez à utiliser des récepteurs pointeurs si la structure est trop grande. Les deux récepteurs valeur/pointeur peuvent appeler des appels valeur/pointeur.
Ni la panique ni le retour n'affectent le report -
Pour plus de connaissances sur la programmation, veuillez visiter :
Vidéo de programmation- ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!