cette page http://golang.org/doc/go_faq.html écrit:
bien que Go ait des types statiques, le langage tente de rendre les types plus légers que dans les langages OO typiques
Donc ma question est exactement si elle est typée en toute sécurité avec des génériques (comme C #) ou vaguement typée (comme javascript) ou facultative (comme l'option stricte dans Vb.Net)
Réponses:
La sécurité de type n'est pas un type sûr en noir ou blanc. C'est plus un spectre et certaines langues peuvent être plus sécuritaires que d'autres (et vice versa). Cependant, je pense que ce que vous pensez avec C # vs Javascript est probablement le typage statique (où la vérification de type se produit au moment de la compilation) vs le typage dynamique (où la vérification de type se produit au moment de l'exécution) - certainement, c'est de quoi parle la FAQ Go.
Google Go est tapé de façon statique, mais un certain nombre de fonctionnalités le font "sembler" être (au moins quelque peu) typé dynamiquement. Par exemple, vous n'avez pas besoin de marquer explicitement votre classe comme implémentant des interfaces. Si les signatures de méthode de votre classe correspondent à celles de l'interface, votre classe implémente automatiquement cette interface (une sorte de typage de canard). Ceci est utile pour étendre les classes intégrées et les classes dans des bibliothèques tierces, car vous pouvez simplement créer votre interface pour qu'elle corresponde aux méthodes de la classe tierce et elle l'implémentera automatiquement.
La sécurité de type est en fait un "axe" différent du système de type. Par exemple, C est un langage de type statique qui n'est pas sûr pour le type - les pointeurs vous permettent de faire à peu près tout ce que vous aimez, même des choses qui planteront votre programme. Javascript est typé dynamiquement, mais il est également sûr pour le type: vous ne pouvez pas effectuer d'opérations qui planteront votre programme. C # est principalement protégé par type, mais vous pouvez marquer explicitement les zones de code qui sont
unsafe
et faire des choses qui ne sont plus sécurisées par type.Google Go est également protégé par type dans le sens où vous ne pouvez pas jouer avec les types et bloquer le programme (pas d'accès direct aux pointeurs).
la source
Il est tapé en toute sécurité dans la mesure où un type ne sera jamais mal interprété, mais un type incorrect peut provoquer la panique du programme.
la source
Le type de carte de Go n'est pas thread-safe, il est typé statiquement. Il n'a pas d'héritage de type, de programmation générique, d'assertions, de surcharge de méthode ou d'arithmétique de pointeur non plus et pour une bonne raison.
La sécurité du type et la sécurité de la mémoire sont des objectifs à long terme, ici, c'est un problème.
La sécurité de type présente un surcoût, en kilo-octets et mégaoctets, ce qui est acceptable. Go est conçu avec MapReduce et "Big data", exobe un pétaoctet de données, ce qui présente des problèmes de performances avec la sécurité des types, la vérification de type (boxing / unboxing) crée des frais généraux et éloigne les cycles du traitement.
La sécurité de type peut être restrictive dans le sous-typage et le polymorphisme et dans le typage canard (cast objet à objet), cela crée des dangers et aussi un espace où les langages comme Go sont très utiles. C ++ et Java ne sont pas remplacés par Go, c'est un nouveau langage pour aider la programmation distribuée et le système massivement parallèle.
La grande déclaration de Bruce Eckel - "Go a beaucoup plus de sens pour la classe de problèmes que C ++ était initialement destiné à résoudre", est discutable. C ++ est un langage très efficace et l'implémentation Boost de MapReduce est très efficace.
Les primitives de concurrence sont l'avenir. La sécurité des caractères a toujours été un sujet très controversé et Go est peut-être la première langue à aborder ce problème depuis 20 ans, ou depuis Algol.
la source