[GO] Benennen Sie Regeln, die andere Sprachprogrammierer zumindest beachten sollten

Überblick

Wie der Titel schon sagt, haben wir die Namensregeln zusammengefasst, die Anfängern aus anderen Sprachen zumindest wichtig sein sollten.

Zielgruppe

Es ist für diejenigen gedacht, die die grundlegende Syntax von Go verstehen.

Was in diesem Artikel zu erklären ist, was nicht zu erklären

Erklären

Erläutert Regeln und Konventionen für die Benennung von Go-Dateinamen, Variablennamen usw.

Erkläre es nicht

Es gibt verschiedene Möglichkeiten, Go zu schreiben, die Sie außer der Benennung kennen sollten.

Sie werden in diesem Artikel jedoch nicht behandelt.

Hintergrund des Schriftstellers

Er ist seit fast acht Jahren Programmierer und verfügt neben Go auch über Erfahrung in den folgenden Sprachen.

Ich habe Go vor einiger Zeit geschrieben, und ich habe es eine Weile nicht geschrieben, aber kürzlich habe ich es wieder geschrieben.

Insgesamt hat Go ungefähr anderthalb Jahre Erfahrung.

Benennungsregeln zu beachten

Paketnamen

Zeichenketten, die verwendet werden können

Effective Go empfiehlt einen präzisen und klaren Namen.

Es ist wünschenswert, nur Kleinbuchstaben zu verwenden und aus einem Wort (einzelne Form) zu bestehen.

--Gutes Beispiel

Es gibt jedoch eine Ausnahme.

Es ist ein Muster mit dem Suffix "_test".

Go erlaubt nicht mehrere Paketnamen unter demselben Verzeichnis, aber Sie können dies mit _test tun.

Da es sich um ein anderes Paket handelt, können Sie nicht auf private Methoden usw. verweisen.

Es gibt jedoch Vorteile wie die Vermeidung des Problems der Zirkelreferenz durch Verwendung dieser.

Dies ist eine Technik, die auch in Standardpaketen verwendet wird.

//(Beispiel) Heap-Pakettest, also Heap_Werde ein Test
package heap_test

Zu vermeidende Worte

Es ist auch sicher, die folgenden Namen nicht zu verwenden.

Diese Namen sind "prägnante Namen", aber keine "expliziten Namen".

Wenn Sie sich fragen, wie Sie es benennen sollen, sollten Sie sich auf den Standardpaketnamen von Go beziehen.

Dateiname

Ich konnte die Beschreibung "Was soll ich mit dem Dateinamen tun?" In den offiziellen Informationen von Go nicht finden (bitte lassen Sie es mich in den Kommentaren wissen, wenn es welche gibt).

Die Benennung von Schlangenfällen wird in bekannten OSS- und Standardpaketen wie kubernetes und terraform verwendet. Es scheint also sicher zu sein, ihm zu folgen.

(Beispiel)

Verzeichnisname

Wie beim Dateinamen konnte ich keine Beschreibung finden, was mit den offiziellen Informationen von Go zu tun ist (bitte lassen Sie mich in den Kommentaren wissen, falls es eine gibt).

Geben Sie ihm am besten einen Ein-Wort-Namen, der so präzise und klar ist wie der Paketname.

Es scheint also richtig, nur Kleinbuchstaben zu verwenden.

