소개
저는 최근 CLI 앱의 팬이 되었습니다. 어쩌면 그것은 내 어린 시절의 터미널(486/33의 DOS와 아버지의 오래된 Apple IIe로 시작)의 매력일 수도 있습니다. 나는 Gen X Commodore64 시대에 비해 너무 늦게 태어났지만 Windows 95보다 더 많은 것을 알게 된 시기였습니다. 다이얼 업과 56k 모뎀이 왕이었던 시절은 흥미로운 시대였습니다. 요즘 대부분의 블로그 게시물에는 SEO에 대한 단어 수를 추가하기 위한 소개가 포함되어 있다는 것을 알고 있지만, 요즘 많은 젊은 사람들이 GUI 앱만 알고 있는데 이것이 제가 여전히 CLI를 좋아하는 이유이기도 합니다. Z세대 아이들이 간단한 작업에도 터미널을 작동시키는 것을 보는 것보다 더 행복한 것은 없습니다. 이봐, Gen Alpha가 BBS가 무엇인지 알 때까지 기다리세요. “할아버지 컴퓨터” 그들은 아마도 ?라고 말할 것입니다. “GET OFF MY LAWN” ✊✊
CoolRetroTerm과 같은 프로젝트는 CLI에 대한 사랑을 다시 불러일으킬 수 있다는 점에서 제 마음속에 따뜻한 자리를 차지하고 있습니다. 나는 여전히 내 오래된 넷북에서 Micro로 블로그 활동을 하는 것을 선호합니다. 글쓰기에만 집중하겠습니다. VSCode ZenMode와 MarkText가 가까워진 것 같은데요?
flowchart LR Build_App --> GH_Actions --> ??? --> Profit!!!
포장
어쨌든 빗나가네요…
그래서 작은 CLI 앱인 Stampy를 작성한 후 작은 문제에 부딪혔습니다. 어떻게 배포해야 할까요? 나는 적어도 Python 패키징의 무서운 분노를 피하기 위해 머리가 GoLang에서 작성한다고 생각할 만큼 똑똑했습니다(Python으로 빌드하고 싶었던 만큼). 저를 항상 당황하게 했던 것 중 하나는 사람들이 멋진 CLI 앱을 APT 및 YUM과 같은 멋진 패키지 관리 시스템에 게시하는 방법이었습니다.
일반적으로 앱을 빌드하려면 간단한 go build를 수행하면 됩니다. 그리고 붐, 인스턴트 바이너리. 로컬 개발에는 좋지만 크로스 플랫폼 컴파일에는 별로 좋지 않습니다. 이를 수행하는 방법을 보여주는 몇 가지 좋은 가이드가 있지만… 그래서 좀 더 조사해 보니 좋은 도구가 있어야 하더군요… 그런데 당연히 GoReleaser가 있습니다!
잘 작성된 문서를 읽은 후 쉽고 빠르게 로컬 크로스 플랫폼 빌드를 수행할 수 있었습니다.
goreleaser --snapshot --clean
GitHub 릴리스에는 미리 작성된 멋진 GH Action이 있으므로 빌드를 수행하는 것도 쉬웠습니다!
이제 사용자는 eget(좋음) 및 스튜(훨씬 더 좋음)와 같은 도구를 사용하여 내 앱을 설치할 수 있습니다!
github.com/xxx를 설치할 수도 있지만 여기서 수행할 작업은 저장소를 복제하고 로컬로 빌드한 다음 $GOBIN 폴더에 저장소를 넣는 것뿐입니다. 적절한 패키지 관리 도구와 실제로 동일하지는 않지만 이미 Go를 설치한 사람들에게는 긴급하게 작동합니다. 일반 사용자 IMHO에게는 실제로 옵션이 아닙니다. ?
그뿐만 아니라 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 Actions 복잡성과 Apt로 꽤 잘 다루어지고 있기 때문에 신경쓰지 않았습니다. 냠냠, 그리고 찌개…맛있어요! ?
이것은 앱을 출시할 때 두 번째로 중요한 점입니다. ?문서? 그리고 많이 무시되는 Readme.md?!
읽어보기 형식 지정
괜찮은 Readme라면 갖춰야 할 몇 가지 요소가 있습니다. 문서가 거의 또는 전혀 없거나 심지어 잘못된 문서가 있어도 앱이 모든 앱 중에서 돋보일 수 있도록 도와주기 때문입니다.
자신만의 Readme를 작성하려면 이 형식을 따르는 것이 좋습니다! 저는 멋진 배지를 좋아하지만 GUI 앱의 스크린샷을 나열하는 것처럼 작은 GIF 데모를 통해 사람들에게 그 내용을 실제로 보여줄 수 있다고 생각합니다. ASCIINEMA를 사용하는 것은 충분히 쉬웠으며 모든 것을 올바르게 표시할 수 있는 멋진 GIF 변환기도 있습니다.
? 팁
부담으로 CodeGPT에서 GoLang 단위 테스트를 작성해 달라고 요청했는데, 일반적으로 작성하기 힘든 작업이었습니다. JetBrains 제품군을 사용한다면 환상적인 플러그인입니다.
읽어보기 예
- 테스트 배지
- GIF 데모
- 취재 뱃지
- 성적표 바로가기
- 설치
- 패키지 관리자(예: 적절)
- 바이너리 설치(예: eget)
- 스닙 설치하러 가기
- 사용법
- 명확한 지침 및 예제 코드 캡처
- 설정
- 설정이 저장되는 위치
- INI 파일, JSON, Env Vars를 사용하시나요?
- 내장 도움말에 액세스하는 방법
- 소스에서 앱을 빌드하는 방법
- 선행미술(일명 전작/영감)
마무리
Python 앱 게시 방법을 배우기 시작했을 때와 마찬가지로 앞으로 GoLang에서 작성하는 모든 앱을 제대로 배포할 수 있을 것 같다고 말할 수 있어서 기쁩니다. 이는 제가 익힌 훌륭한 기술이며, 이 블로그 게시물을 통해 다른 사람들도 같은 작업을 수행하는 데 도움이 되기를 바랍니다! 건배!
-젤로이터
? 마스토돈 | ? 이메일 | ? 댓글 | 😄 커피 한잔 사주세요
위 내용은 CLI 앱 게시(Apt 및 YUM 사용)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GO 언어로 문자열 패키지를 마스터하면 텍스트 처리 기능과 개발 효율성이 향상 될 수 있습니다. 1) 함유 기능을 사용하여 하위 문자열을 확인하십시오. 2) 인덱스 기능을 사용하여 하위 문자열 위치를 찾으십시오. 빈 문자열을 확인하지 않고 큰 문자열 작동 성능 문제와 같은 일반적인 오류를 피하기 위해주의하십시오.

