タグ

tipsとgolangに関するa2ikmのブックマーク (11)

  • Go Tips連載4: GoDocの読み方 | フューチャー技術ブログ

    今回は、GoDocについて取り上げます。 長いので3行にまとめると GoDocのリファレンスはライブラリにとっては一次情報だが、使い方などはリポジトリのREADMEに書かれることも多い 構造体やインタフェースは、リファレンスだけを見ても使い方がわからないこともあるので、分からないからといって落ち込まないでください サンプルコードも合わせて確認して使い方を確認すると良いです GoDocGoDocは標準ライブラリや、他のサードパティ製ライブラリのドキュメントをホストしているウェブサイトになります。チュートリアルなどは一度クリアしたら見返すこともあまりないでしょうけども、GoDocはGoで開発している限り、ずっと参照し続けることになります。GoDocの読み方を知っておくことは、Go力をあげるには必須なスキルだと思います。 GoDocのURLは以下の通りの場所 https://pkg.go.dev

    Go Tips連載4: GoDocの読み方 | フューチャー技術ブログ
  • Go 1.13 にアップデートするとテスト時に "flag provided but not defined" エラーが発生するケース - blog.syfm

    Go でテストを実行する際は動的に生成された main 関数がエントリポイントとなっています。 Go 1.13 からはテスト実行時のテストフラグ (-v や -coverprofile など) の登録がこの生成された main 内で行われるようになったため、 main より先に実行される init 内でフラグの登録を行っているテストではフラグのパースがうまく動かず、テストが落ちるようになります。 たとえば、自分が開発している Evans では golden files testing のために --update フラグを e2e パッケージで用意し、これが有効になっている場合のみ golden files を更新するような設定になっていました。 var ( update = flag.Bool("update", false, "update goldens") ) func init()

    Go 1.13 にアップデートするとテスト時に "flag provided but not defined" エラーが発生するケース - blog.syfm
  • golangでBCEを意識してスライスへのアクセスを速くする - Qiita

    スライスの比較の記事を読んでいて、ほーと思ったのでメモ。 BCEで最適化されるとスライスへのアクセスが少し速くなるよ、という話。 参考 ここに書いてあることを要約して書いただけなので元記事読んだほうが良い説があります Slice Comparison in Golang - Tapir Games はじめに 2つのスライスの比較として、以下の3つの関数を考えます。 1つはDeepEqualを使った場合で、あとの2つは自作した関数です。 func CompareSlices_Reflect(a, b []int) bool { return reflect.DeepEqual(a, b) } func CompareSlices_General(a, b []int) bool { if len(a) != len(b) { return false } if (a == nil) != (

    golangでBCEを意識してスライスへのアクセスを速くする - Qiita
  • Big Sky :: 簡単に goroutine の実行個数を制限する方法

    Go は簡単に軽量スレッドが起動できるのがウリなのだけど、その使い方が難しいと思われているきらいがある。 Goへの誤解について - GolangRdyJp よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事は Goアドベントカレンダー2017 その3 の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね... http://golang.rdy.jp/2017/12/20/go-fact/ 慣れていない間は、処理を並行化する際に「どうやったら並行化できるんだ」が分からない事があるのだと思う。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量に

    Big Sky :: 簡単に goroutine の実行個数を制限する方法
  • Big Sky :: net/http でレスポンスの内容を確認したいなら io.TeeReader を使おう

    « Golang で物理ファイルの操作に path/filepath でなく path を使うと爆発します。 | Main | VimConf2017 に参加してきた。 » printf デバッグは便利だ。技術の後退と言われようと printf でないと解決できない事はまだまだたくさんあります。 今日は net/http でクライアントが得たレスポンスの JSON を確認したいといった場合に、どうデバッグしたらいいかを書いてみたいと思う。 Go のインタフェースは大よそ io.Reader もしくは io.Writer を使う様に設計されている。こうする事でプログラムがメモリを一度に沢山確保してしまわない様にしています。 package main import ( "encoding/json" "fmt" "log" "net/http" ) type Foo struct { ID  

    Big Sky :: net/http でレスポンスの内容を確認したいなら io.TeeReader を使おう
  • Big Sky :: golang では変数の宣言位置が大事

    今日こんなツイートをした。 @mattn_jp よろしければベターな理由をm(_ _)m 名前空間を短くする作法なのはわかるのですがメモリやGCやコンパイラなど、どの辺に優しい感じですか? — Ryuji IWATA (@qt_luigi) April 5, 2017 qt_luigi さんからどうしてかを聞かれたので説明したいと思います。 golang では宣言した位置で初めて自動変数としてメモリが確保され、ゼロクリアされます。 for i := 0; i < b.N; i++ { var foo Foo bar, err := doSomething() if err != nil { continue } foo.v = bar fmt.Fprintln(ioutil.Discard, foo) } なので例えばこの様なコードで doSomething() が err を返した場合、

    Big Sky :: golang では変数の宣言位置が大事
  • Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック

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

    Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック
  • Big Sky :: GolangでAPI Clientを実装する、の続き

    いい記事に感化されて僕も何か書きたくなった。 GolangAPI Clientを実装する | SOTA GolangAPI Clientを実装する 特定のAPIを利用するコマンドラインツールやサービスを書く場合はClientパッケージ(SDKと呼ばれることも多いが記事ではClientと呼ぶ)を使うこ... http://deeeet.com/writing/2016/11/01/go-api-client/ この先、JSON REST API のエンドポイントに対して Golang の struct を用意していく訳だけど、ここが一番かったるい作業で一番手を抜きたい所だと思います。そこで便利なのが JSON-to-Go です。 JSON-to-Go: Convert JSON to Go instantly JSON-to-Go Convert JSON to Go struct T

    Big Sky :: GolangでAPI Clientを実装する、の続き
  • Big Sky :: Re: GoLangでJavaのenumっぽいライブラリ作った話

    « ソースに一行追加するだけですべての HTTP 通信が環境変数指定のプロキシではなくIEの設定になるモジュールを書いた #golang | Main | golangvimgirl bot を書いた。 » GoLangJavaのenumっぽいライブラリ作った話 - おいぬま日報 なんとかなるわけなんだけど、これを毎回書くのは面倒なので... もっと良いやり方があったらぜひ教えて欲しいところです。 http://oinume.hatenablog.com/entry/introducing-goenum golang でユーザ型の値を文字列化する場合 Stringer というインタフェースを実装します。具体的には func (l Lang) String() string { switch l { case Go: return "Go" case Python: return "

    Big Sky :: Re: GoLangでJavaのenumっぽいライブラリ作った話
  • Go言語で幸せになれる10のテクニック - Qiita

    はじめに Go近辺を徘徊していて見つけたブログポスト。 Ten Useful Techniques in Go Goな方々には常識なのかも知れないけど、Go初心者の私にとっては面白かったのでちょっとまとめてみる。 紹介されているのは以下の10個の項目。 Use a single GOPATH Wrap for-select idiom to a function Use tagged literals for struct initializations Split struct initializations into multiple lines Add String() method for integers const values Start iota with a +1 increment Return function calls Convert slices,maps,et

    Go言語で幸せになれる10のテクニック - Qiita
  • Go言語でテストしやすいコマンドラインツールをつくる

    記事はGo Advent Calendar 2014の18日目の記事です. Go言語は,クロスコンパイルや配布のしやすさからコマンドラインツールの作成に採用されることが多い.自分もGo言語でいくつかのコマンドラインツールを作成してきた.例えば,GitHub Releaseへのツールのアップロードを簡単に行うghrというコマンドラインツールを開発をしている. コマンドラインツールをつくるときもテストは重要である.Go言語では標準テストパッケージだけで十分なテストを書くことができる.しかし,コマンドラインツールは標準出力や標準入力といったI/O処理が多く発生する.そのテスト,例えばある引数を受けたらこの出力を返し,この終了ステータスで終了するといったテストは,ちゃんとした手法が確立されているわけではなく,迷うことが多い(少なくとも自分は結構悩んだ). 記事では,いくつかのOSSツール(得に

  • 1