簡介
最近我已經成為 CLI 應用程式的忠實粉絲。也許這是我童年時期終端的誘惑(從 486/33 上的 DOS 和我父親的舊 Apple IIe 開始)。對於 X 代 Commodore64 時代,我出生得有點晚,但正好趕上了了解 Windows 95 之外的更多內容。那是一個有趣的時代,當時撥號和 56k 數據機還是王者。我知道現在大多數部落格文章都有一些介紹性的內容,以增加 SEO 的字數,但這確實是為什麼我仍然喜歡 CLI,因為現在很多年輕人只知道 GUI 應用程式。沒有什麼比看到 Z 世代的孩子打開終端機更讓我高興的了,即使是為了簡單的任務。夥計,等阿爾法一代知道什麼是 BBS 吧。他們可能會說「電腦爺爺」? 「離開我的草坪」✊✊
像 CoolRetroTerm 這樣的專案在我心中肯定有一個溫暖的地方,因為它帶回了對 CLI 的熱愛。我仍然更喜歡在我的舊上網本上用 Micro 寫一些博客,真的讓你專注於寫作。我猜 VSCode ZenMode 和 MarkText 很接近?
flowchart LR Build_App --> GH_Actions --> ??? --> Profit!!!
包裝
無論如何,我離題了......
所以在編寫我的小 CLI 應用程式 Stampy 後,我遇到了一個小問題,如何分發它?我至少足夠聰明,能夠思考並用 GoLang 編寫它(就像我想用 Python 構建它一樣)以避免 Python 包裝的可怕憤怒。一直困擾我的一件事是,人們如何將他們漂亮的 CLI 應用程式發佈到 APT 和 YUM 等精美的套件管理系統。
通常要建立您的應用程序,您只需執行簡單的 go build 即可。和繁榮,即時二進制。儘管這對於本地開發來說非常有用,但對於跨平台編譯卻沒有太多好處。有一些很好的指南可以向您展示如何做到這一點,但是... tl;dr 我的??。所以我做了更多的挖掘,必須有一個不錯的工具......當然,有 GoReleaser!
閱讀了一些寫得很好的文檔後,我能夠快速進行本地跨平台構建,非常簡單。
goreleaser --snapshot --clean
使用 GitHub 版本進行建置也很容易,因為它們有很好的預先編寫的 GH 操作!
用戶現在只需使用 eget(好)和 Steute(更好)等工具安裝我的應用程式!
雖然您也可以安裝 github.com/xxx,但所有要做的就是克隆存儲庫,在本地構建它,然後將 bin 放入您的 $GOBIN 資料夾中。與正確的套件管理工具並不完全相同,但對於已經安裝了 Go 的人來說確實可以工作。恕我直言,對於普通用戶來說這並不是一個真正的選擇。 ?
不僅如此,GoReleaser 還提供包裝!現在您可以輕鬆製作 DEB 和 RPM。我離害怕的 apt-get install stampy 又更近了一步。唯一缺少的是如何建立 APT 儲存庫。這最後一個關鍵部分肯定並不容易。我花了一個小時左右的時間研究如何使用GitHub Pages 自行託管它,雖然這是可行的,但使用像Packagecloud 這樣的免費服務來處理簽名和存儲庫託管要容易得多,而且成本低廉,每次0美元月? .
您可以在此處查看整個工作流程的範例
我還將在程式碼區塊中包含它的精簡版本,供任何偶然發現部落格文章本身的人使用。
為了獲得高層次的概述,GHA 執行以下操作:
- 寫出 GoReleaser 配置
- 運行發佈器本身
- 上傳下一個作業的 .debs
- 在鍊式作業中,我們拉取 .deb 並將其上傳到 PackageCloud
- 完成!
GitHub 操作範例
name: Release on: pull_request: push: # run only against tags tags: - "*" permissions: contents: write packages: write issues: write jobs: goreleaser: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v5 with: go-version: stable - name: Release config run: | cat /tmp/goreleaser-github.yaml project_name: EXAMPLE version: 2 builds: - env: [CGO_ENABLED=0] goos: - linux goarch: - amd64 nfpms: - maintainer: YOU <your> bindir: /usr/local/bin description: Copy formatted timestamp to system clipboard homepage: https://github.com/USERNAME/REPO license: MIT formats: - deb release: draft: false # If set to true, will not auto-publish the release. replace_existing_draft: true replace_existing_artifacts: true target_commitish: "{{ .Commit }}" prerelease: auto make_latest: true mode: replace include_meta: true EOF - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser # 'latest', 'nightly', or a semver version: "~> v2" args: release --clean --verbose --config /tmp/goreleaser-github.yaml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload .deb artifact x86 uses: actions/upload-artifact@v3 with: name: deb-package path: dist/*amd64.deb pkgcld_amd64-deb: runs-on: ubuntu-latest needs: - goreleaser strategy: max-parallel: 3 matrix: distro: - debian/bookworm - ubuntu/noble - ubuntu/jammy steps: - name: Download .deb artifact uses: actions/download-artifact@v3 with: name: deb-package - name: Push package to packagecloud.io uses: computology/packagecloud-github-action@v0.6 with: package-name: ./*.deb packagecloud-username: USERNAME packagecloud-reponame: APP_NAME packagecloud-distro: ${{ matrix.distro }} packagecloud-token: ${{ secrets.PACKAGECLOUD_TOKEN }} </your>
ℹ️重要
您需要確保程式結構和 go.mod 檔案等內容正確設置,否則您將在正確發布應用程式時遇到問題。
附註:您還可以使用Homebrew 分發您的應用程序,但我沒有打擾,因為涉及PAT 秘密的額外GH 操作複雜性以及我已經很好地覆蓋了Apt, 好吃,還有燉菜…好吃! ?
這讓我想到了發布應用程式時的第二件事。 ?文件? 以及備受忽視的 Readme.md? !
自述文件格式
我認為任何像樣的自述文件都應該具有一些元素,因為它們將幫助您的應用程式從所有幾乎沒有文檔,或者更糟的是,糟糕的文檔的應用程式中脫穎而出。
我強烈建議您遵循這種格式來製作自己的自述文件!我是天賦徽章的忠實粉絲,但我覺得有一個 GIF 演示確實可以向人們展示它的含義,就像列出 GUI 應用程序的 屏幕截圖 一樣。使用 ASCIINEMA 非常簡單,而且他們還有一個很好的 GIF 轉換器,讓一切看起來都恰到好處。
?提示
順便說一句,我確實讓 CodeGPT 給我寫了一些 GoLang 單元測試,我知道寫這些測試通常很痛苦。如果您使用 JetBrains 套件,這是一個很棒的插件。
自述文件範例
- 測試徽章
- GIF 示範
- 覆蓋徽章
- 去報告卡
- 安裝
- 套件管理器(ex apt)
- 二進位安裝(例如 eget)
- 去安裝片段
- 用法
- 清晰的說明和範例程式碼片段
- 設定
- 儲存設定的位置
- 你使用 INI 檔、JSON、環境變數嗎?
- 如何存取內建幫助
- 如何從原始碼建立應用程式
- 現有藝術(又稱以前的作品/靈感)
包起來
與我開始學習如何發布 Python 應用程式時類似,我很高興能夠說我覺得我可以正確分發我在 GoLang 中編寫的任何應用程式。這是我學到的一項巧妙的技能,透過這篇博文,我希望它可以幫助其他人做同樣的事情!乾杯!
-果凍
?乳齒象 | ?電子郵件 | ?評論 | ☕ 買杯咖啡給我
以上是發布 CLI 應用程式(使用 Apt 和 YUM)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

