Maison >développement back-end >Golang >Pourquoi le compilateur ne prévient-il pas des mauvais formateurs ?

Pourquoi le compilateur ne prévient-il pas des mauvais formateurs ?

王林
王林avant
2024-02-09 09:48:33615parcourir

Pourquoi le compilateur ne prévient-il pas des mauvais formateurs ?

Pourquoi le compilateur ne prévient-il pas des mauvais formateurs ? En programmation, un formateur est un outil utilisé pour embellir le code. Il peut ajuster automatiquement l'indentation, les espaces, les sauts de ligne, etc. du code pour rendre le code plus lisible. Cependant, nous pouvons parfois commettre des erreurs de formatage, telles que des crochets manquants, des points-virgules supplémentaires, etc. Bien que ces erreurs puissent conduire à des erreurs logiques dans le code, le compilateur ne prévient souvent pas de ces erreurs. Alors pourquoi le compilateur ne prévient-il pas de ces mauvais formateurs ? Tout d'abord, la tâche principale du compilateur est de convertir le code source en code machine exécutable. Il vérifiera les erreurs de syntaxe pour garantir l'exactitude du code. Cependant, les erreurs du formateur ont tendance à être des erreurs sémantiques plutôt que syntaxiques. En d’autres termes, ces erreurs n’affectent pas l’exécutabilité du code, elles rendent simplement le code moins lisible. Le compilateur n’a donc aucune obligation d’avertir de ces erreurs. Deuxièmement, les erreurs du formateur sont souvent subjectives et les différents développeurs ont des styles et des préférences de codage différents. Par exemple, certaines personnes aiment utiliser des accolades dans leur code, tandis que d'autres ne le font pas. Le compilateur ne peut pas déterminer quel style est correct et ne peut donc pas avertir des erreurs du formateur. Enfin, prévenez que les erreurs du formateur peuvent générer un grand nombre de faux positifs. Dans les grands projets, la taille du code est souvent très importante et une petite erreur de formatage peut provoquer des milliers d'avertissements. Cela causera non seulement des problèmes aux développeurs, mais augmentera également la difficulté de maintenance du code. Pour éviter ce

contenu de la question

Je m'attendais à ce que le code suivant émette au moins un avertissement lors de la compilation car le formateur est incohérent avec le type de la variable :

package main

import "fmt"

func main() {
    s := "hello"
    fmt.printf("1 %w", s)
    fmt.printf("2 %s", s)
}

Le type de la variable est connu au moment de la compilation et le formateur de chaîne l'analyse de manière déterministe - y a-t-il une raison pour laquelle l'erreur n'est pas générée à ce stade ?

Ce que j'ai obtenu, c'est le code de sortie

1 %!w(string=hello)2 hello

Cela semble être une sorte de message indiquant que %w est incorrect pour le type string (mais uniquement au moment de l'exécution) %w 对于 string 类型是错误的(但仅在运行时)

解决方法

fmt.printf

Solution de contournement

fmt.printf code> Les paramètres de chaîne de format sont interprétés au moment de l’exécution, pas au moment de la compilation. <p> <pre class="brush:php;toolbar:false;">func printf(format string, a ...any) (n int, err error)</pre> <code>go vetprintf formate selon un spécificateur de format et écrit sur la sortie standard. Il renvoie le nombre d'octets écrits et les erreurs d'écriture rencontrées.

Utilisez un linter d'analyse statique tel que .

commande go - cmd/go - package go

Signaler d'éventuels bugs dans le package

Utilisation :

go vet [-n] [-x] [-vettool prog] [build flags] [vet flags] [packages]

vet Exécute la commande go vet sur le package nommé par le chemin d'importation.

Pour plus d'informations sur vet et ses drapeaux, voir "go doc cmd/vet".

so.go :

package main

import "fmt"

func main() {
    s := "hello"
    fmt.printf("1 %w\n", s)
    fmt.printf("2 %s\n", s)
}

Vérification Linter :🎜
$ go vet so.go
./so.go:7:2: fmt.printf format %w has arg s of wrong type string, 
             see also https://pkg.go.dev/fmt#hdr-printing
$
🎜Durée d'exécution : 🎜
$ go run so.go
1 %!w(string=hello)
2 hello
$

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer