タグ

golangに関するmasutaka26のブックマーク (160)

  • Homebrewで自作ツールを簡単にインストール可能にする | おそらくはそれさえも平凡な日々

    まとめを先に 自分のGitHub上にtapリポジトリをサクッと作る そこにFormulaと呼ばれるファイルをコミットする maltmill というツールを使うと簡単! 用語 Formula 各ツールのインストール手順を記述するファイル maltmill.rb であれば maltmillのインストーラー RubyのDSLで記述 tap Formulaを配置するリソースリポジトリ GitHub上に"homebrew-"プレフィクスで作成する これらは自前で簡単に作ることができます。公式リポジトリに頑張ってpull requestを送ることもできますが、個人的なものであれば気軽に自前で作ってしまうことがおすすめです。 tapリポジトリの作成 前項で書いたとおり"homebrew-"プレフィクスを付けて命名すればOKです。僕の場合homebrew-tapという名前で作っています。 https://

    Homebrewで自作ツールを簡単にインストール可能にする | おそらくはそれさえも平凡な日々
    masutaka26
    masutaka26 2023/11/14
    使わせてもらうことにしました
  • 【2021年版】GitHub × Go製ツールのリリースフロー

    はじめに GoでCLIをよく作る身として、 どのように素晴らしいリリースフローを構築するか に心を砕いています。 2019年末にリリースされたGitHub Actionsがすっかり成熟し、GitHub Container Repository(β)もお目見えとなった2020年も暮れを迎えたところで、新たなリリースフロー構築を検討し、一定の結論を得ましたので、少しでもGophersのたすけになることを願って、記事として公開します。 背景 実現したい「リリース」 クロスコンパイルしたバイナリでの配布 Goでツールを作ることで、クロスコンパイルの手軽さによって、様々な環境で、ダウンロードすればすぐに実行できるバイナリでの配布が可能です。 $ curl -O bin.tar.gz https://github.com/kyoh86/gogh/releases/download/v1.7.1/gog

    【2021年版】GitHub × Go製ツールのリリースフロー
    masutaka26
    masutaka26 2023/11/14
    GoReleaser を使わせてもらうことにしました
  • リリース用のpull requestを自動作成し、マージされたら自動でタグを打つtagpr | おそらくはそれさえも平凡な日々

    常々GitHubにtag requestが欲しいと言ってきましたが、それを実現するツールを作りました。OSSなど、バージョニングとリリースが伴うソフトウェア開発のリリースエンジニアリングをとにかく楽にしたいという動機です。既に自分が管理している幾つかのOSSでは導入して便利に利用しています。 https://github.com/Songmu/tagpr アイデア 基の発想は以下のようにシンプルです。 リリース用のpull requestがGitHub Actionsで自動で作られる バージョン番号が書かれたファイルやCHANGELOG.mdを自動更新 そのpull requestをマージするとマージコミットに自動でバージョンtagが打たれる semver前提 リリース用のpull requestを自動で作りマージボタンを以てリリースと為す、というのは、みんな(僕が)大好き git-pr

    リリース用のpull requestを自動作成し、マージされたら自動でタグを打つtagpr | おそらくはそれさえも平凡な日々
    masutaka26
    masutaka26 2023/11/14
    使わせてもらうことにしました
  • Go関連の比較的新しいTips - Plan 9とGo言語のブログ

    READMEにpkg.go.devのバッジを貼る godoc.orgはpkg.go.devに移行していくことが告知されているので、新しいプロジェクトではREADME.mdに貼っているバッジを移行しましょう。pkg.go.devのURLやバッジは // バッジ https://pkg.go.dev/badge/<package path> // リンク https://pkg.go.dev/<package path> の形を取ります。例えばgithub.com/lufia/backoffの場合は以下のように書きます。 # Backoff ...summary... [![GoDev][godev-image]][godev-url] ...description... [godev-image]: https://pkg.go.dev/badge/github.com/lufia/back

    Go関連の比較的新しいTips - Plan 9とGo言語のブログ
  • スクリプト言語としてのGo

    原文(投稿日:2020/04/23)へのリンク ハイパフォーマンスなネットワークシステムや並列システムを開発するプログラム言語として、Goの採用が拡大していることから、開発者たちはこれをスクリプト言語として使用することに熱意を持ち始めている。ただし現在のGoは、そのままではbashやpythonの代用としては使えないため、これには多少の努力が必要だ。 CodelangのElton Minetto氏が説明しているように、そのパワーや簡潔さ、goroutineのサポートなど、スクリプト言語として使用する上でのGoには多くのアピールポイントがある。GoogleのソフトウェアエンジニアであるEyal Posener氏は、Goをスクリプト言語として使用するさらなる理由として、豊富なライブラリが使用可能であることと、言語自体が簡潔であるためスクリプトのメンテナンスが容易であることを挙げている。やや違う

    スクリプト言語としてのGo
    masutaka26
    masutaka26 2020/06/10
    結局 go run という結論だけど、それ以外のことも書いてある
  • go generate のベストプラクティス - Qiita

    概要 Go 言語におけるコード生成 (go generate) について、自分の中でベストプラクティスと思えるものが増えてきたので、ここでまとめて紹介してみたいと思います。 2020/05/30 初版 2020/06/03 次の節を追加 マップを元データとするときは要素の出力順をソートする 使用するコードジェネレータのバージョンをモジュールに記録する 2020/06/03 次の資料を公開 go generate 完全入門 (プログラミング言語Go完全入門 質問会 発表資料) wtz.go と time について go generate のベストプラクティスを説明するにあたり、この記事では wtz.go と time の 2 つのライブラリを実例としてとりあげます。 wtz.go は筆者が Go 標準ライブラリの time の Windows ランタイム部分を参考にして作成したもので、 Wi

    go generate のベストプラクティス - Qiita
  • Dependabotを使ってGoプロジェクトの依存を更新するノウハウ | おそらくはそれさえも平凡な日々

    システムを運用していく以上、ライブラリは常に最新を使いたい。最近は依存ライブラリの更新を検知してくれる便利なサービスがいくつかあって、Nature社ではDependabotを使っている。 https://dependabot.com/ Renovateの方が便利そう、という話も聞くのだが、とりあえずDependabotはGitHubが買収して、privateリポジトリでも無料で使えるので利用している。 導入自体は簡単で、画面のガイドどおりに進んでいけば、良い感じに言語や依存管理ツールも自動検出してくれる。設定ファイルは特に置いていない。慣れてきたり、設定を横展開したくなった場合に置くと便利そう。 参考: Dependabotの設定ファイルを置くようにした 動作の様子 前提としてGo Modulesで依存管理をしているが、依存ライブラリの更新があると以下のようにpull requestを上げ

    Dependabotを使ってGoプロジェクトの依存を更新するノウハウ | おそらくはそれさえも平凡な日々
    masutaka26
    masutaka26 2020/03/31
    手で go mod tidy してて、なんか不便だなーと思ってたw
  • Go 1.13 に向けて知っておきたい Go Modules とそれを取り巻くエコシステム - blog.syfm

    はじめに 今年の 8 月にリリースが予定されている Go 1.13 では、Go 1.11 で導入された Go modules に加え、Go module proxy といった新しいエコシステムが登場します。 そこで、そもそも Go modules は何を行っているのかや、何ができるのか、どういった要素で構成されているのかを紹介します。 また、古い Go バージョンから Go 1.13 へアップデートする場合や、 dep や Glide といったベンダリングツールから Go modules へ移行する際の懸念点も併せて紹介します。 先日発表した "Go Modules and Proxy Walkthrough" はこのポストがベースになっています。 TL;DR な人はスライドを見るのがおすすめです。 speakerdeck.com Go Modules Go modules という仕組みは

    Go 1.13 に向けて知っておきたい Go Modules とそれを取り巻くエコシステム - blog.syfm
    masutaka26
    masutaka26 2019/10/09
    Go 1.13 でも GO111MODULE=auto のままだったけど、この仕様なら存在を忘れても良さそう。早速そうした
  • try - Go の新しいエラーハンドリング (Go 1.14で導入予定)(でしたが,却下となりました) - Qiita

    Go 1.14 で try というシンプルなエラーハンドリング方法が導入予定です。 2019/07/17 追記 議論の結果、try は一旦却下となりました。詳しくは提案者 Robert Griesemer 氏のコメントを参照下さい。 error Go でのエラーハンドリングはややタイプ数が多い。

    try - Go の新しいエラーハンドリング (Go 1.14で導入予定)(でしたが,却下となりました) - Qiita
  • ghq v0.11.1 でGoの依存取得や一括アップデートが便利になりました | おそらくはそれさえも平凡な日々

    motemenにcollaboratorに追加してもらったので、滞留していたissue及びpull requestを大体さばきつつ、機能追加などをおこない、先程v0.11.1をリリースしました。GW中になんと45個のpull requestをマージしました。 今回の目玉は go get/import の機能追加です。具体的には、ghqで取り込んでいるリポジトリの一括アップデートや、Goの依存の一括取得が簡単になりました。 変更点 詳しくは、 v0.10.0以降のCHANGELOGを見てもらえればと思いますが、一部ピックアップして取り上げます。 ghq get/import への入力にホストも受け付け可能に https://github.com/motemen/ghq/pull/119 実はこれまで以下のようにホスト名をつけられなかったのですが、それができるようになりました。ghq impo

    ghq v0.11.1 でGoの依存取得や一括アップデートが便利になりました | おそらくはそれさえも平凡な日々
    masutaka26
    masutaka26 2019/05/08
    おお
  • GoでVueっぽくWebアプリが作れるVugu事始め - Qiita

    ツイートが100RT超えたので、Qiitaにも書いてみます。 Go 1.11がJavaScript APIをすべてサポートしたライブラリを開発し、WebAssemblyに新しい未来が見えました。それまでのWebAssemblyはDOMやネットワーク操作ができないとされてきたので、ループ処理の高速化や数値計算、またはCanvasをゴリゴリ使うゲームくらいしか使い道がないよね…といった評価でした。しかしJavaScript APIが実装されたことで、DOM操作やネットワーク処理が可能になり、WebアプリケーションをそのままGoに置き換えられるんじゃないかという可能性が出てきました。 GoではじめるWebAssebmly その1「Hello World」 | hifive開発者ブログ とは言え、直接書くとコードがなかなか複雑というか、残念な感じになっていました。例えばネットワークのオンライン、オ

    GoでVueっぽくWebアプリが作れるVugu事始め - Qiita
    masutaka26
    masutaka26 2019/05/02
    遅ればせながら動かすだけ動かしてみた。GOPATH 以下で試す人は export GO111MODULE=on 必要ね
  • git: shallow cloneしてすぐunshallowする - pockestrap

    Shallow cloneとは Gitには、shallow cloneという便利な機能があります。Shallow cloneを行うことで、最新のコミット履歴のみを取得する代わりに高速にcloneを行うことができます。 古いコミット履歴を取得しないという特性から、これは長い歴史をもつGitリポジトリに対して特に効果があります。 例: ruby/rubyをcloneする例 $ git clone --depth 1 https://github.com/ruby/ruby Cloning into 'ruby'... remote: Enumerating objects: 9894, done. remote: Counting objects: 100% (9894/9894), done. remote: Compressing objects: 100% (8679/8679), do

    git: shallow cloneしてすぐunshallowする - pockestrap
    masutaka26
    masutaka26 2018/12/20
    '$ get ghq -shallow -unshallow https://github.com/ruby/ruby' すると、'Incorrect Usage: flag provided but not defined: -unshallow' と怒られます...
  • Swiftのエラーハンドリングはなぜ最先端なのか - Qiita

    Swiftのエラーハンドリングは他のメジャーなプログラミング言語のどれとも異なる新しい仕様を持っています。特に、検査例外を持っているのですが、これはJavaで採用された以降はほとんどの言語で採用されていないため、現代では否定されている過去の間違いだったと広く認識されていると思います。そのため、Swiftユーザーで無い人は、検査例外という言葉をみた瞬間に興味を失ってしまうため、その詳細がなかなか世の中に伝わっていないと感じています。一方、私はこんなSwiftのエラーハンドリングをとても気に入っていて、様々な言語の進化の歴史を踏まえた産まれた最も優れた最先端の仕様だと思っています。この記事ではその考えを説明します。 Javaのエラーハンドリング Javaは検査例外を持っています。これにより、あるメソッドがエラーを送出するかどうかを関数のシグネチャとして静的に表明できます。 // 検査例外の例

    Swiftのエラーハンドリングはなぜ最先端なのか - Qiita
  • goroutineの最適な数について考えた|デロイト トーマツ ウェブサービス株式会社(DWS)公式ブログ

    株式会社MMMの柳沼と申します。好きなリージョンは東京リージョンです。 弊社ではGo言語をプロダクションで使っています。 Go言語の特徴のひとつに、 goroutine を使って並列処理を容易に書ける、ということがあります。しかし、並列処理って同時にいくつ走らせればいいのか?について考えました。 まだ試行錯誤している最中で、内容に間違い・もっとこうするといいよ!などがあれば教えていただけると助かります。m(_ _)m また、実際goroutineを使った処理を実装するときはsync.WaitGroupを使うことが多いと思うので、記事内でもちょこちょこ使っています。 よく見るやり方 CPU数を使う、というのを割りとよく見ます(たぶん)。 func main() { fmt.Println("Start") loop("A") fmt.Println("Finish") } // ヘビーな処理

    masutaka26
    masutaka26 2018/11/02
    "goroutineの数はついCPUのコア数で制限してしまいますが、処理の内容・CPU・IOを鑑みて、実際に計測しながら最適な数を見つけるのが良いと思います。"
  • goroutineはなぜ軽量なのか - Carpe Diem

    概要 以前の記事で christina04.hatenablog.com Goはスレッドよりはるかに軽量なgoroutineでC10K問題を解決する、という話をしましたが、goroutineが軽量なのはなぜか?という理由を深掘りしたことがなかったのでしてみました。 環境 golang 1.11.1 Darwin 17.7.0 軽量と呼ばれる理由は2つ 大きく分けると以下の2つのポイントがあります スレッドに比べてメモリ使用量が低い スイッチングコストが低い それぞれ説明していきます。 goroutineがスレッドに比べてメモリ使用量が低いのはなぜか スタックとヒープのメモリの使い方を理解すると分かります。 ヒープはメモリの下層、プログラムコードのすぐ上にあり、上に向かって成長します。一方スタックは仮想アドレス空間の一番上にあり、徐々に下に成長していきます。 ref: イベントループなしでの

    goroutineはなぜ軽量なのか - Carpe Diem
  • Go言語のInterfaceの考え方、Accept interfaces,return structs - Qiita

    Go言語のInterfaceの考え方、Accept interfaces,return structsGo言語interface Go言語の優れた特徴の一つとして、Interfaceが挙げられることがあります。 Interfaceを持つJavaやC#のような他言語と比べ、GoのInterfaceの言語機能における主な違いは 静的言語のように静的にチェックされるメソッドの羅列を宣言できるinterfaceでありながら ダックタイピングや型アサーションによって動的言語のように柔軟な使い方ができることです。 しかしこれだけでは単に、ケースに合わせて使い分けることができる選択肢を得ただけのように聞こえます。 実際にはGo言語のパッケージ、型システム、そして文化的特徴によってGo言語特有の軽量でシンプル、そして有機的なInterfaceを表現できます。 Go特有でGoらしいGoのInterfaceで

    Go言語のInterfaceの考え方、Accept interfaces,return structs - Qiita
  • 【Go言語】 Go Cloud で使われている Wire というツールでの依存性注入が便利かもしれない。 - Qiita

    Go言語】 Go Cloud で使われている Wire というツールでの依存性注入が便利かもしれない。GoAWSgooglecloud Go-Cloud Project が発表されて久しいですね。 Go Cloudは、クラウド (AWSGCP) 間で使用頻度の高いサービスの汎用的なAPIを開発しているプロジェクトです。コードを変えずにAWSGCPに対応できるサービスを開発できるのは、かなり便利ですね。まだβ版ですが、実際に安定すれば、是非とも組み込みたいパッケージです。 google/go-cloud その中で利用されている、wire と呼ばれる Dependency Injection Tool に触ってみました。簡単に説明すると依存性注入したコードを自動で生成してくれるツールです。 wire の実力を確認しよう! 今回は go-cloud にある example を参考にしてます

    【Go言語】 Go Cloud で使われている Wire というツールでの依存性注入が便利かもしれない。 - Qiita
  • ポジティブな Toriさんのツイート: "「dep ensure したら rm -rf /go/pkg/dep/source も忘れずに」 #container_build"

  • チョットできるGoプログラマーになるための詳解GoDoc - Qiita

    上の2つがCLIで、下の2つがブラウザです。歴史的な経緯を見てみましょう。 〜1.1: go docはバンドルされているツールで、ソースもgo体に同梱 1.2: go docは別のリポジトリにわけられてgodocになり、go体から外れた 1.3: godocで-analysisオプションが追加 1.5: 新しい"go doc"コマンドがgo体に同梱 1.11: godocがウェブだけになるため、go docを使えというアナウンスが出るように 1.12: godocが-httpだけをサポートしてCLIの機能は削除予定 1.13: godocのwebサーバーが同梱されなくなって手動でのインストールが必要に 1.13~: 既存のgodoc.orgから、go modのプロキシサーバーの情報をもとにドキュメントをホスティングするpkg.go.devが運用開始 わかりましたか?よくわかりませんよ

    チョットできるGoプログラマーになるための詳解GoDoc - Qiita
  • Go 1.11 の Modules (vgo) を CircleCI で使う | tsub's blog

    個人プロジェクトにて、先日リリースされた Go 1.11 の Modules (vgo) を使ってみました。 移行自体はスムーズにできたのですが、CircleCI でのキャッシュのやり方がそこそこ重要かも?と思ったので記事を書きました。 dep から Modules への移行 まずは dep で管理していた依存パッケージを Modules に移行します。 移行は簡単で、以下のコマンドを実行するだけです。 $ export GO111MODULE=on $ go mod init $ go mod download # go.sum を生成するため これによって go.mod と go.sum が生成されるためこれらを git の管理下に入れれば OK です。 $ ls go.mod go.sum Gopkg.lock Gopkg.toml main.go 後は dep 用のファイルを削除し

    Go 1.11 の Modules (vgo) を CircleCI で使う | tsub's blog