Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich die rekursive Substitution in Golangs go.mod richtig?

Wie verwende ich die rekursive Substitution in Golangs go.mod richtig?

WBOY
WBOYnach vorne
2024-02-08 23:50:36533Durchsuche

如何在 golang 的 go.mod 中正确使用递归替换?

Bei der Verwendung von Golangs go.mod ist die korrekte Verwendung der rekursiven Substitution ein wichtiges Thema. Der PHP-Editor Yuzai bietet Ihnen einige Lösungen. Unter rekursiver Ersetzung versteht man die Methode, ein Modul zum Debuggen und Ändern während der Entwicklung durch ein lokales Verzeichnis in der Datei go.mod zu ersetzen. Wenn das ausgetauschte Modul jedoch von anderen Modulen abhängig ist, kann es zu Problemen kommen. Durch die korrekte Verwendung der rekursiven Substitution können Sie diese Probleme vermeiden und dafür sorgen, dass die Abhängigkeiten Ihres Projekts ordnungsgemäß funktionieren. In diesem Artikel besprechen wir die korrekte Verwendung der rekursiven Substitution in go.mod und geben einige praktische Tipps und Überlegungen.

Frageninhalt

Ich möchte eine Projektstruktur wie diese:

src/github.com/myname/myproject/
- tl:
    - constructor
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/constructor

            require github.com/myname/myproject v0.0.0
            require github.com/myname/myproject/tl/types v0.0.0
            require github.com/myname/myproject/tl/types/account v0.0.0
            require github.com/myname/myproject/tl/types/auth v0.0.0
            require github.com/myname/myproject/tl/types/bots v0.0.0

            replace github.com/myname/myproject v0.0.0 => ./../..
            replace github.com/myname/myproject/tl/types v0.0.0 => ./../types
            replace github.com/myname/myproject/tl/types/account v0.0.0 => ./../types/account
            replace github.com/myname/myproject/tl/types/auth v0.0.0 => ./../types/auth
            replace github.com/myname/myproject/tl/types/channels v0.0.0 => ./../types/channels
    - crcs
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/crcs

    - functions
        - account
            - someghing.go
            - go.mod:
                module github.com/myname/myproject/tl/functions/account

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
        - auth
            - someghing.go
            - go.mod:
                module github.com/myname/myproject/tl/functions/auth

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
        - bots
            - someghing.go
            - go.mod:
                module github.com/myname/myproject/tl/functions/bots

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/functions

            require github.com/myname/myproject/tl/crcs v0.0.0
            require github.com/myname/myproject v0.0.0
            require github.com/myname/myproject/tl/types v0.0.0

            replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs
            replace github.com/myname/myproject v0.0.0 => ./../..
            replace github.com/myname/myproject/tl/types v0.0.0 => ./../types
    - types
        - account
            - something.go
            - go.mod:
                module github.com/myname/myproject/tl/types/account

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./..

        - auth
            - something.go
            - go.mod:
                module github.com/myname/myproject/tl/types/auth

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./..
        - channels
            - something.go
            - go.mod:
                module github.com/myname/myproject/tl/types/channels

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./..
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/types

            require github.com/myname/myproject/tl/crcs v0.0.0
            require github.com/myname/myproject v0.0.0

            replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs
            replace github.com/myname/myproject v0.0.0 => ./../..
- something.go
- go.mod:
    module github.com/myname/myproject

    [some external dependencies]
    require github.com/myname/myproject/tl/types v0.0.0
    replace github.com/myname/myproject/l/types v0.0.0 => ./tl/types

Das funktioniert nicht. Ich verwende die Idee von Jetbrains und sie führt eine Go-Liste für alle (Unter-)Module aus und meldet mir den folgenden Fehler:

go: github.com/myname/myproject/tl/[email protected] requires
    github.com/myname/myproject/tl/[email protected]: reading github.com/myname/myproject/tl/crcs/go.mod at revision tl/crcs/v0.0.0: unknown revision tl/crcs/v0.0.0

Ich verstehe nicht, warum das passiert. Es sieht so aus, als würde versucht, das Modul aus dem Repository abzurufen, obwohl alles lokal ersetzt wurde. Ich bin offen für andere Vorschläge als die Änderung der Projektstruktur. Ich muss in Zukunft in der Lage sein, Dinge wie account.sometype zu verwenden, daher wird es mühsam sein, alles in eine Datei zu packen.

Kontext: Ich erstelle eine mtproto-Bibliothek für Telegram, die über einen TL-Modus verfügt, in dem sich jede „Anfrage“/„Klasse“ in einem eigenen Namensraum befindet (z. B. „Konto“, „Kanal“) (oder im globalen Namensraum, zum Beispiel bin ich functionstypes). entsprechend) (da es mehr als 1900 dieser Funktionen/Klassen gibt, jede mit ihrem eigenen Konstruktor und ihren eigenen Parametern, sodass es schwierig sein wird, alles in einem Modul zusammenzufassen)

Die Dateien im TL-Ordner sind Go-Codes, die automatisch im TL-Modus generiert werden.

Workaround

Vielen Dank an Dean für den Hinweis, dass Sie mehrere Pakete in ein Modul einbinden können (wie?). Es hat mein Problem gelöst und gleichzeitig die gleiche Struktur beibehalten.

Das obige ist der detaillierte Inhalt vonWie verwende ich die rekursive Substitution in Golangs go.mod richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen