タグ

Golangに関するhohoho_ho2005のブックマーク (1,266)

  • Golang製DBマイグレーションツールgoose + MySQLを試してみた - Qiita

    gooseとは Golang製のDBマイグレーションツール https://bitbucket.org/liamstask/goose/ なんでgoose? プロジェクトのプログラムとは離した状態でマイグレーションを導入したかった。プロジェクトごとにマイグレーション手段が変わるのが嫌だったから。 SQLをそのまま書けるので学習コストが高くなさそう。 Golang製のツールを使ってみたかった。 導入まで 参考: http://enomotodev.github.io/post/use-goose/ goは導入済みとして $ goose goose is a database migration management system for Go projects. Usage: goose [options] <subcommand> [subcommand options] Options:

    Golang製DBマイグレーションツールgoose + MySQLを試してみた - Qiita
  • eawsyのaws-lambda-goを使ってみる — そこはかとなく書くよん。 ドキュメント

    eawsyのaws-lambda-goを使ってみる¶ AWS lambdaは昨今人気ですね。しかし、実行環境がpythonjava、nodeだけです。ぼくはpythonも結構やってきましたが、近頃ずっとgoを使っており、goで実行できると良いなと思っていました。 ということで、昨日 eawsy/aws-lambda-go というgolambdaを記述できるライブラリを知ったので、試してみました。 (以下 eawsy と呼びます) apexとの比較¶ lambdagoで書きたいなと言う気持ちは過去には AWS Lambdaで効率的にgoバイナリを実行する という記事を書いてました。このときは、 lambda_proc というライブラリを使っていたのですが、その後いろいろでてきて、最近だと apex が有名です。 では、eawsyとapexとの違いはなんでしょうか。eawsyはPytho

  • Golangにおけるinterfaceをつかったテストで mock を書く技法 - haya14busa

    いい記事に感化されて僕も何か書きたくなった。 Golangにおけるinterfaceをつかったテスト技法 | SOTA リスペクト: Big Sky :: golang で終了を確認するテストの書き方 GolangAPI Clientを実装する | SOTA Big Sky :: GolangAPI Clientを実装する、の続き 今週のやつではなく先週のです.今週のは特に知見がなかった…grpc-goとか使えたらクライアント勝手に生成されるしいいよねgrpc流行ると便利そう(感想) くらい Golangにおけるinterfaceをつかったテスト技法 | SOTA めっちゃいいなーと思ったんですが,テスト用 の mock を気軽に作るテクニックはあまり詳しく紹介されてなかったのでそのあたりの1つのテクニックを書きたい. 前提 僕もテストフレームワークや外部ツールは全く使わない.標準のt

  • A tour of YAML parsers for Go

    Here is a list of YAML parsers for Go programming language. For each one, I will provide a short description, an evaluation and an example source code. You can download an archive with example source code here. Note that names of the parsers were customized by myslef as they are almost all named goyaml :o) In the code example, we will parse following YAML file: foo: 1 bar: - one - two In each sour

  • Golangでinterface{}を使ったJSONのパース - Qiita

    { "ok": true, "members": [ { "id": "U023BECGF", "team_id": "T021F9ZE2", "name": "bobby", "deleted": false, "status": null, "color": "9f69e7", "real_name": "Bobby Tables", "tz": "America\/Los_Angeles", "tz_label": "Pacific Daylight Time", "tz_offset": -25200, "profile": { "avatar_hash": "ge3b51ca72de", "first_name": "Bobby", "last_name": "Tables", "real_name": "Bobby Tables", "email": "bobby@slack.

    Golangでinterface{}を使ったJSONのパース - Qiita
  • Goで標準出力と標準エラー出力の色情報を失わずに外部コマンドをラップする  - Qiita

    こちら(Golangで外部コマンドを実行する方法まとめ GoGo2109 - Qiita)にGolangで外部コマンドを実行する方法や実行した結果を出力する方法がまとまっていますが、出力をプログラム上で文字列の返り値として受け取る方法だと出力時の色情報が失われてしまいます。 色情報を失わずに単純にコマンドをラップするには、cmd.Stdoutとcmd.Stderrをos.Stdoutとos.Stdoutに置き換えてからcmd.Run()を実行することで実現可能です。 終了ステータスコードを外部コマンドから適切に取得するバージョン https://play.golang.org/p/bPdEsY_DLh package main import ( "os" "os/exec" "syscall" ) func main() { args := os.Args[1:] cmd := exec.

    Goで標準出力と標準エラー出力の色情報を失わずに外部コマンドをラップする  - Qiita
  • 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を実装する、の続き
  • GolangでAPI Clientを実装する

    特定のAPIを利用するコマンドラインツールやサービスを書く場合はClientパッケージ(SDKと呼ばれることも多いが記事ではClientと呼ぶ)を使うことが多いと思う.広く使われているサービスのAPIであれば大抵はオフィシャルにClientパッケージが提供されている.例えば以下のようなものが挙げられる. https://github.com/aws/aws-sdk-go https://github.com/Azure/azure-sdk-for-go https://github.com/PagerDuty/go-pagerduty https://github.com/hashicorp/atlas-go 特別使いにくい場合を除けば再実装は避けオフィシャルに提供されているものを使ってしまえばよいと思う(まともなものなら互換性などをちゃんと考慮してくれるはずなので).一方で小さなサービ

  • 型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば

    思いつきでツールを作ってはリスのように忘れ、再発見しては新鮮な気持ちで便利に使う日々です。 一般にプログラミングにおいては、ソースコードを読むことに意外とばかにならない時間を使うもの。特に Go ではデフォルトで標準ライブラリのソースコードが手元にあり、コードを書く際よい教科書になるので、これを読むことも多いはず。 Go は静的に型付けされる言語なのでその点コードは読みやすいけれど、データ構造が不変ではないので、ある構造体のフィールドがどこで書き換わるのかを知るには、処理を追っていくしかない。名前で grep するのもひとつの手ではあるけど、精度はあまり期待できない。 そこで gofind。簡単に言うと、型やパッケージを含めた名前でもって Go のソースコードを検索するツールです。 go get github.com/motemen/gofind/cmd/gofind 使い方は以下の通り。

    型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば
  • Golangでエラー時にスタックトレースを表示する - Qiita

    Golangerrorにはスタックトレース情報はない.基は必要ないと思うし困ったこともない.一方で新しくプロジェクトに入りかつコードベースに慣れてない場合はどこが問題かアタリをつけるためにあっても良いとも思う.pkg/errorsを使ってるならそれはすぐに実現できる. pkg/errorsの基的な考え方についてなどは GoCon 2016 springの後に "Golangのエラー処理とpkg/error"にまとめた(作者のDaveのブログ記事は "Don’t just check errors, handle them gracefully").ここで強調して書いたのはちゃんとエラーをアノテートする(何をしてそのエラーが発生したかの状況を付加する)ことである.特に外部のパッケージとやり取りする場合,つまりまともなエラーメッセージが返ってこないかもしれない場合,pkg/errorsの

    Golangでエラー時にスタックトレースを表示する - Qiita
  • Go言語さわってみた - Practice of Programming

    一年前(2014年5月末の作成日の.goなファイルがあった)くらいにGo Tourを途中までやったけど、ほとんど覚えてなかったです。 ディレクトリとか環境変数とかは、前若干コード書いたので、それっぽく残ってました。emacsのgo-modeも入ってた。 という状況から、ちょうど一週間くらいたった感じです。 作ったもの https://github.com/ktat/go-coloring テキストを正規表現で色付けするもの。そういうツールってあるっけ? https://github.com/ktat/go-pager ↑のやつにlessっぽくしようとしたpagerを組み込んでいたけど、分離した(go-termboxを利用)。 コードは、まぁ、まだまだアレというか間違ってる/分かってない可能性が高いです。 参考にしたところ/したいところ Goチュートリアル http://golang.jp/

    Go言語さわってみた - Practice of Programming
  • Big Sky :: golang で終了を確認するテストの書き方

    いい記事に感化されて僕も何か書きたくなった。 Golangにおけるinterfaceをつかったテスト技法 | SOTA Golangにおけるinterfaceをつかったテスト技法 最近何度か聞かれたので自分がGolangでCLIツールやAPIサーバーを書くときに実践してるinterfaceを使ったテスト技法について簡単... http://deeeet.com/writing/2016/10/25/go-interface-testing/ 僕も1つ golang のテストの tips を。golang を書いていて良くあるのが「コマンドがステータス 0 で終了する事」のテスト。 package main import "os" func doSomething() { os.Exit(0) } func main() { doSomething() } でも os.Exit しちゃうとテ

    Big Sky :: golang で終了を確認するテストの書き方
  • Golangにおけるinterfaceをつかったテスト技法 | SOTA

    最近何度か聞かれたので自分がGolangでCLIツールやAPIサーバーを書くときに実践してるinterfaceを使ったテスト技法について簡単に書いておく.まずはinterfaceを使ったテストの基について説明し次に自分が実践している簡単なテクニックをいくつか紹介する. なおGolangのテストの基については @suzuken さんによる「みんなのGo言語」 の6章が最高なので今すぐ買ってくれ! 前提 自分はテストフレームワークや外部ツールは全く使わない.標準のtestingパッケージのみを使う.https://golang.org/doc/faq#Packages_Testing にも書かれているようにテストのためのフレームワークを使うことは新たなMini language(DSL)を導入することと変わらない.最初にそれを書く人は楽になるかもしれないが新しくプロジェクトに参入してきたひ

  • Goのパッケージ管理glideを初めて使う時のハマリポイント

    GO言語は最近触りだしたばかりでちんぷんかんぷんですが、パッケージ管理機能のglide(グライド)を使った時に、全然ビルド出来なくて困った話をします。 解決策は、実際にGOを使っているエンジニアに聞いたので間違いない(はず)です! はじめに 世の中には既にglideについて書かれた素晴らしい記事はたくさんあります。そもそもglideって何?という方はこちらの記事を読んでください。 glide – パッケージ管理のお困りの方へ – – Qiita MacGo言語の開発環境を構築する【準備編】 (direnv+go1.5Vendoring+glide) こちらの記事で、glideを使ったvenderingがうまくいった方は、この先を読まなくて大丈夫です。 僕は無理でしたけどね! というわけで、Go大して知らない。でも、せっかくやるならパッケージ管理は使いたいというわがままな人に向けて解決策で

    Goのパッケージ管理glideを初めて使う時のハマリポイント
  • GolangからMySQLを使用する - hayoblog

    2014 - 10 - 19 GolangからMySQLを使用する Golang goはよく知らないのでドキュメントやstackoverflowのコードを拾いつつ書きました ディレクトリ構成 ├── main.go └── mydb └── mydb.go mydb.go // wrapping mysql database access package mydb import ( _ "github.com/go-sql-driver/mysql" "database/sql" "log" ) const User = "<user>" const Password = "<pass>" const DB = "<dbname>" type MyDB struct { db *sql.DB } func (this *MyDB) Connect() { var err error thi

    GolangからMySQLを使用する - hayoblog
  • golang + Docker + BigQuery + digdag の例 - Qiita

    golang で BigQuery へ query をだし、その結果から グラフを png 画像として生成する例をつくりました。 それを cross compile し, digdag をつかって alpine の docker 中で実行させてみました。 生成されるグラフの例 注意: 現時点での golang のスクリプトは単に動作するだけのレベルで、golang としては改善の余地が大いにあります。 (2016-10-21)

    golang + Docker + BigQuery + digdag の例 - Qiita
  • Goアプリのデーモン化とデプロイの仕組み - 暁

    社内の某合宿イベントで、Go製の軽量WAF Echo を使ったAPIサーバーを作ろうとしていて、夏休み中にデーモン化とデプロイの仕組みを作ってみたので、ちょっとまとまりきってないですが忘れないうちにメモしておきます。 慣れない事が多くて試行錯誤しながら丸一日使ってめっちゃ疲れたけど勉強になった。hot deploy の仕組みが大変興味深いです。(参考記事) 試行錯誤した結果、利用するツール・ライブラリは下記になりました。 デーモン化 supervisord デプロイ (githubに push したら アプリケーションサーバーが webhook 通知を受信してビルド・graceful restart する) facebookgo/grace mattn/gost (デプロイの図) 試行錯誤 試行錯誤や調査の結果、利用を見送ったもの。 daemontools (プロセス管理) インストールが

    Goアプリのデーモン化とデプロイの仕組み - 暁
  • 【golang】数値型のオーバーフロー(桁あふれ)と、それを防ぐ解決策 | Hackers Log

    これを踏まえて説明します。 まず、int型は実装環境に依存されるので、ここでは32ビット環境で動作させたとします。 すると、i := 256の時点で、メモリ内部で数値はこのように表現されます。 見ての通り、メモリ上の変数iは、0000 0000 0000 0000 0000 0001 0000 0000となっています。 ここで、この変数を8ビットである、byte型にキャストをして代入します。 すると、メモリ内部で数値はこのように変化します。 byte型は8バイトまでの値しか扱う事が出来ないため、 それよりも上位の桁は無視してキャストを行います。 そのため、2進数で下8桁の数が有効となり、結果 “0” と判定されるというわけです。 オーバーフローが起こると何が困るの? オーバーフローが起こると、何が困るのでしょう? 残念ながら、これをすぐに思いついて説明するのはなかなか難しいと思います。 斯

    【golang】数値型のオーバーフロー(桁あふれ)と、それを防ぐ解決策 | Hackers Log
  • golangのファイルへの読み書きのまとめ

    golangである動作を実現しようとするとしても、 たくさんの書き方があってどれが一番合ってベストなのかわかりませんでした。 ドキュメントを見ても良い情報が得られず、情報を収集するのが苦しかったです。 まだ、比較的新しい言語であるので、ブログやQiitaなど、情報が少ないのが原因だと思います そこで、情報のまとめを発信することで、自分の情報整理と同時に、これからgolangを学ぶ人、 また、今まさに学ぼうとしている人にとっての助けとなるようにしようと考え、 ここにI/O関連の取り扱いや使い方についてまとめようと思います 目次読み込み書き込みする方法と手順ファイルへの書き込み読み込みos.Create, os.NewFile, os.Open, os.OpenFileの違い標準入力/標準出力/標準エラーへの書き込み読み込みメモリへデータへの書き込み読み込みbytes.Buffer / byt

  • Big Sky :: golang でパフォーマンスチューニングする際に気を付けるべきこと

    golang のテストツールには標準でベンチマークツールが付属しています。例えば、引数 n を貰ってその数分だけメッセージの入ったスライスを返す関数 makeSlice が以下の実装だったとします。 foo.go package foo import "fmt" func makeSlice(n int) []string { var r []string for i := 0; i < n; i++ { r = append(r, fmt.Sprintf("%03d だよーん", i)) } return r } 如何にも遅そうなコードですね。まずはこのコードを単品で計測するベンチマークを書きます。 foo_test.go package foo import "testing" func BenchmarkMakeSlice(b *testing.B) { b.ResetTimer()

    Big Sky :: golang でパフォーマンスチューニングする際に気を付けるべきこと