Maison >Problème commun >Le golang est-il un langage de haut niveau ?

Le golang est-il un langage de haut niveau ?

百草
百草original
2023-07-07 13:44:51788parcourir

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++.

Le golang est-il un langage de haut niveau ?

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!

Déclaration:
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