掌握Go語言中的strings包可以提高文本處理能力和開發效率。 1)使用Contains函數檢查子字符串,2)用Index函數查找子字符串位置,3)Join函數高效拼接字符串切片,4)Replace函數替換子字符串。注意避免常見錯誤,如未檢查空字符串和大字符串操作性能問題。

你應該關心Go語言中的strings包,因為它能簡化字符串操作,使代碼更清晰高效。 1)使用strings.Join高效拼接字符串;2)用strings.Fields按空白符分割字符串;3)通過strings.Index和strings.LastIndex查找子串位置;4)用strings.ReplaceAll進行字符串替換;5)利用strings.Builder進行高效字符串拼接;6)始終驗證輸入以避免意外結果。

thestringspackageingoisesential forefficientstringManipulation.1)itoffersSimpleyetpoperfulfunctionsFortaskSlikeCheckingSslingSubstringsStringStringsStringsandStringsN.2)ithandhishiCodeDewell,withFunctionsLikestrings.fieldsfieldsfieldsfordsforeflikester.fieldsfordsforwhitespace-fieldsforwhitespace-separatedvalues.3)3)

WhendecidingbetweenGo'sbytespackageandstringspackage,usebytes.Bufferforbinarydataandstrings.Builderforstringoperations.1)Usebytes.Bufferforworkingwithbyteslices,binarydata,appendingdifferentdatatypes,andwritingtoio.Writer.2)Usestrings.Builderforstrin

Go的strings包提供了多種字符串操作功能。 1)使用strings.Contains檢查子字符串。 2)用strings.Split將字符串分割成子字符串切片。 3)通過strings.Join合併字符串。 4)用strings.TrimSpace或strings.Trim去除字符串首尾的空白或指定字符。 5)用strings.ReplaceAll替換所有指定子字符串。 6)使用strings.HasPrefix或strings.HasSuffix檢查字符串的前綴或後綴。

使用Go語言的strings包可以提升代碼質量。 1)使用strings.Join()優雅地連接字符串數組,避免性能開銷。 2)結合strings.Split()和strings.Contains()處理文本,注意大小寫敏感問題。 3)避免濫用strings.Replace(),考慮使用正則表達式進行大量替換。 4)使用strings.Builder提高頻繁拼接字符串的性能。

Go的bytes包提供了多種實用的函數來處理字節切片。 1.bytes.Contains用於檢查字節切片是否包含特定序列。 2.bytes.Split用於將字節切片分割成smallerpieces。 3.bytes.Join用於將多個字節切片連接成一個。 4.bytes.TrimSpace用於去除字節切片的前後空白。 5.bytes.Equal用於比較兩個字節切片是否相等。 6.bytes.Index用於查找子切片在largerslice中的起始索引。

theEncoding/binarypackageingoisesenebecapeitProvidesAstandArdArdArdArdArdArdArdArdAndWriteBinaryData,確保Cross-cross-platformCompatibilitiational and handhandlingdifferentendenness.itoffersfunctionslikeread,寫下,寫,dearte,readuvarint,andwriteuvarint,andWriteuvarIntforPreciseControloverBinary


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器