Maison >Problème commun >Le golang est-il un langage de haut niveau ?
golang est un langage de haut niveau. 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 des programmes de manière plus compréhensible. dans le processus de développement de grands systèmes et prend en charge la concurrence. , des spécifications unifiées, des performances simples et élégantes et puissantes. L'objectif principal est de combiner la vitesse de développement des langages dynamiques tels que Python avec les performances et la sécurité des langages compilés. tels que C/C++.
L'environnement d'exploitation de ce tutoriel : système Windows 10, GO version 1.20, ordinateur Dell G3.
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é et l'élégance, ainsi que ses performances puissantes. L'objectif principal est "d'inclure la vitesse de développement des langages dynamiques tels que Python et les performances et la sécurité des langages compilés tels que C/C++".
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 le langage populaire Go, Java, C, C++, C#, Pascal, Python, Lisp, Prolog, FoxPro, Easy Language, version chinoise. du langage C, 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 les performances puissantes. Il est utilisé par de nombreux évangélistes du langage Go. Connu comme « le langage C à l'ère du cloud computing ». L'objectif principal du langage Go est de « combiner la vitesse de développement des langages dynamiques comme Python et les performances et la sécurité des langages compilés comme le C/C++ ».
Le langage Go est parfois décrit comme un « langage de type C », ou « le langage C du 21e 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 Programmer's Voice : si le monde réel l'exige, je peux prototyper, tester et déployer un système de production en quelques jours, et gérer 5 fois plus de requêtes par seconde, CPU et mémoire. La surcharge est encore très importante. petit. 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é 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. Garbage collection : le langage Go prend en charge le garbage collection. 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é du développement : le langage Go présente à 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. Le langage C peut être appelé : les fonctions du langage C peuvent être appelées 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, faciles à tester, à maintenir et à développer.
Le langage Go présente les défauts suivants :
Manque de framework 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 adepte de la POO, cela peut être un peu inconfortable.
syntaxe avancée 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() } }
slice La couche inférieure de slice est un tableau
slice est une vue du tableau
slice peut être étendue vers l'arrière, mais pas vers l'avant
s[i] ne peut pas dépasser la ou les lentilles, vers Post- l'expansion ne peut pas dépasser le(s) cap(s) du tableau sous-jacent(s)
slice maintient trois variables en interne. 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)
接着上题 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
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, l'ajout doit être effectué. être accepté Valeur de retour
map
Tous les types en langage Go 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 ne sera signalée. 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 struce 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 des méthodes
Comment développer types de système ou types d'autres personnes : via 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() { }
Récepteur de valeur vs récepteur de pointeur,
Le récepteur de valeur est unique au langage Go
Pour modifier le contenu, vous devez utiliser un récepteur de pointeur,
Considérez utiliser un récepteur pointeur si la structure est trop grande.
Les deux récepteurs de valeur/pointeur peuvent appeler des appels de valeur/pointeur
package main import "fmt" type node struct { value int left, right *node } func newNode(value int) *node{ return &node{ value: value, left: nil, right: nil, } } func (n node) setVal(val int) { n.value = val } func (n *node) setValue(vall int) { n.value = vall } func (n node) print() { fmt.Println(n.value) } func (n *node) travel() { if n == nil { return } fmt.Println(n.value) n.left.travel() n.right.travel() } func main() { var root node root = node{} root.left = &node{value:5} root.right = new(node) root.left.right = &node{4, nil, nil} root.right.left = newNode(7) // 调用指针方法,相当于引用传递,可以改变外部的值 root.left.setValue(100) fmt.Println(root.left.value) // 值传递,调用值方法,方法内部不能改变外部值 root.left.setVal(99) fmt.Println(root.left.value) // 先序遍历 root.travel() }
interface
Combinaison d'interface polyvalente
defer
la panique et le retour n'affectent pas les appels différés
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!