Kebab-Fälle (verwenden Sie -, um Wörter zu trennen" in berühmten OSS wie kubernetes und terraform Ich habe ein Muster gefunden, das verwendet).

Wenn Sie wirklich einen Wortumbruch wünschen, können Sie einen Kebab-Fall verwenden.

(Beispiel)

Ich verwende keinen Kebab-Fall, aber versuche, alle Kleinbuchstaben zu verwenden.

Übrigens spielt es keine Rolle, ob der Paketname und der Verzeichnisname unterschiedlich sind, aber es ist sicherer, sie abzugleichen.

Funktion, Typ, Struktur

Nennen Sie es mit einem Kamelkoffer.

Bei Funktionen und Strukturen, die nach außen ausgesetzt sind, gibt es eine Sprachspezifikation, bei der der Anfang groß geschrieben wird, sodass der obere Kamelfall (beginnend mit dem ersten Großbuchstaben) oder der untere Kamelfall (beginnend mit dem ersten Kleinbuchstaben) entsprechend bestimmt werden.

//Beim Veröffentlichen außerhalb des Pakets
func Contents(filename string) (string, error) {}

//Bei Verwendung nur im Paket
func contents(filename string) (string, error) {}

Empfängername

Name so kurz wie möglich mit ein oder zwei englischen Buchstaben.

Wenn der Typ "Client" ist, dann "c", "cl" usw.

Der Empfängername muss identisch sein (es ist NG, wenn je nach Standort "c" oder "cl" verwendet wird).

Es ist auch wichtig, keine Modifikatoren zu verwenden.

Für "httpClient" lautet der Empfängername beispielsweise "c" und für "DBCreator" "c".

Name der Variablen / des Arguments

Wir empfehlen auch kurze Variablennamen.

Für das Argument können Sie ein Zeichen wie den Empfängernamen verwenden.

Idealerweise sollte der Variablenname so kurz wie möglich sein, aber seien Sie vorsichtig mit dem Bereich.

Wenn Sie eine Funktion mit einem großen Bereich und einer kurzen Variablen verwenden, wird die Lesbarkeit erheblich verringert.

Achten Sie auch auf Abkürzungen.

Es ist kein Problem, die unter Programmierern üblichen Abkürzungen zu verwenden, wie unten gezeigt. Wenn Sie sie jedoch zwangsweise abkürzen und die Variablennamen keinen Sinn ergeben, verringert sich die Lesbarkeit.

Meiner Meinung nach ist es sicher, einen Variablennamen zu verwenden, der normalerweise englische Wörter verwendet, wenn Sie keine gute Abkürzung finden können.

Nur weil ein kurzer Variablenname empfohlen wird, bedeutet dies nicht, dass Sie die Namenskonvention vernachlässigen können. Seien Sie also vorsichtig.

Name der Fehlervariablen

Wenn Sie "error" als Variable deklarieren, deklarieren Sie es mit dem Präfix "Err".

Es wird nicht ausdrücklich angegeben, aber auf Go's offiziellem Blog Arbeiten mit Fehlern in Go 1.13 Sie können ein Beispiel für die Verwendung von Variablennamen sehen.

Darüber hinaus enthält Effective Go die folgende Beschreibung.

// Error codes returned by failures to parse an expression.
var (
    ErrInternal      = errors.New("regexp: internal error")
    ErrUnmatchedLpar = errors.New("regexp: unmatched '('")
    ErrUnmatchedRpar = errors.New("regexp: unmatched ')'")
    ...
)

Übrigens prüft die Fehlerbehandlung von Go "err", um festzustellen, ob der Fehler "null" ist, um festzustellen, ob Fehler vorliegen.

Daher kommt eine Menge Code wie der folgende heraus.

    data, err := ioutil.ReadFile(src)
    if err != nil {
        return nil, err
    }

Zu diesem Zeitpunkt ist es üblich, es mit dem Variablennamen "err" zu empfangen.

Das Präfix "Err" ist nur eine Regel zum Deklarieren von "error" als Variable, daher wird es nicht wie oben beschrieben zur Fehlerbehandlung verwendet.

Wie im folgenden Artikel erwähnt, können Sie die meisten Fälle mit nur "err" ausführen, wenn Sie den Bereich von "err" in der if-Syntax einschränken oder die Schreibmethode mit ": =" verwenden. Ich werde.

(Referenz) [Erklärung von "Anfänger sollten vorsichtig sein" Zu viele Variationen von err-Variablennamen (in den meisten Fällen ist nur "err" erforderlich)](https://zenn.dev/nobonobo/articles/e0af4e8afc6c38b42ae1# % E3% 82% A8% E3% 83% A9% E3% 83% BC% E3% 83% 8F% E3% 83% B3% E3% 83% 89% E3% 83% AA% E3% 83% B3% E3 % 82% B0% E5% 91% A8% E3% 82% 8A)

Wenn Sie feststellen, dass Sie nicht nur "err" verwenden können, können Sie das Präfix "Err" verwenden.

Übrigens verwenden berühmte OSS wie kubernetes und terraform die Methode mit dem Präfix "Err". Ich habe nicht.

Es scheint keine klare Regel zu geben, was in diesem Bereich zu tun ist, daher scheint es gut, sie für jedes Projekt anzupassen.

Existenzprüfung der Karte usw.

Es scheint üblich, den Variablennamen "ok" zu verwenden, wenn nach einem bestimmten Schlüssel gesucht wird, wie unten gezeigt.

id, ok := users[userID]

Dies ist nirgendwo angegeben, aber dieses Muster wird häufig in Standardpaketen verwendet.

Über die Benennung von Wörtern mit Akronymen und Akronymen

Es ist der unten beschriebene Inhalt.

https://github.com/golang/go/wiki/CodeReviewComments#initialisms

Go-Benennung ist im Grunde ein Kamelfall, aber Wörter, die ursprünglich als Abkürzungen allgegenwärtig sind, verwenden konsistente Groß- und Kleinschreibung.

Verwenden Sie "URL" anstelle von "URL" oder "HTTP" anstelle von "http".

Meiner Meinung nach war es zunächst schwierig, diese Regel zu verstehen.

Zum Beispiel war ich verwirrt, ob Wörter wie "GitHub" und "Twitter" nicht mit "Github" und "Twitter" verwendet werden sollten.

Es gibt einen Teil, der diese Notation mit einem Tool namens golangci-lint überprüft, aber die abgedeckten Wörter lauten wie folgt.

(Anwendbarer Teil, Auszug unten). https://github.com/morix1500/lint/blob/master/lint.go#L743

var commonInitialisms = map[string]bool{
	"ACL":   true,
	"API":   true,
	"ASCII": true,
	"CPU":   true,
	"CSS":   true,
	"DNS":   true,
	"EOF":   true,
	"GUID":  true,
	"HTML":  true,
	"HTTP":  true,
	"HTTPS": true,
	"ID":    true,
	"IP":    true,
	"JSON":  true,
	"LHS":   true,
	"QPS":   true,
	"RAM":   true,
	"RHS":   true,
	"RPC":   true,
	"SLA":   true,
	"SMTP":  true,
	"SQL":   true,
	"SSH":   true,
	"TCP":   true,
	"TLS":   true,
	"TTL":   true,
	"UDP":   true,
	"UI":    true,
	"UID":   true,
	"UUID":  true,
	"URI":   true,
	"URL":   true,
	"UTF8":  true,
	"VM":    true,
	"XML":   true,
	"XMPP":  true,
	"XSRF":  true,
	"XSS":   true,
}

Ich möchte solche Regeln mechanisch mit golangci-lint überprüfen, überprüfe aber Wörter wie "gRPC" und "GraphQL", die in letzter Zeit häufig vorkommen. Es scheint nicht getan zu sein.

Einige Tools, die automatisch Go-Code generieren, generieren möglicherweise Code, der diese Regel ignoriert.

Ich habe diese Regel in golangci-lint deaktiviert und so vereinheitlicht, dass sie im normalen Kamelfall benannt wird.

Referenzierte Informationen

Ich habe beim Schreiben dieses Artikels auf die folgenden Informationen verwiesen.

Offizielle Informationen

Persönlicher Blog etc.

Nachwort

Ich habe die Namenskonvention von Go zusammengefasst.

Sie können einige der hier aufgeführten Regeln unter golangci-lint überprüfen.

Es befindet sich noch im Aufbau, aber in Zukunft werde ich über die Einstellungen von [golangci-lint] schreiben (https://github.com/golangci/golangci-lint).

Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Benennen Sie Regeln, die andere Sprachprogrammierer zumindest beachten sollten
[Golang] Über den Sprachkanal Go