golang.tokyo #11 の発表資料です。
golang.tokyo #11 の発表資料です。
「goで書いたアプリケーションは実行ファイルひとつコピーするだけでいいのでインスコ超ラクチン」なんて思ってたんですが、 go1.4からnetパッケージを使っているアプリケーションは、フツーにビルドするとdynamic linkになるようになってました。 $ cd /path/to/your_app $ go build $ file your_app your_app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped そんなわけで別環境にバイナリコピーしても動かないケースが発生して超絶アタマを悩ませることになるのですが、 そんなときは以下のようにbuildすればstatic linkになってくれるようです。 $ go build
今年も夏のインターンで学生にGoの講義をします。多く寄せられる質問が「A Tour of Goを終えたのですが、その後に何をやるのがおすすめですか?」というものです。学生に限らず、言語を学ぶ方はプログラミングそのものに対する慣れやバックグラウンドも違います。そこでなるべくいろんな方の参考になるように、おすすめな本なりページなり方法なりをまとめてみます。 わりと多くの人におすすめ 「プログラミング言語Go」(Alan A.A. Donovan, Brian W. Kernighan著)です。通称GOPL。 http://www.gopl.io/ 柴田さんによる日本語翻訳もあります。 https://www.amazon.co.jp/dp/4621300253 Go言語のイントロダクションから始まり、型・インタフェース・並列性の説明などが丁寧にかかれています。私がGOPLを良いと思う点は、例示
以下の記事は Java について触れていますが、Java を dis っている訳でもありませんし、冗長に見える例を意図的に使っています。 最近 Twitter で golang に Generics が無い事についてずいぶんと盛り上がったのですが、僕の意見をこのブログにも書いておこうと思います。 golang に多相が無いのはアレだとか開発者の怠慢だみたいな話はだいたい他の言語を覚えた人から出る感想で、静的型付言語である golang を見ると確かにそう見えるかもしれない。ただ golang は Java や他の言語と違って Duck Type を採用している。 — Vim芸人 (@mattn_jp) March 7, 2017 スクリプト言語の多くに多相が求められないのと同じ様に golang を深く触る人達から多相が欲しいという意見がそれほど出ないのは golang の型が Duck
Go言語はシンプルさを念頭にデザインされた言語です。仕様は単純明瞭さのために小さく収められていますが、そのため表現力に欠けているとか、コードが冗長になるという印象を持つ人も多いでしょう。有名なところでは、ジェネリクスや例外といった機能が(今のところ)存在しないことが問題にされることが多いようです。 一般に、ソフトウェアエンジニアリングというものは書かれる言語だけに依るものではありません。視点を拡げてGoを取りまくツール群を含めて見てみると、go fmt や goimports といったツールが広く使われていること、また go generate コマンドの存在などを見ても、Goという言語には、人間のプログラミングを機械によってさまざまな面から補助しようという態度があります。
以前から c-archive は作れたけど DLL にするとシンボルが被ったりして上手く DLL が作れなかった。 Big Sky :: golang の Windows 版が buildmode=c-archive をサポートした。 だいぶ時間が掛かった様ですが、ようやく buildmode=c-archive が Windows でも使える様になりました。 cmd/go: -buildmode=c-archive should ... http://mattn.kaoriya.net/software/lang/go/20160405114638.htm cmd/go: -buildmode=c-shared should work on windows · Issue #11058 · golang/go · GitHub https://github.com/golang/go/i
初めに Go 1.7がリリースされる。目玉の一つは、SSA-IRが導入されたことだろう。Go1.7でSSAが入るんだけど、SSAって何?と居酒屋で聞かれたことが本稿の発端だった。私の知識だけでは包括的な説明にならなかったので、いろいろ調べつつそれをまとめた。 以下、一般的な話ではなく、なるべくGoに絞って話を進めている(コンパイラのコードはは cmd/compile/internal/gc あたりにある)。より一般的な話は、参考文献等を示したのでそちらを参考にしてほしい。いろいろ調べて、Goに追加されたSSAについて知るべきことは、SSAが何か?よりも、SSA導入したGoがどうなったか、であると思った。 SSAとは何か SSA とは Static Single Assignmentの略だ。一つの変数への代入は一度しか行われてない事が確約できる形式のコードだ。この形式のコードは、最適化が行い
Go書いててなんとなく見えてきた Goでやっちゃいけないパターン WAF導入してらくらくWebアプリ WAF自体が現在群雄割拠状態。 WAF毎にハンドラインターフェースが違うので既存コードつなぐにはラッパーが必要。 どのWAFもLL言語に比べるとまだまだフィーチャーの網羅範囲が狭い。 なのでもちろんLL言語ほど楽には書けないことが多い。 リフレクション使いまくりでトータル性能はLL言語並みに遅いのもある。 Go1.7のcontextパッケージの導入で標準のHTTPハンドラが復権する可能性があり更に荒れる予想。 追記: 楽できるのを期待してWAFを導入するの「やっちゃいけない」とまでは言い過ぎだったかもしれないけれど例のsqlでPrepareを正しく使えていないで性能出なかった件とか、当面WAFを使うなら自分で概ね中身を理解して使う覚悟が必要。 構造体メソッドにロジックを詰め込む Goの思想
Go による Web アプリケーション開発 を読みました。 (まだ後半はパラパラめくっただけですが) この本は Go のチュートリアルでは無いです。 A Tour of Go とか The Go Programming Language で基本的な文法などは抑えた状態で読むべきでしょう。 この本で最初のサンプルアプリケーションは、 WebSocket によるチャットです。まず単に動くだけのチャットを作ってから、 Github などと OAuth2 で認証したり、各所からアイコンを引っ張ってきたりと、 Go で小さめの Web アプリを作るときに実用されそうな要素が並んでいます。 後半のサンプルアプリケーション (Twitter と連携する voting アプリ)では MongoDB や NSQ を使いはじめるので、ちょっとそのミドルウェアを使わない人にとっての実用性が落ちてきます。しかしこ
Go言語のDependency/Vendoringは長く批判の的になってきた(cf. “0x74696d | go get considered harmful”, HN).Go1.5からは実験的にVendoringの機能が入り,サードパーティからはDave Chaney氏を中心としてgbというプロジェクベースのビルドツールが登場している.なぜこれらのリリースやツールが登場したのか?それらはどのように問題を解決しようとしているのか?をつらつらと書いてみる. Dependencyの問題 最初にGo言語におけるDependecy(依存解決)の問題についてまとめる.Go言語のDependencyで問題なのはビルドの再現性が保証できないこと.この原因はimport文にある. Go言語で外部パッケージを利用したいときはimport文を使ってソースコード内にそれを記述する.このimport文は2通りの
GOPATH 問題 Gophers! 周知のようにgoはGOPATHで依存パッケージをどこにインストールするか決められます。 入門記事などでは、~/.bashrcや~/.zshrcの中で export GOPATH=$HOME/gocode または export GOPATH=$HOME とすることが多いようです。 しかし、GOPATHを各プロジェクトのパッケージが混ざるので、 同じパッケージの異なるバージョンを同時にインストールできない 変なことをすると、全プロジェクトが巻き添えになる どれが不要なパッケージか分からなくなる という欠点があります。 そこでdirenv direnvを使うと、プロジェクトごと(ディレクトリごと)にGOPATHを分ける事ができます。 direnvのインスト―ルと基本的な設定 # HOMEにインストール $ git clone http://github.co
VagrantではSahara pluginを使うことで、VMの状態を以前の状態に巻き戻すことができます(sandobx mode)。 VMの中でいろいろいじっている際に変更前の状態に戻せるのはとても便利なのですが、Saharaでは戻せるチェックポイントをひとつしか作れません。 自分の場合、深遠なChefのレシピを書いている過程で、戻せるポイントを何個か置きたくなることがよくあります。 さて、VagrantのバックエンドとしてVirtualBoxを使っている人は多いかと思います。 バックエンドがVritualBoxの場合、SaharaのsandboxはVirtualBoxのsnapshotを使って実現されています。 VirtualBoxのsnapshotはひとつだけでなくいくつでも作ることができます。 CUIでVirtualBoxの操作(snapshotを作ったり)をするには、vboxma
7月29日付けのgolang.orgブログエントリーで context というパッケージが紹介されました。 Go Concurrency Patterns: Context - The Go Blog 参考: Go言語のcontextパッケージについてのやりとり - ワザノバ | wazanova 今現在、業務でGo言語を使ったWebサービスを書いているのですが、contextはリクエストのキャンセルとタイムアウトとリクエストスコープの変数を扱う、Google社内で利用が標準化されているパッケージだという事なので、エントリーを翻訳しました。 以下和訳。 Introduction Goサーバーでは、入ってくる各リクエストは専用のgoroutineで処理されます。リクエストハンドラは、データベースやRPCサーバーにアクセスするためにしばしば追加のゴルーチンを開始します。リクエスト上のゴルーチン
Codes Rust. Many Cryptography & Databases. Likes History. Lifts heavy things, puts them down again. Plays the drums. Occasionally makes music. Random Items of Interest polyglot programmer many buzzwords enthusiastic drummer ̶o̶c̶c̶a̶s̶i̶o̶n̶a̶l̶ ex powerlifter older than he seems frequently hilarious (citation needed)
CodeReviewComments から Go コードのレビュー時によくされるコメントについて。 gofmt gofmt またはそのスーパーセットである goimports を実行すること。goimports は gofmt に加えて import 行の修正も行う。 コメント文 http://golang.org/doc/effective_go.html#commentary を参照。宣言に対するコメントは少し冗長に見えるかもしれないけど完全な文にする。そうすれば godoc できれいに整形される。次のように説明するものの名前から始めピリオドで終える。 // A Request represents a request to run a command. type Request struct { ... // Encode writes the JSON encoding of re
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く