Eine andere Versionsnummernverwaltungslösung für Go-Projekte
Also, wie füge ich dem Projekt eine Versionsnummer hinzu? Viele Leute hätten Hardcodierung verwenden sollen, das heißt, die Versionsnummer direkt in den Quellcode oder die Konfigurationsdatei schreiben und die Versionsnummer jedes Mal ändern, wenn die Funktion aktualisiert wird. Diese Methode ist offensichtlich machbar, aber auch fehleranfällig. Erstens vergisst man leicht, die Versionsnummer zu aktualisieren, wenn man eine Version veröffentlicht. Zweitens kann es zu Verwirrung kommen, wenn mehrere Zweigstellencodes zusammengeführt werden.
Im Folgenden finden Sie einen anderen Managementplan.
ldflags – : break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;font-family: „Operator Mono“, Consolas, Monaco, Menlo, monospace;word-break: break - all;background: rgba(14, 210, 247, 0.15);">--ldflags
Flags legen Linker-Parameter fest. Verwenden Sie die folgende Anweisung, um optionale Linker-Parameter anzuzeigen.
go build --ldflags="--help"
<span style="font-size: 15px;">--ldflags</span>
标志设定链接器参数,使用以下语句可查看链接器可选参数。$ go build --ldflags="--help" usage: link [options] main.o ... -X definition add string value definition of the form importpath.name=value ...
参数很多,但我们感兴趣的是 <span style="font-size: 15px;">-X</span>
$ mkdir versionDemo $ cd versionDemo/ $ go mod init versiondemo go: creating new go.mod: module versiondemo $ touch main.go
<span style="font-size: 15px;">-X</span>
Es gibt viele Parameter, aber die, die uns interessieren, sind package main
import (
"fmt"
)
var (
version = "0.0.1"
)
func main() {
fmt.Println("version: ", version)
}
下面,我们通过示例项目来具体感受一下。$ mkdir versionDemo
$ cd versionDemo/
$ go mod init versiondemo
go: creating new go.mod: module versiondemo
$ touch main.go
Nach dem Login kopierenNach dem Login kopieren在 main 函数中,我们打印 version 值。
package main
import (
"fmt"
)
var (
version = "0.0.1"
)
func main() {
fmt.Println("version: ", version)
}
Nach dem Login kopierenNach dem Login kopieren如果正常编译执行程序,将得到以下结果
$ go build -o main && ./main
version: 0.0.1
Nach dem Login kopieren此时,我们指定 --ldflags 的 -X 参数重新编译执行
$ go build -o main --ldflags="-X 'main.version=client-0.0.2'" && ./main
version: client-0.0.2
Nach dem Login kopieren可以看到 version 参数值已经被改变。
添加 git 信息
开发中需要使用 git 工具,本文讨论的版本管理,也经常与 git tag 挂钩。那其实有更酷的操作:我们可以在构建期间,通过 git commit 信息自动填充版本号。
我们基于上文项目目录,添加 git commit 信息。
$ git init
$ git add .
$ git commit -m "initial commit"
Nach dem Login kopieren通过以下命令,可拿到 git commit 的 hash 值
$ git rev-parse HEAD
46dab0ddb6ba20445c2c1f047575e25d3aad1a27
Nach dem Login kopieren该值较长,我们可以添加 --short 选项获取短 hash 值。
$ git rev-parse --short HEAD
46dab0d
Nach dem Login kopieren此时,通过指定 --ldflags 的 -X 参数,将 version 值替换成 git commit 的哈希值。这样,我们成功地将项目版本与 git 信息绑定在了一起。
$ go build -o main --ldflags="-X 'main.version=$(git rev-parse --short HEAD)'" && ./main
version: 46dab0d
Nach dem Login kopieren
总结
本文介绍了一种如何通过 ldflags -X 变量传递的方式。使用这种方式我们可以在构建时轻松设定一些元信息,例如本文示例的程序版本信息。而这种构建的动作不应该手动去执行,而是放入到 CI/CD 流程中,让整个过程变得更加丝滑。
Das obige ist der detaillierte Inhalt vonEine andere Versionsnummernverwaltungslösung für Go-Projekte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In Go umfasst der Funktionslebenszyklus Definition, Laden, Verknüpfen, Initialisieren, Aufrufen und Zurückgeben; der Variablenbereich ist in Funktionsebene und Blockebene unterteilt. Variablen innerhalb einer Funktion sind intern sichtbar, während Variablen innerhalb eines Blocks nur innerhalb des Blocks sichtbar sind .

