golangに関するtakehirohattoriのブックマーク (700)

  • Goの準々標準ライブラリの探索 - Qiita

    フューチャーアドベントカレンダー21日目のエントリーです。全25話中、神回が25回あったウルトラマンZが終わってしまいましたね。全日人のうちの1億2000万人ほどがウルトラマンZロスでうちひしがれているころかと思います。 Goでは、Goをインストールしたときに一緒にインストールされるライブラリを「標準ライブラリ」と呼びます。また、golang.org/xなパッケージ群は準標準ライブラリと呼ばれます。準標準ライブラリには多彩なライブラリが含まれます。今ではもう家に入ってしまって、後方互換性のためだけに残っているパッケージも一部ありますが・・・ これ以外にも https://github.com/golang/ にはたくさんパッケージがあります。一部はgolang/xのものも入っているのですが、それ以外のものをここでは仮に準々標準ライブラリと呼ぶことにします。 golang.org/xのも

    Goの準々標準ライブラリの探索 - Qiita
  • Go 脱初心者への道

    最近、 Go の学習を始めました。入門書や 公式のチュートリアル を終えてもなかなか解らないことをまとめてみました。 1. パッケージ作成・パッケージ管理 1. a. ディレクトリ構成は非公式ながら標準と目されるものがある(らしい) Standard Go Project Layout /cmd にmainのアプリケーションのソースを置きます。 /pkg にライブラリのソースを置きます。 /src にソースを置いてはいけません。 なお、このディレクトリ構成は go コマンド(go build 等)がデフォルトで認識するディレクトリ (/src , /pkg , /bin) とは全く異なるので注意が必要です。 2021-05-24 追記 このレイアウトは殆ど普及していないとのこと。また、リポジトリ名が「標準」を名乗るのは誤解を招くとのissueも挙がっています。 個人的な意見として、ライブラ

    Go 脱初心者への道
  • go-cmpを使う理由とTipsの紹介 - 技術メモ

    はじめに これは Go 4 Advent Calendar 2020 8日目の記事です。 Goのテストにおいて、構造体を含めて型の値を比較したいという場合は往々にしてあります。ロジックの結果はなんらかの値として作用することが多いですから、型の値を比較したい、というのは自然です。私は型の値が等価であるかどうか判定するために、go-cmp というライブラリを使うことが多いです。 github.com しかしGoにおける等価性の仕様は決まっていますし、標準ライブラリの reflect パッケージにも DeepEqual という deeply equal, かどうか判定するメソッドがあります。そこで記事ではなぜわざわざ go-cmp を使っているのかという理由と、go-cmp を使ったときにどのようにして使うか?という go-cmp の使う上でよく使う以下のTipsを提供したいと思います。 Ti

    go-cmpを使う理由とTipsの紹介 - 技術メモ
  • Go1.16からは go get は使わず go install を使おう - Qiita

    この記事はGo Advent Calendar 2020 16日目の代打記事です。奇しくも16日目にGo1.16の話をすることになりました。 【追記】タイトル改題しました 状況が落ち着いてだいぶ経ったのと、未だに多くの方にこの記事を見ていただけていることから、Go1.16での変更というより、今を生きる私達がどうすればいいか、という点にフォーカスしたタイトルに改題しました。文に変更はありません。一応注記すると、go get が廃止になったわけではなく、普段の開発フローで使うことはまずなくなった、という意味です。(一通り読んでいただければお分かりいただけるかと。) 【追記】Go1.18について ついに待望のGo1.18がリリースされましたね! https://go.dev/doc/go1.18#go-command そして予告通り go get によるインストール機能は削除されました。どうし

    Go1.16からは go get は使わず go install を使おう - Qiita
  • Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック

    OAuth2 でレスポンスタイプがコードもしくはトークンの場合、ブラウザで認証を行ってコードやトークンを自前サーバで受け取る事になる。モバイルアプリだと組み込みブラウザが前提になっておりリダイレクトの最終 URL からアクセスコードやトークンを得る。ただコマンドラインアプリの場合、認証の為に起動したブラウザの最終 URL を得る方法はない。また1コマンドラインアプリケーションの為にドメイン付きのコールバックサーバを用意するのも面倒だし、作ったサーバをユーザに信用して貰う必要がある。あとそもそも外部のサーバで受け取ったトークンをどうやってコマンドラインアプリに渡すかという問題がある。 そこで使うのがローカルサーバを立てる方法。認証後のコールバック先をコマンドラインアプリから起動したローカルサーバにし、そこにリダイレクトさせてアクセストークンを貰い保存する。 今日はこれが伝わり易い用に Mic

    Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック
  • Big Sky :: Go に go:embed が入った。

    Go 言語はシングルバイナリをウリにしたプログラミング言語です。バイナリファイルを1つポンと scp で転送すれば動くのでとても便利です。シングルバイナリとなると当然、画像や HTML といったアセットをバイナリに埋め込みたくなります。 Go 言語ではこれまで go-assets や go-bindata、statik というツールを使う事でファイルのコンテンツをバイナリ化し、変数からアクセスする様にしてきました。 しかしそれらには色々な流儀や OS 間でのまばらな動作など、ユーザにとって納得のいかない物がありました。昨日、Go 言語ではオフィシャルとしてこのファイル埋め込みをサポートする様になりました。Go 1.16 から使える様になります。 cmd/go: add //go:embed support · golang/go@25d28ec · GitHub +3 −3 src/cmd

    Big Sky :: Go に go:embed が入った。
  • GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/gotesplit gotesplitというかなり便利なツールを書いた。Goのテストをいい感じのサブセットに分割して、それを実行するものです。このアプローチで、社内のテストを15分から3分くらいまでに短縮しました。 これを使えばCI環境での高速なテストの並列実行を簡単に実現できます。 実例 CircleCIGitHub Actions上で簡単に導入できます。 CircleCIの場合 parallelism: 5 docker: - image: golang:1.15.3 steps: - checkout - run: command: | curl -sfL raw.githubusercontent.com/Songmu/gotesplit/main/install.sh | sh -s bin/gotesplit ./... -

    GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々
  • 【アジャイル系男子】Go Gin Server + OpenAPI Generator 爆速サイクル戦線で生き抜く ⚔⚔ - OPTiM TECH BLOG

    アジャイル系男子の日常 Go Ginとは❔❔ 自動生成手順📚 1. ファイル構成 2.openapi/openapi.yml 3.生成コマンド 4.★うわぁ。できたぁ。★ Go言語に高階関数が見当たらない🔍 Go Generate との出会い 新解体実行手順 ~Go2まで耐え抜く編~ 解らないし高階関数ジェネレーターを適当に作っちゃおう(業務で作ったやつコピペ)🔨🔨 型変換も一行でやりたいよね。作っちゃお(業務で作ったやつコピペ)🔨🔨 1.ファイル構成 2. openapi/model.mustache 3.生成コマンドをもう一度 4. go generate 5.★うわぁ。できたぁ。2★ とりあえず適当なレスポンス返してみる。🌶 main.go go/api_api1.go 実行👼 確認👼👼 Gitで管理する際のテンプレート .gitignore .openapi-g

    【アジャイル系男子】Go Gin Server + OpenAPI Generator 爆速サイクル戦線で生き抜く ⚔⚔ - OPTiM TECH BLOG
  • jsライブラリ選定はopenbaseが超絶便利 - Qiita

    openbaseとは https://openbase.io Find and compare open-source packages with user reviews, categorization, and unparalleled insights about packages' popularity, reliability, activity, and more. 手を抜いてdeeplでw ユーザーレビュー、カテゴリ分け、パッケージの人気、信頼性、アクティビティなどについての他の追随を許さない洞察力で、オープンソースパッケージを見つけて比較してください。 現在、多くのプログラミング言語はパッケージマネージャがあって、何らかの方法でパッケージについての情報を取得することができると思います。 パッケージの選び方 自分の場合はjs系が殆どなので、ライブラリを選ぶ方法は以下のような感

    jsライブラリ選定はopenbaseが超絶便利 - Qiita
    takehirohattori
    takehirohattori 2020/10/17
    ほかの言語はもうちょい…とのことなので、タグにJS以外も入れた。
  • Go 製 UI ツールキット Fyne で始めるクロスプラットフォーム GUI アプリケーション開発 · Yutaka 🍊 Kato

    こうやって分類すると、fyne というのはいったい何者なのだと思いませんか? そう思ったわたしは実際に試用してみて気に入り、社内で使う簡単な GUI アプリの開発に採用、ほんの一瞬で目的通りのアプリを実際に作れてしまいました。 作ったアプリはのちほど紹介しますが、まずは基的な使い方と多くの人が遭遇するであろうハマりポイントをいくつか紹介したいと思います。 ただし、現状 GoGUI 領域はまだまだ発展途上です。Fyne においてもデータバインディングやアニメーション機能が未提供だったりと GUI ツールキットとしては大穴があいているのも事実。限界を承知の上で、過度に期待せずに読んでいただけたらと思います。 はじめかた 既に Go 言語の開発環境は整っている前提で始めたいと思います。整っていない方は Getting Started してください。 では早速コードから。”Hello, w

    Go 製 UI ツールキット Fyne で始めるクロスプラットフォーム GUI アプリケーション開発 · Yutaka 🍊 Kato
  • Big Sky :: Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック

    Go 言語は struct のレシーバがポインタの場合は実体であってもポインタの場合であっても呼び出せるので、もし struct が参照カウントに従い動作する様な場合は実体でコピーされてしまっては困る場合があります。例えば以下の様なインタフェースを考えます。 package main import ( "fmt" "sync/atomic" "time" ) type foo struct { n int64 q chan struct{} } func (f *foo) Add() { if atomic.AddInt64(&f.n, 1) == 1 { f.q = make(chan struct{}) } } func (f *foo) Done() { if atomic.AddInt64(&f.n, -1) == 0 { f.q <- struct{}{} } } func (f

    Big Sky :: Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック
  • sync.Cond/コンディション変数についての解説

    sync.Cond(コンディション変数)について、Goをよく使ってる人たちですら「うまく説明できん」という話がmercarigoで出てたので、あとで誰かの役に立てばよいな、という気持ちで新たな解説記事を書いてみたいと思います。 自分はPerl5をバリバリ書いていた時代ではAE::Cond、Goを使うようになってからはsync.Condと、とにかく非同期処理でピタゴラ装置を作らないといけない時はこの仕組みがあったことでロジックを無駄に小難しくしないで実装することができたので、この仕組みは是非広く知られて欲しいのです。 というわけでまたあらたにGoのsync.Condを解説してみます。 なお、Web+DB Press vol 113の私の連載、「Goにいりては…」でもこの話を書いていますが、あちらの記事では Broadcast を使った方法ではなく、 Signal を使った方法について書いてあ

    sync.Cond/コンディション変数についての解説
  • Chrome DevTools Protocol clients and tools for Go

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    Chrome DevTools Protocol clients and tools for Go
  • Go の t.Cleanup がとてもべんり - blog.syfm

    Go 1.14 で testing パッケージに新しく t.Cleanup(func()) や b.Cleanup(func()) が導入されました。 最初は今まで defer を使っていたところを置き換えられるくらいしか良いところがないかな〜と思っていましたが、想像以上に柔軟な使い方ができるので今まで使用したパターンを書いておきます。 Cleanup の特徴 テストランナーは panic ハンドラがあるので、Cleanup は panic が起きたとしても常に呼び出されます。例えば、以下のコードではちゃんと called が出力されます。 func Test_main(t *testing.T) { t.Cleanup(func() { fmt.Println("called") }) panic("") } The Go Playground 別 goroutine で panic し

    Go の t.Cleanup がとてもべんり - blog.syfm
  • Go Tips 連載5: エラーコードベースの例外ハンドリングの実装+morikuni/failureサンプル | フューチャー技術ブログ

    概要TIG DX所属の多賀です。最近は設計をしつつ Go も触れて引き続き楽しく仕事してます。 今回は、errors package を一部利用して、エラーコードベースのエラーハンドリング処理を実装しました。また、morikuni/failure を利用した実装への書き換えも試してみています。 エラーコードベースの例外ハンドリングについて前提としてGoで書かれた HTTP APIサーバーに対してのエラーハンドリングについて記載します。 エラーコードベースの例外ハンドリングについてですが、アプリケーションで発生するエラーを事前にラベリングしてコード化し、コードをもとにエラーハンドリングを実施することとします。発生時の運用対応や影響について、事前に一覧で整理することで、運用負荷を下げる意味があると考えています。(補足: Futureではメッセージコードと呼称することが多いですが、一般的な命名で

    Go Tips 連載5: エラーコードベースの例外ハンドリングの実装+morikuni/failureサンプル | フューチャー技術ブログ
  • Big Sky :: WSL2 でクリップボード使いたい。

    WSL2 がリリースされ Windows 10 Home Edition でも使える様になったので色々遊んでるのだけど、Windows 側とテキストを交換したい時に面倒で、クリップボードを共有する方法を模索した。 最悪 /dev/clipboard を実装するまで考えたけど、面倒過ぎたし exe の実行厳しい(何か常駐させてユーザランドから起動する為にサーバがいる)だろうから別の方法を考えた。WSL2 は binfmt (たぶん違うけど良く似た奴だろう) で Windows の exe が起動できるので、コマンド経由で stdin/stdout を read/write できる物を起動する方法を考えた。 で自分で書くかと Windows Terminal 起動した時点で「Windows Terminal からコピペできるやん、いらなくね?」となり、来の目的を忘れかけていたので、おとなしく

    Big Sky :: WSL2 でクリップボード使いたい。
  • 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
  • Google App Engine (Standard Environment, 2nd Generation) で Golang の Web Application を作る方法 - めもめも

    これは何? Google App Engine (Standard Environment) は 2nd Generation にアップグレードして、GAE 専用の実行モジュール(各言語で用意された GAE 対応の専用ライブラリ等)が不要になり、一般的なライブラリやフレームワークが比較的自由に使えるようになりました。 cloud.google.com ここでは、Go 1.13 と軽量 Web Framework の Echo を用いて、GAE 上で Web Application を作る方法(主要なポイント)をまとめて紹介します。 echo.labstack.com 大事な宣伝 ここで利用するサンプルコードは、下記の書籍のサンプルアプリ(Python + Flask)を Golang で書き直したものです。GAE そのものの説明や今風な Web Application の作り方については、

    Google App Engine (Standard Environment, 2nd Generation) で Golang の Web Application を作る方法 - めもめも
  • GitHub - inancgumus/learngo: ❤️ 1000+ Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000+ tiny programs.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - inancgumus/learngo: ❤️ 1000+ Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000+ tiny programs.
  • https://www.programming-idioms.org/about

    This language bar is your friend. Select your favorite languages! Programming-Idioms In this website you can browse standard ways of coding standard things, in several popular programming languages. Enthusiastic programmers are welcome to participate by writing some implementations in their favorite language. Or by creating a new idiom. Content is free and provided as it is. No guarantee is made r

    takehirohattori
    takehirohattori 2020/05/03
    いろんな言語で、これはどうやって書くの?を事例別に紹介している。