문자열 조작을 단순화하고 코드를보다 명확하고 효율적으로 만들 수 있기 때문에 이동중인 문자열 패키지에주의해야합니다. 1) strings.join을 사용하여 줄을 효율적으로 스플 라이스; 2) strings.fields를 사용하여 빈 문자로 문자열을 나눕니다. 3) 문자열을 통해 기판 위치를 찾으십시오. 4) 문자열을 대체하려면 strings.replaceall을 사용하십시오. 5) 현악기를 효율적으로 스플 라이스로 사용하여 strings.builder를 사용하십시오. 6) 예상치 못한 결과를 피하기 위해 항상 입력을 확인하십시오.

thestringspackageoisessentialponderfficientstringmanipulation.1) itofferssimpleyetpowerfultionsfortaskslikecheckingsubstringsandjoiningstrings.2) ithandlesunicodewell, withFunctionsLikestrings.fieldsforwhitespace-separatedValues.3) forperformance, st

whendecidingbetweengo'sbytespackageandstringspackage, usebytes.bufferforbinarydataandstrings.builderfortringoperations.1) audeBytes.bufferforworkingwhithbyteslices, binarydata, 첨부 DifferentDatatypes, andwritingtoio.2) useastrons

GO의 문자열 패키지는 다양한 문자열 조작 기능을 제공합니다. 1) 문자열을 사용하여 기판을 확인하십시오. 2) strings.split을 사용하여 문자열을 서브 스트링 슬라이스로 분할하십시오. 3) 문자열을 통해 문자열을 병합합니다. 4) 문자열의 시작과 끝에서 strings.trimspace 또는 strings.trim을 사용하여 공백 또는 지정된 문자를 제거하십시오. 5) 지정된 모든 하위 문구를 문자열로 교체하십시오. 6) strings.hasprefix 또는 strings.hassuffix를 사용하여 문자열의 접두사 또는 접미사를 확인하십시오.

Go Language Strings 패키지를 사용하면 코드 품질이 향상 될 수 있습니다. 1) strings.join ()을 사용하여 성능 오버 헤드를 피하기 위해 문자열 배열을 우아하게 연결하십시오. 2) strings.split () 및 strings.contains ()를 결합하여 텍스트를 처리하고 사례 민감도 문제에주의를 기울입니다. 3) 문자열의 남용을 피하고 ()을 replace ()하고 많은 수의 대체에 정규 표현식을 사용하는 것을 고려하십시오. 4) strings.builder를 사용하여 자주 스 플라이 싱 스트링의 성능을 향상시킵니다.

GO의 바이트 패키지는 바이트 슬라이싱을 처리하기위한 다양한 실용적인 기능을 제공합니다. 1. BYTES는 바이트 슬라이스에 특정 시퀀스가 포함되어 있는지 확인하는 데 사용됩니다. 2.Bytes.split은 바이트 슬라이스를 작은 피스로 분할하는 데 사용됩니다. 3.Bytes.join은 여러 바이트 슬라이스를 하나로 연결하는 데 사용됩니다. 4.bytes.trimspace는 바이트 슬라이스의 전면 및 후면 블랭크를 제거하는 데 사용됩니다. 5.Bytes.equal은 두 바이트 슬라이스가 동일인지 비교하는 데 사용됩니다. 6.bytes.index는 LargersLices에서 하위 슬라이스의 시작 지수를 찾는 데 사용됩니다.

Theencoding/BinaryPackageInsentialBecauseItProvideAstandAdizedWayStandwriteBinaryData, Cross-PlatformCompatibility 및 HandshandlingDifferentendianness.ItoffersFunctionsLikeRead, Write, andwriteUvarIntForPrecisControloverbinary


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기