Go-Module sind klasse, aber es gibt ein kleines问题

Go Modules和JFrog CLI

Die meisten Programmiersprachen and Tools unterstützen das Konzept der Pakete und meistens gibt es Versionen diesel Pakete。Das Tolle an Versionen, legob sie von Tools verwendet werden oder nht, ist, dass die Entwickler klar kommunizien können, welche Abhängigkeiten bestehen,嗯Das endproduckt zu erstellen。

Go hat sich seit seinen Anfängen mit der Versionierung ziemlich schwergetan und das führte dazu, dass Entwickler begonnen haben, ihre eigenen Werkzeuge wiegb滑翔zusammenzustellen。安芳2017 wurde vom Go- team mit Dep das offizielle Experiment für die Paketverwaltung in Go gestartet。Die mit Dep und anderen Sprachen gesammelten Erfahrungen führten zum offiziellen Vorschlag fürGo-Module,死在Go 1.11 eingeführt武登。

这也是问题吗?

“你的夜是假的”Einführung derGo-Module,有问题的人lösen。Es bring uns auh weg vom hässlichen Konzept des供应商.看在一起,看在一起Abhängigkeit in seinem Projekt aufbewahren, riskieren, Abhängigkeiten ganz zu verlieren (wir haben ausleft-padgelernt, stimmts?)在维也纳的实验拉森版本?

所有die sind Probleme, die Go Modules löst, und es führt sogar eine Umgebungsvariable namensGOPROXYein, die es Entwicklern ermöglicht, alle module - download - anfragen über einen Proxy zu senden。作为一个这样的人natürlich großartig für Unternehmen, die einen Cache von Versionen berhalten wollen (und nicht jedes Mal die Abhängigkeit herunterladen wollen), die Sicherheit im Auge berhalten wollen (und den Zugriff auf Das Internet von ihren building - server aus bergrenzen wollen) unter vielen anderen Gründen。过敏症问题。GOPROXY ist äußerst unpraktisch。

Das Problem mit GOPROXY

“生态环境”-Übung。Das bedeutet, dass alle Abhängigkeiten in Ihrem gesamten Abhängigkeitsbaum (sowohl direkte als auch transitive) von diesem Proxy-Server aufgelöst werden müssen and under Go-Client fehlschlägt, wenn eine der Abhängigkeiten nicht in dieserGo-Registryvorliegen。

Mit anderen Worten: Wenn jemand eine neue App Mitlabstack /回声v3.3.5和dgrijalva / jwt-goV3.2.0在塞纳走。mod-Datei erstellt und go install mit gesetzter GOPROXY-Variable ausführt, wd der go- client fehlschlagen, wenn nicht beide Module, ihre angeforderten Versionen und alle ihre transitiven Abhängigkeiten auf diesem Proxy verfügbar sind。Wenn ich also nicht absolut sicher bin, dass mein gesamter Abhängigkeitsbaum vom Proxyserver aufgelöst werden kann, der intern oder extern sein kann, wid dieser Ansatz nicht funktionieren。

回退

Wie für jedes Problem muss es auch hier eine Lösung geben, oder?Richtig !它是如此,dass死Lösung失去它的存在。Ein线程imGolang-Repository auf GitHub (von Aaron Schlesinger ausdem雅典- team gestartet) umreißt das Problem und die Lösung, die代理darauf beschränkt, nur einige Module zu liefern。Erinnern wir uns an das vorherige Beispiel: Wenn eines der beiden Module auf dem Proxy verfügbar ist und eines niht, wid der Build erfolgreich sein。Ein模块wvom代理heruntergeladen和das andere wvvon einem版本verwaltungssystem heruntergeladen。

模具选项,einen solchen回退zu haben, würde einen Teil des问题lösen。Einige go - module - proxys, wie雅典,信德拉格,走吧。mod-Dateien ausdienen nht aufgelösten Anfragen zu konstruieren,是wiederum andere problem verursacht。

Vervollständigen der Lösung

Die ideale Lösung würde es dem Benutzer erlauben, seine GOPROXY zu spezifizieren, falles das Modul nht verfügbar ist, und, das ist das Wichtigste, diese Module auf den Proxy hochzuladen。diesel Ansatz bedeutet, dass immer nur ein Entwickler eine Version eines modules herunterlädt und es danach im Proxy-Server für die Verwendung durch andere Entwickler und CI-Server zur Verfügung steht。Da nicht alle Unternehmen zulassen, dass sich ihre CI-Server mit dem Internet verbinden, würde dies das Problem wirklich lösen und Go-Module perfekt für Entwickler machen。你是多么的脆弱,我们是多么的脆弱könnte,你是多么的脆弱,我是多么的脆弱JFrog CLI, die all diese Logik eingebaut hat。我是denke, wir sinind unalle eiing, dass dies eine Funktion ist, die wir von der Sprache selbst erwarten…