タグ

golangに関するjaguaのブックマーク (69)

  • なぜGo言語 (golang) はよい言語なのか・Goでプログラムを書くべき理由 | yunabe.jp

    結論としてはGo言語には以下のようないくつかの長所があり、現実路線で非常にバランスがとれた言語だと思います。 これらの長所のために失われたメリットも当然いくつもありますが、一定程度以上の規模のプロジェクトで利用する言語の選択肢としては現存するプログラミング言語の中では一番か二番目によいのではないかと思います。 コンパイルが速い (vs. C++) GCとメモリ安全性 (vs. C++) 妥当で現実的なレベルの型安全性 (vs. Python/Ruby) 実行時パフォーマンスが良さ (vs. Python/Ruby) 現実問題、ある程度の規模と期間のプロジェクトになると型検証があるとリファクタリングなどがだいぶ楽になるのでありがたい。 型があるので自然と実行時パフォーマンスも良い 標準ライブラリが整備されている (vs. C++) むしろ標準ライブラリにjsonのparserすら存在しないC

    jagua
    jagua 2017/01/18
  • Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック

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

    Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック
  • Golang tips you might not know

    This post is for 1st day of [Go Advent Calendar (3)](http://qiita.com/advent-calendar/2016/go3). I’ll introduce several Golang tips which I guess is not popular but definitely it’s useful at least for me. Each tips are somewhat small to write one post for them, so I’ll introduce them by this post all at once. 1) gopkgs — List Go packages FAST by using the same implementation as goimports

    Golang tips you might not know
    jagua
    jagua 2017/01/07
  • Go でリアルタイム通信ゲームサーバーを作っている話 - Qiita

    この記事は Go (その2) Advent Calendar 2016 の24日目の記事です。 この記事では 去年からずっと趣味Go を使ってリアルタイム通信ゲームサーバー作っていて、それなりに動くものができたので、それを紹介したいと思います。 リポジトリはこちらです。 https://github.com/shiwano/submarine 一部 Unity の有償アセットを除いている以外、クライアントもサーバーもすべてのコードをここで公開しているので、もし気になる実装があったら見てみてください。 以下、簡単なディレクトリの説明です。 . ├── art # デザインまわりのファイル置き場 ├── client # Unity クライアント (C#) ├── contract # 通信定義ファイル置き場 (TypeScript) ├── server │   ├── api # Ra

    Go でリアルタイム通信ゲームサーバーを作っている話 - Qiita
  • golang で正規表現クロスワードを解く - Qiita

    この記事は Go Advent Calendar 2016 最終日の記事になります。参加頂いた皆さんお疲れさまでした。 今年も昨年に引き続き、25人以上の方が「何か書きたい」と名乗り出て頂き、gogo2、go3 の3(2年連続)、計75エントリが揃う事になりそうです。Go 言語の人気が高まってきているのが良くわかるアドベントカレンダーでした。 あらすじ 普段あまり表だった所には姿を現さないのですが、今年は builderscon 2016 に登壇させて頂きました。 とても新鮮な体験で、味わった事のない緊張の中、いろいろな反響を貰いました。いい体験が出来たと思います。ありがとうございました。登壇し終えて数時間はなんだか緊張のほぐれた変な感じを味わっていました。懇親会の時あたりでようやく皆さんとお話する事ができて Vimmer の皆さんと Vim 談義をしてきました。 その懇親会で香り屋さ

    golang で正規表現クロスワードを解く - Qiita
  • Sum/Union/Variant Type in Go and Static Check Tool of switch-case handling

    I’ll introduce how to represent sum/union/variant(-like) type in Go first. Then, I’ll introduce ‘gosumcheck’, which is a static lint tool which checks all possible cases of type-switch. This is a post for Hatena Engineer Advent Calendar 2016 (Japanese). Sum Type in GoSo, what is sum/union/variant type? From Wikipedia, In computer science, a tagged union, also called a variant, variant record, disc

    jagua
    jagua 2017/01/01
  • Golang と SDL2 でゲームを作る — KaoriYa

    Golang で SDL2 を使って作ったゲームを RasPi3 で遊びました。 その方法を紹介します。 記事は Go Advent Calendar 2016 24 日目の記事です。 導入 皆さんは突然ゲームを書きたくなること、ありませんか? ありますよね? あるでしょ。あると言ってください! 私は最近 ドキュメントスキャナ を入手しまして、 手元にあった古いプログラミング雑誌をまとめてスキャンしてました。 あ、プログラミング雑誌ってのは若い人にはわからないかもしれませんが、 読者が投稿したゲームなどのプログラムのソースコードが掲載され、 それを他の読者が打ち込んで楽しむそういう雑誌です。 だいたいは BASIC で、 今となっては決して長いとはいえないソースコードなんですが、 それでも 超圧縮 されていたりして、 今読んでも「あー楽しいな(楽しかったな)」ってなるわけです。 私が所持

  • Goを学びたての人が誤解しがちなtypeと構造体について #golang - Qiita

    はじめに タイトルをキャッチーかつ若干煽り気味にしたのは、そもそも記事を見てもらう確率を上げるためで他意はありません。なぜ読んでほしいのかというと、typeとstructについて、一部の機能に着目して、それがtypeとstructの全てだと誤解されるとマズいなと感じることが最近多いためです。 この記事で書いてあることは過去にもインタフェースの実装パターンや2016年度Go研修で取り上げていますが、今回は端的に分かりやすくなるようにまとめたいと思います。

    Goを学びたての人が誤解しがちなtypeと構造体について #golang - Qiita
    jagua
    jagua 2016/12/26
  • gorenameをライブラリとして使う #golang - Qiita

    はじめに 皆さんはgorenameというツールをご存知でしょうか? golang.org/x/tools/cmd/gorenameで公開されている、Goのリファクタリングツールです。 ここでは、このツールを自分のコード上でライブラリとして使う方法と使いやすいリファクタリングツールの形について説明できればと思います。 なお、ここで扱う話はVimConf 2016において、エディタの壁を越えるGoの開発ツールの文化と作成法(ビデオ)というタイトルで話したものと、一部重複していますので、そちらもよかったら見て下さい。 gorenameを使ってみる まずは、gorenameをインストールして使ってみましょう。すでに使ったことある方はここは飛ばしてもらって構いません。 もしかすると、お使いのIDEやエディタによってすでにインストールされているかもしれません。 vim-goをお使いの方は、:GoRe

    gorenameをライブラリとして使う #golang - Qiita
  • ターミナルで遊べるブロック崩しをGo言語で作る - Qiita

    この記事はGo (その2) Advent Calendar 2016の12日目の記事です。 みなさん、サンタさんには何をお願いしましたか? PS4ですか? でもクリスマスまであと何日かありますよね。PS4はしばらくお預けですよね。 PS4がまだ無いとすると、手元にあるCUIのターミナルで遊ぶしかないですよね。 というわけで、ターミナルで遊べるブロック崩しをGo言語で作ってみました。 WindowsでもMacでもLinuxでも遊べます。 残念ながらPS3では遊べません。 技術解説 Go言語界隈ではわりとおなじみのtermbox-goというライブラリを利用しています。 これを使うと 任意の座標への文字の書き込み 画面のクリア キーイベントの取得 が行えます。 画面表示はこんな風に行います。 //画面を初期化 termbox.Clear(termbox.ColorDefault, termbox

    ターミナルで遊べるブロック崩しをGo言語で作る - Qiita
  • Go でツール書くときの Makefile 晒す - Qiita

    Go でツール書くときはタスクランナーとして make を使っています。ビルドだけじゃなくて、テストや配布用パッケージ作成も一括して make でやっています。 今回は整理も兼ねて、自分が普段どういう Makefile を使っているのか解剖していきます。 なぜ make を使うのか ビルドフラグ覚えるのが面倒だから、make は (Windows を除く) 大半のプラットフォームに入っていて使いやすいからというのが理由です。script/build みたいにシェルスクリプトを複数用意するのでもまあ良いと思いますが…。大半の Go プロジェクトは Makefile 置いてありますね。 make を使った開発フロー 基的には、リポジトリを git clone / go get -d した後に以下のコマンドを打てばアプリケーションをインストールできるようにしています。 $ cd $GOPATH

    Go でツール書くときの Makefile 晒す - Qiita
  • Go言語でJSONを扱う - Qiita

    [ {"id":1,"name":"akane","birthday":"08-16","vivid_info":{"color":"red","weapon":"Rang"}}, {"id":2,"name":"aoi","birthday":"06-17","vivid_info":{"color":"blue","weapon":"Impact"}}, {"id":3,"name":"wakaba","birthday":"05-22","vivid_info":{"color":"green","weapon":"Blade"}}, {"id":4,"name":"himawari","birthday":"07-23","vivid_info":{"color":"yellow","weapon":"Collider"}}, {"id":0,"name":"rei"} ] pac

    Go言語でJSONを扱う - Qiita
  • ASTを取得する方法を調べる #golang - Qiita

    はじめに みなさん、メリークリスマス! 22日の枠に欠員が出たので、go/parserパッケージを使ってAST(抽象構文木)を取得する方法についてまとめたいと思います。 goパッケージについては、簡単な式の評価機を作ってみるという記事も書いているので、そちらもぜひ読んで下さい。 なお、この記事を執筆時点のGoの最新バージョンは1.7.4です。 ノード go/parserパッケージでは、いくつかのParseと名前のついた関数でAST(抽象構文木)を取得することができます。ASTの各ノードを表す型は、go/astパッケージで提供されています。そしてそれらの型は、以下のast.Nodeインタフェースを実装するように定義されています。 type Node interface { Pos() token.Pos // position of first character belonging to

    ASTを取得する方法を調べる #golang - Qiita
  • 簡単な式の評価機を作ってみる #golang - Qiita

    はじめに 皆さんはgoパッケージを使ったことはありますか?私は、GoGo!言いながら、恥ずかしながら、あまりまともに使ったことがありませんでした。最近は、仕事でもAST(抽象構文木)を弄り倒すことがあるので、今回はgoパッケージに触れたいと思います。 ここでは、簡単な四則演算などを評価し、結果を返すREPLを作ってみます。一見難しそうですが、ほとんどgoパッケージの機能を使うので、非常に簡単です。 ASTへパースする まずは入力された文字列をパースし、ASTを生成してみます。ここでは、式の評価なので式単位でパースします。パースには、parser.ParseExprを用います。 たとえば、以下のように使用できます。 expr, err := parser.ParseExpr("1+1") if err != nil { panic(err) } ast.Inspect(expr, func

    簡単な式の評価機を作ってみる #golang - Qiita
  • GopherJS の基礎 - Qiita

    稿では、筆者が普段使っているツールの一つである、 GopherJS の基的な使い方について説明します。 GopherJS は Go で書いたプログラムを JavaScript に変換するソフトウェアです。生成した JavaScript は、 Web ブラウザはもちろん、 node.js で実行することが出来ます。 Web アプリケーションを書かなければならないが、どうしても Go で書きたいという、 Go プログラマーによくある (?) お悩みにうってつけです。 変換結果はそこそこ素直な読みやすい JavaScript になります。 asm.js に変換する Emscripten や、バイナリ形式の Web Assembly とは異なるアプローチです。 GopherJS のアプローチの場合、デバッグやプロファイルはしやすいですが、ファイルサイズやパフォーマンスには若干難があります。 な

    GopherJS の基礎 - Qiita
  • GoでとあるAPIサーバを実装し直した話 | メルカリエンジニアリング

    サーバサイドエンジニアの @b4b4r07 です。この記事は Go Advent Calendar 2016 の 19 日目です。今回は Go (Revel フレームワーク) で書かれていた API サーバをフルスクラッチで書き直したお話をします。 Revel とは A high productivity, full-stack web framework for the Go language 公式の説明にあるように、Revel は高機能でフルスタックな Web フレームワークです。 複雑なルーティングや、パラメータのパーシング、テンプレート機能など、Web アプリケーションを作ろうとなったときに必要な手段はたいてい兼ね揃えているようです。公式ドキュメントに詳しく書かれています。 Revel 以外にも Go 製の Web フレームワークは多数あり、有名どころだと以下のようなものが挙げられ

    GoでとあるAPIサーバを実装し直した話 | メルカリエンジニアリング
  • goa でデザイン・ファーストをシュッとする - Qiita

    はじめに この記事は Go(その3) Advent Calendar の19日目の記事です。 goa.design(以下 goa)の紹介をしたいと思います。 goa は APIデザインを書くと、そこから API サーバのモックとかクライアントとかドキュメントとか一通り生成してくれるマイクロサービス用のフレームワークのことです。 goa は APIデザインを書いて → レビュー → 実装 → デザイン見直し → ・・・ とサイクルを回して開発するプロセスをとれるようにできています。まずは API デザインを書くことで見通しよく進めよう、というのが goa を利用する際の設計方針です。 とてもすばらしいプロダクトなのですが、goa という名前のググラビリティが非常に悪く、なかなか広まらないなーと記事を書いたりしてました。最近、ちょっとずつですが goa のよさが広がってきていて(?) Adve

    goa でデザイン・ファーストをシュッとする - Qiita
  • GolangでwebサービスのAPIを叩くCLIツールを作ろう - Qiita

    はじめに この記事はGo (その3) Advent Calendar 2016の18日目の記事です。 最近Goの勉強がてら、とある社内向けWebサービスAPIを叩くCLIツールを書いてます。 有名どころのWebサービスならたいてい既に誰かがSDKなりCLIツールを作ってたりするので、それを使ればよいと思いますが、クローズドな社内向けのWebサービスとかだと、まぁ欲しい人が自分で書くしかないですね。 で、簡単なプロトタイプが動くようになったので、このあたりで覚えたことを整理してまとめてアウトプットしておこうかなと思います。 内容的には サブコマンド形式のCLIツールを作り方 spf13/cobraの使い方 viperと連携した透過的な設定ファイルの読み込み version番号の埋め込み、Makefile pkg/errorsによるエラーの伝搬、contextを使ったタイムアウト 標準のne

    GolangでwebサービスのAPIを叩くCLIツールを作ろう - Qiita
  • Go でロックする - Qiita

    はじめに この記事は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) } この関数を実行する

    Go でロックする - Qiita
    jagua
    jagua 2016/12/22
  • 本物の golang を... 本物の Gopher を、お見せしますよ。 - Qiita

    事の始まり それはD言語くんへの嫉妬から始まった。 D言語くんの繁殖についての仮説 lsを間違えてdlと入力してしまったときに、D言語くんが通り過ぎるコマンド くっ悔しい... そしてショボいAAで2番煎じ。 lsを間違えてgolと入力してしまったときに、Gopherが通り過ぎるコマンド書いた。 こんなはずじゃない! 僕らの Gopher 君はこんなチープじゃない! 明日来てください。物の Gopher をお見せしますよ。 — mattn (@mattn_jp) December 15, 2015 (当はもうちょっと前から作ってましたが) 物のGopher君とは そして今回、これを公開するに至った。 まずはこれをご覧頂きたい。 !!!!!!!!!!!!1 こいつ・・・ 動くぞ・・・ golang で書いたデスクトップマスコットです。起動すると画面のタスクバーの上をウロウロします。たま

    本物の golang を... 本物の Gopher を、お見せしますよ。 - Qiita
    jagua
    jagua 2016/12/22