タグ

golangに関するtyruのブックマーク (200)

  • あなたがGOROOTを本当に設定しなくていい理由

    この記事は、Dave Cheneyさんの記事You don’t need to set GOROOT, reallyの非公式翻訳です。詳細は上記記事をご参照下さい。 Previous GoCon報告会で報告させて頂きました。Next #golang htmlパッケージについて

    tyru
    tyru 2017/08/27
  • Goのスコープについて考えてみよう #golang - Qiita

    はじめに Twitterで以下のような投稿をしてみました。 https://twitter.com/tenntenn/status/815807925222412292 この問題は、以下のコード中に存在するスコープの数を聞いている問題です。 package main import "fmt" func main() { const message = "hello, world" fmt.Println(message) }

    Goのスコープについて考えてみよう #golang - Qiita
    tyru
    tyru 2017/08/26
    ファイルスコープとパッケージスコープの違いが分かってない。AST 見ることなく普通に Go で開発してる分には意識する必要ないのかな
  • 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
    tyru
    tyru 2017/08/26
  • Goのsyncパッケージで相互排他ロックを行う - Qiita

    syncパッケージには、相互排他ロックがあります。 これを使うと意図的に処理にブロックを入れることが出来て goroutineのチャンネルのやりとりのウェイトのようなことが実装出来ます。 Mutex型 相互排他ロック。 使わない場合 package main import ( "fmt" "time" ) func main() { c := make(chan bool) for i := 0; i < 5; i++ { go func(i int) { time.Sleep(500 * time.Millisecond) fmt.Println(i) c <- true }(i) } for i := 0; i < 5; i++ { <-c } } package main import ( "fmt" "sync" "time" ) func main() { m := new(sy

    Goのsyncパッケージで相互排他ロックを行う - Qiita
    tyru
    tyru 2017/08/26
  • Golangのconst識別子iotaの紹介 - Qiita

    Go AdventCalendar2016の9日目(2016/12/09)の記事です。 前の記事は massa142さんの「Hacker Newsを一覧表示してくれるCLIツールを書いた」でした。 はじめに ちょっとマイナーなGolangの言語仕様である、iotaについて紹介します。 結構入門書とかにも書いてあるんですが、読み飛ばしがちなんですよね。 特に新規性がある内容ではないので、タイトルでもう知ってるわ!という方はそっ閉じしてもらって大丈夫です。 iotaとは iotaは、定数宣言(const)の内での既定された識別子です。 型なしの整数の連番を生成します。具体例を見ましょう。 package main import "fmt" const ( zero = iota one = iota two = iota three = iota ) func main() { fmt.Pri

    Golangのconst識別子iotaの紹介 - Qiita
    tyru
    tyru 2017/08/26
    “iotaに限らず、定義する値を省略すると、直前に定義されたものが流用されます”
  • Goでchannelがcloseしてるかどうか知りたい というアンチパターン

    そういえば金沢に行って来た話の2〜4日目をかいてる途中で2ヶ月くらい経ったことに気付きましたが、まぁその話はおいておいて今日はGoの話です。 さて、このタイトルを見てGoに詳しく賢明な読者の方々は「あぁまたこの話題だよ、Goでchannelがcloseしてるかどうか知りたいようなパターンはだいたい書いてるアプリの設計とかchannelの使い方が間違ってるんだからやめとけ」と眉をひそめるかもしれません。まぁちょっとまって! オレもそうなんじゃないかなぁという気はしているし、ハマリどころがありそうということはうすうす分かってるけど一応調べて考えてみてもいいじゃないか。 結局の所調べて「こうすればいいね!」ってことは分かったんですが、それも破綻する場合があるので、アンチパターンだなぁと思いつつこの記事を書くことにしました。 まずGoのchannelのナイーブさを再確認する そもそもGoのchan

    Goでchannelがcloseしてるかどうか知りたい というアンチパターン
    tyru
    tyru 2017/08/26
  • ブロックせずにチャネルに値を送信する方法 - Qiita

    チャネルに何かの値を送信したいけど、チャネルのバッファがすでに一杯ならそれ以上は送りたくない(送信待ちでブロックしたくない)という状況がある。 たとえば設定の再読み込みの責任を担っているgoroutineがいるとしよう。そのgoroutineは普段はあるチャネルで何か値が送られてくるのを待っていて、値が送られてくると動作を再開して、設定をどこかから読み込む(そのあとロックを獲得してグローバルな設定データを更新するというのが普通だが、それはここでは関係がない)。 さて、そういうgoroutineでは複数回連続して動作するのは通常特に意味がない。従って、設定再読み込みリクエストは1個でも2個でもどちらでもよくて、むしろ複数個連続してチャネルに値が送信されても1個しかキューされないようにしたいだろう。 そういうふうな動作を実現するには下のコードのようにすれば良い。 // バッファサイズ1のチャネ

    ブロックせずにチャネルに値を送信する方法 - Qiita
    tyru
    tyru 2017/08/24
  • Go言語でコマンドプロンプトに画像を表示するコマンドを作って、Vimの:terminalで表示させた - non vorrei lavorare

    おはようございます。保育参観後、次男は熱を出し、また、長期化して、実家暮らしかもと冷や冷やしましたが、すぐに回復して、長男の誕生日イベントに奥さんと映画に行ってこれました。@kjunichiです。 背景 ANSIエスケープで端末に画像を表示するものは多く出回っていて、自分もmacOS上ではnode.js実装のansi-canvasのexampleのimgcatを 愛用している。 しかし、事前準備なしでWindowsのコマンドプロンプトに表示するものはなかなか見つからなかった。コマンドプロンプトにも一部の文字に 色を付けて表示することは可能なので、色数は限定されそうだが、原理的には出来なくなさそうだった。が、 Windowsの直接のAPIだと、Windowsでの開発歴が浅い自分には、難易度が高かった、ANSIエスケープ並みの手軽なAPIで これを実現するものがないものかと、物色していたところ

    Go言語でコマンドプロンプトに画像を表示するコマンドを作って、Vimの:terminalで表示させた - non vorrei lavorare
  • Go が他の多くの言語での非同期プログラミングよりも優れている理由 - Qiita

    はじめに 非同期プログラミングと呼んでいるのは、ノンブロッキングIOと select, poll, epoll, kqueue のようなIO多重化を利用したネットワークアプリケーションを書くことです。 node.js で websocket 使ったチャットを書くとかそういうのです。 「他の多くの言語」とは、 Python (asyncio), node.js, C# などを想定しています。 Erlang や GHC なんかは Go に近いかも知れません。 async / await がない言語では、「コールバック地獄」や「deferred地獄」のような問題もありますがこの記事では扱っていません。 async / await のメリットを解説した他の記事を参照してください。 あとこの記事は主にランタイムに関する部分を扱っているので、「それは言語じゃなくて処理系の問題だ!」等の頓珍漢な揚げ足取

    Go が他の多くの言語での非同期プログラミングよりも優れている理由 - Qiita
    tyru
    tyru 2017/04/03
  • vim-go + gocode でインポートしていないパッケージも補完したい - pockestrap

    TL;DR Add let g:go_gocode_unimported_packages = 1 to your .vimrc 欲求 通常、gocode ではインポートしていないパッケージの関数等は補完されない。 例えば、strings.Spと打ってstrings.Split()が補完されるためには、import "strings"が必要である。 github.com これを修正するコミットが gocode に入っているため、有効にしたい。 試行錯誤 上記 Issue には、以下のコマンドを実行するように書かれている。 go get -u github.com/nsf/gocode gocode close gocode set unimported-packages true ところが、これをやってもうまくいかない。 様子を観察してみると、gocode set unimported-p

    vim-go + gocode でインポートしていないパッケージも補完したい - pockestrap
    tyru
    tyru 2017/04/01
  • Go言語でWebアプリを作りかけて辞めた話 - ぼっち勉強会

    3行で要約 golangでwebアプリを作り始めた golangは好きだけど、今回求める要件に合わないことに気付いた 途中まで書いたコードを捨ててRailsで書き直した 私のGoスキル A Tour of Goを途中まで みんなのGo言語を読んだ スターティングGo言語を読んだ スクレイピングしてDBに保存する簡単なバッチをGoで書いた 背景 とあるtoB向け受発注のWebアプリを作ることにしました。 開発者は私1人。私が目指した基準は以下のものです。 少なくとも3年はメンテできること 未来の自分(他人)が読んでも理解できること このアプリとガッツリ付き合う予定ではなく、出来れば保守は違う人に回したいし機能追加とかも控えめにしたい(重要) デプロイとか運用の手間を簡単にしたい ついでに、学んでおくことが有益になりそうな言語がいい これらを踏まえ、以下の理由からGoを選択しました。 シングル

    Go言語でWebアプリを作りかけて辞めた話 - ぼっち勉強会
    tyru
    tyru 2017/02/28
  • GoのためのGo

    Go言語はシンプルさを念頭にデザインされた言語です。仕様は単純明瞭さのために小さく収められていますが、そのため表現力に欠けているとか、コードが冗長になるという印象を持つ人も多いでしょう。有名なところでは、ジェネリクスや例外といった機能が(今のところ)存在しないことが問題にされることが多いようです。 一般に、ソフトウェアエンジニアリングというものは書かれる言語だけに依るものではありません。視点を拡げてGoを取りまくツール群を含めて見てみると、go fmt や goimports といったツールが広く使われていること、また go generate コマンドの存在などを見ても、Goという言語には、人間のプログラミングを機械によってさまざまな面から補助しようという態度があります。

    tyru
    tyru 2017/02/28
  • GoのExampleテストが便利

    Goでは、Example用のコードをgodocに表示させたり、テストとして実行して結果をチェックをすることができます。Example用のコードを書いて、それをドキュメントにコピペする作業や、その内容が古くなって動かないということから開放してくれます。 この仕組についてはtestingパッケージに説明があります。 testing - The Go Programming Language http://golang.org/pkg/testing/ 実際に適当なパッケージを作って試してみます。パッケージ名をexexとします。 $ mkdir -p go-example-example/src/exex $ cd go-example-example $ export GOPATH=`pwd` 適当に関数や構造体を用意します。 go-example-example/src/exex/hello

    GoのExampleテストが便利
  • Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」

    « Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる | Main | Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか » golang にはパッケージマネージャが無数にあります。 PackageManagementTools · golang/go Wiki · GitHub Home Articles Blogs Books BoundingResourceUse cgo ChromeOS CodeReview CodeReviewComments CodeTools C... https://github.com/golang/go/wiki/PackageManagementTools 僕もその一つの gom というのを開発している

    Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」
    tyru
    tyru 2017/01/25
    Go でも依存管理できるツールが公式で出たのかー
  • なぜGo言語 (golang) はよい言語なのか・Goでプログラムを書くべき理由 | yunabe.jp

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

    tyru
    tyru 2017/01/18
  • markdown-toc: Go で Markdown の見出しをパースして目次を作る - Sexually Knowing

    github.com Go でテキスト処理をする練習のために書いてみた。 mdtoc - The markdown ToC generator - ウェブログ - Hail2u.net が元ネタで再実装というかんじ。 小難しいことをやるとどうしても泥臭くなるけど、普段書いている高水準なコードはこれくらい泥臭くてともすれば効率が悪いんだろうな〜、ということを Go を書くたびに思っている気がする。

    markdown-toc: Go で Markdown の見出しをパースして目次を作る - Sexually Knowing
  • Big Sky :: Windows からも ssh でリモートコマンド実行したい、それ golang で出来るよ

    おそらく golang を暫く使っておられる方であればご存じだと思いますが今日は crypto/ssh を紹介します。 Windows で ssh と聞くとどうしても msys やら cygwin やら入れないといけなくて ランタイムを入れるのが嫌だ 特殊なパス形式とか嫌だ そもそも業務で使いづらい といった個人的もしくは政治的な事柄が起きてなかなか実現しづらかったりします。でも golang なら msys や cygwin に頼らず ssh コマンドを、しかもライブラリとして扱う事が出来るので golang で作ったウェブサーバやバッチから UNIX ホストに対して ssh コマンドを送る事が出来るのです。 ssh - GoDoc package ssh import "golang.org/x/crypto/ssh" Package ssh implements an SSH cli

    Big Sky :: Windows からも ssh でリモートコマンド実行したい、それ golang で出来るよ
    tyru
    tyru 2017/01/11
    ほえー
  • golang で正規表現クロスワードを解く - Qiita

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

    golang で正規表現クロスワードを解く - Qiita
  • Golang と SDL2 でゲームを作る — KaoriYa

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

  • GoでFUSEを使ってGitHubのIssuesをマウントする - Qiita

    Help us understand the problem. What is going on with this article?

    GoでFUSEを使ってGitHubのIssuesをマウントする - Qiita