In Go können Sie reguläre Ausdrücke verwenden, um Zeitstempel abzugleichen: Kompilieren Sie eine Zeichenfolge mit regulären Ausdrücken, z. B. die, die zum Abgleich von ISO8601-Zeitstempeln verwendet wird: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Verwenden Sie die Funktion regexp.MatchString, um zu überprüfen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.

In Go können WebSocket-Nachrichten mit dem Paket gorilla/websocket gesendet werden. Konkrete Schritte: Stellen Sie eine WebSocket-Verbindung her. Senden Sie eine Textnachricht: Rufen Sie WriteMessage(websocket.TextMessage,[]byte("message")) auf. Senden Sie eine binäre Nachricht: Rufen Sie WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}) auf.

Go und die Go-Sprache sind unterschiedliche Einheiten mit unterschiedlichen Eigenschaften. Go (auch bekannt als Golang) ist bekannt für seine Parallelität, schnelle Kompilierungsgeschwindigkeit, Speicherverwaltung und plattformübergreifende Vorteile. Zu den Nachteilen der Go-Sprache gehören ein weniger umfangreiches Ökosystem als andere Sprachen, eine strengere Syntax und das Fehlen dynamischer Typisierung.

Speicherlecks können dazu führen, dass der Speicher des Go-Programms kontinuierlich zunimmt, indem: Ressourcen geschlossen werden, die nicht mehr verwendet werden, wie z. B. Dateien, Netzwerkverbindungen und Datenbankverbindungen. Verwenden Sie schwache Referenzen, um Speicherlecks zu verhindern, und zielen Sie auf Objekte für die Garbage Collection ab, wenn sie nicht mehr stark referenziert sind. Bei Verwendung von Go-Coroutine wird der Speicher des Coroutine-Stapels beim Beenden automatisch freigegeben, um Speicherverluste zu vermeiden.

Go-Funktionsdokumentation mit der IDE anzeigen: Bewegen Sie den Cursor über den Funktionsnamen. Drücken Sie den Hotkey (GoLand: Strg+Q; VSCode: Nach der Installation von GoExtensionPack F1 und wählen Sie „Go:ShowDocumentation“).

In Golang können Sie mit Fehler-Wrappern neue Fehler erstellen, indem Sie Kontextinformationen an den ursprünglichen Fehler anhängen. Dies kann verwendet werden, um die von verschiedenen Bibliotheken oder Komponenten ausgelösten Fehlertypen zu vereinheitlichen und so das Debuggen und die Fehlerbehandlung zu vereinfachen. Die Schritte lauten wie folgt: Verwenden Sie die Funktion „errors.Wrap“, um die ursprünglichen Fehler in neue Fehler umzuwandeln. Der neue Fehler enthält Kontextinformationen zum ursprünglichen Fehler. Verwenden Sie fmt.Printf, um umschlossene Fehler auszugeben und so mehr Kontext und Umsetzbarkeit bereitzustellen. Wenn Sie verschiedene Fehlertypen behandeln, verwenden Sie die Funktion „errors.Wrap“, um die Fehlertypen zu vereinheitlichen.

Das Testen gleichzeitiger Funktionen in Einheiten ist von entscheidender Bedeutung, da dies dazu beiträgt, ihr korrektes Verhalten in einer gleichzeitigen Umgebung sicherzustellen. Beim Testen gleichzeitiger Funktionen müssen grundlegende Prinzipien wie gegenseitiger Ausschluss, Synchronisation und Isolation berücksichtigt werden. Gleichzeitige Funktionen können Unit-Tests unterzogen werden, indem Rennbedingungen simuliert, getestet und Ergebnisse überprüft werden.
