![Loading...](https://cdn-ak-scissors.b.st-hatena.com/image/square/17e224b1d25e6baa2b9201ce0f4c105c33be3e5b/height=288;version=1;width=512/http%3A%2F%2Ffile.write.kogus.org%2F-VbrkQ%2F-VbrkQ.jpg)
はじめに この記事はGo Advent Calendar 2016 の17日目の記事です。 並行処理をする時にはロックが重要になります。 GoではchannelとMutexという仕組みを提供しています。 この記事では色々なロックを作りたいと思います。 tl;dr channelでロックを作ることは有意義です。 ただ、Mutexのほうが良いこともあります。 良い方法を選びましょう ロック無し ロックの意味を確かめるためにも、まずはロック無しのコードから始めます。 func main() { counter := 0 for i := 0; i < 1000; i++ { go func() { counter++ fmt.Print("*") }() } time.Sleep(3 * time.Second) fmt.Printf("\n%d\n", counter) } この関数を実行する
$ l total 16 drwxr-xr-x 5 kazu staff 170B 12 9 14:35 . drwxr-xr-x 84 kazu staff 2.8K 12 9 14:34 .. drwxr-xr-x 12 kazu staff 408B 12 9 14:44 .git -rw-r--r-- 1 kazu staff 13B 12 9 14:34 README.md -rw-r--r-- 1 kazu staff 312B 12 9 14:43 main.go $ manul -Q github.com/labstack/echo github.com/labstack/gommon github.com/mattn/go-colorable github.com/mattn/go-isatty github.com/valyala/fasttemplate $ manu
テストしやすいGoコードのデザイン golang.tokyo #2 12 December 2016 Taichi Nakashima 言いたいこと 明示的であれ! 2 whoami @deeeet / @tcnksm (GitHub) http://deeeet.com A PaaS Dev&Ops (Using go for CLI tool, API, Batch jobs) 3 OSS Tools gcli - The easy way to build Golang command-line application ghr - Create Github Release and upload artifacts in parallel Packages go-httpstat - Go package for tracing golang HTTP request latency
はじめに 皆さんはgoパッケージを使ったことはありますか?私は、Go!Go!言いながら、恥ずかしながら、あまりまともに使ったことがありませんでした。最近は、仕事でもAST(抽象構文木)を弄り倒すことがあるので、今回はgoパッケージに触れたいと思います。 ここでは、簡単な四則演算などを評価し、結果を返すREPLを作ってみます。一見難しそうですが、ほとんどgoパッケージの機能を使うので、非常に簡単です。 ASTへパースする まずは入力された文字列をパースし、ASTを生成してみます。ここでは、式の評価なので式単位でパースします。パースには、parser.ParseExprを用います。 たとえば、以下のように使用できます。 expr, err := parser.ParseExpr("1+1") if err != nil { panic(err) } ast.Inspect(expr, func
追記 その後GoConfernce2017で発表させていただき、その内容をまとめた記事を書いたので参考になれば幸いです。 GoConで発表してきたのでついでにruntime以下の知識をまとめていく #golang はじめに goroutineはGo言語の大きな特徴である並行処理を支える重要な機能です。 しかし、goroutineの仕組みについてしっかり理解しないままコードを書いてしまうと思わぬ挙動をしてしまうことがあるので注意が必要です。 今回はそんなgoroutineのスケジューリングの挙動についてまとめてみました。 僕自身がgoの書き始めの頃に引っかかった部分なので、初心者のgoroutineへの理解の助けになれば幸いです。 goroutineの特徴 goroutineは最小で2048byteなので、 Windows だと 1 MB、Linux だと 2 MB であるスレッドのデフォル
[参考情報] 【永久保存版】OAuth 2.0 / OpenID Connect シーケンスまとめ URL:https://qiita.com/kura_lab/items/812a62b5aa3427bdb49d タイトル: 『OpenID Connect 入門 〜コンシューマー領域におけるID連携のトレンド〜』 概要: コンシューマー領域におけるID連携のトレンドであるOpenID Connectの概要と仕様のポイントについてご紹介します。 OpenID TechNight Vol.13 - ID連携入門 Aug. 26, 2015 URL:https://openid.doorkeeper.jp/events/29487
Go書いててなんとなく見えてきた Goでやっちゃいけないパターン WAF導入してらくらくWebアプリ WAF自体が現在群雄割拠状態。 WAF毎にハンドラインターフェースが違うので既存コードつなぐにはラッパーが必要。 どのWAFもLL言語に比べるとまだまだフィーチャーの網羅範囲が狭い。 なのでもちろんLL言語ほど楽には書けないことが多い。 リフレクション使いまくりでトータル性能はLL言語並みに遅いのもある。 Go1.7のcontextパッケージの導入で標準のHTTPハンドラが復権する可能性があり更に荒れる予想。 追記: 楽できるのを期待してWAFを導入するの「やっちゃいけない」とまでは言い過ぎだったかもしれないけれど例のsqlでPrepareを正しく使えていないで性能出なかった件とか、当面WAFを使うなら自分で概ね中身を理解して使う覚悟が必要。 構造体メソッドにロジックを詰め込む Goの思想
2016年のGCPはFirebaseのアップデートから始まって東京リージョン開設と色々進化がありました。GAEよりはその他のGCPのサービスに注力していたのかなという印象です。 でもアジア初のGAEが日本というのは大きなニュースでした! 2017年にもどんどんデータセンターを増やすみたいで色々楽しみですね。 ちなみにGAEのChannel APIは来年シャットダウンされるらしいです。移行先としてリアルタイムの通信はFirebaseを使うのが公式のオススメのようです。 そう言えばGoogle Cloud PlatformもGoogle Cloudに改名してましたけどGCだと口頭でもわかりにくいしググラビリティも良くないのでGCPって言っていきたいです。 (追記: GCPでいいようです) そして本題の今年のGCPのアドベントカレンダーでは、皆悩んでいるらしいGAE/Goの構成についてです。 前
この記事は Slack Advent Calendar 2016 - Qiita の3日目の記事です。 昨日は Kinoppyd さんの「今そこにあるSlack」でした。 さて、今回、この記事では golang で Slack bot を実装する方法を紹介しようと思います。 世に蔓延る Slack bot これから bot を世に放とうとしている人は、是非、1日目と2日目の記事を読み、事前知識を頭に叩き込んでおくと良いと思います。 Slackで業務チャンネルの平穏を維持するbot、そして人間のトークンをbotに与える話 - Qiita 今そこにあるSlack 基本的に、自身で作成した bot はもちろん好きになると思いますが、人によっては理解不能な bot や、意味不明な場面で反応したりと、「邪魔だな」と思われてしまうことがあります。そのため、bot を開発する人は「謙虚・尊敬・信頼」(T
Get Wild Advent Calendar 2016 の1日目です。 概要 89バージョンやライブの小室さんみたいにGetWildをサンプリングしたい でもシンセがない 君にはterminalがあるじゃないか サンプリングに必要な音源をゲットしよう 私はMacなのでGarageBandで元音源から必要な部分だけ抽出しました 全部で2個。 /tmp/de-dende-den.mp3 : デーデン!デーデン!の部分(0:21~0:22) /tmp/get_wild_and_tough.mp3 : ゲッワイエンターフ!の部分(1:01〜1:04) itunesの簡易プレイリストを消去しよう 音源再生時、itunesが立ち上がる人もいるでしょう。 その場合、簡易プレイリストがあると、 「再生を開始します。以前、次はこちらに追加した5曲を消去してもよろしいですか?」 とポップアップが
表題の通り.いくらかポイントがあったのでメモとして記す. 基本的にこの記事の内容を真似した. medium.com あらかじめ,CircleCIの側の設定でGITHUB_TOKENという環境変数を登録しておく.なおGitHubのPersonal access tokenにはrepoのpermissionを付与しておく. とは言えこれでは動かない.理由はghr (ghrについてはこちら: 高速に自作パッケージをGithubにリリースするghrというツールをつくった | SOTA) がcontextに依存しているからで,contextはgo 1.7以降でないと利用できない.しかしながらCircleCIのgolang環境は1.6系が使える内の最新なので *1 このままではghrをgo getすることが出来ない. というわけでCircleCI上でgo 1.7を使うようにしましょう,ということでそう
はじめに Goは2009年にGoogleよりリリースされた、オープンソースのプログラミング言語です。C言語のように高速な実行速度とスクリプト言語のような生産性を併せ持つGoは、近年、各種Webサービスのバックエンド開発やインフラ領域で利用され、注目されつつあります。 国内企業でもGoを採用する事例が増えており、それぞれの知見を共有するために、各地で勉強会なども行われるようになってきました。このようなGo人気の高まりを受けて、「まだ触ったことはないけれど興味はある」という方も多いのではないでしょうか。 本連載ではそういった方を対象に、Goの基礎部分に触れながら、実際にWebアプリケーションを作成するまでを解説します。 第1回目の今回は、Goとはどのような言語なのかを紹介し、実際にかんたんなプログラムを動かしてみます。 Goとは 元々Googleの内部的なプロジェクトとして始まったGoは、20
MOONGIFTはオープンソース・ソフトウェアを紹介するブログです。2021年07月16日で更新停止しました Goのビルドを行う場合、コマンドを使って行うのが基本です。多くのコンパイル系プログラミング言語ではそうやって開発するでしょう。しかし毎回入力するのは面倒になってくるのも事実です。 そこで使ってみたいのがrealizeです。Goプロジェクトのファイル変更をウォッチして自動コンパイルしてくれます。 realizeの使い方 realizeではパスを追加して、最後にrunを実行します。複数のGoプロジェクトが管理できます。 $ realize run Realize - 1.1 A Go build system with file watchers, output streams and live reload. Run, build and watch file changes wit
いい記事に感化されて僕も何か書きたくなった。 Golangにおけるinterfaceをつかったテスト技法 | SOTA リスペクト: Big Sky :: golang で終了を確認するテストの書き方 GolangでAPI Clientを実装する | SOTA Big Sky :: GolangでAPI Clientを実装する、の続き 今週のやつではなく先週のです.今週のは特に知見がなかった…grpc-goとか使えたらクライアント勝手に生成されるしいいよねgrpc流行ると便利そう(感想) くらい Golangにおけるinterfaceをつかったテスト技法 | SOTA めっちゃいいなーと思ったんですが,テスト用 の mock を気軽に作るテクニックはあまり詳しく紹介されてなかったのでそのあたりの1つのテクニックを書きたい. 前提 僕もテストフレームワークや外部ツールは全く使わない.標準のt
いい記事に感化されて僕も何か書きたくなった。 GolangでAPI Clientを実装する | SOTA GolangでAPI 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
一年前(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/
最近何度か聞かれたので自分がGolangでCLIツールやAPIサーバーを書くときに実践してるinterfaceを使ったテスト技法について簡単に書いておく.まずはinterfaceを使ったテストの基本について説明し次に自分が実践している簡単なテクニックをいくつか紹介する. なおGolangのテストの基本については @suzuken さんによる「みんなのGo言語」 の6章が最高なので今すぐ買ってくれ! 前提 自分はテストフレームワークや外部ツールは全く使わない.標準のtestingパッケージのみを使う.https://golang.org/doc/faq#Packages_Testing にも書かれているようにテストのためのフレームワークを使うことは新たなMini language(DSL)を導入することと変わらない.最初にそれを書く人は楽になるかもしれないが新しくプロジェクトに参入してきたひ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く