タグ

ブックマーク / golang.rdy.jp (5)

  • Go初心者が気を付けること

    Go初心者がやってしまいがちなやらない方がいいことを書き出してみました。 情報検索や環境構築 golang.jpを見に行ってしまう Golang(ごーらんぐ)と呼んでしまう(by hogedigo) depが最新推奨のパッケージマネージャだと勘違いする(Go標準の「go mod」を使おう) 「GO???」環境変数を理解せずに設定しまくる(わからない場合は一切設定しないのが正しい) しょっぱなからgvm,gobrew,goenvなどのマルチバージョンのマネージャを入れようとしてエディタ連携環境構築に失敗する (複数バージョンのGoの運用は既に標準のGoだけでできるようになっている) エディタにgoimportsやgolintを設定し忘れる OSのパッケージマネージャまかせで古いGoやgccgoをインストールしてしまう エラーハンドリング周り err変数名のバリエーションを増やしすぎる(ほとん

  • Goとツールでジェネリクス

    Goの言語仕様にジェネリクスそのものはありません。 Go2でなにかしらの支援が入るかもしれませんが、 その仕様の落とし所はまだまだ定まってはいないようです。 Go1.4にて言語仕様ではなくツールチェインでコードを生成するための 機能「go-generate」が追加されました。 この機能はアセットの埋め込みやバージョン情報生成のほかジェネリクスも実現できます。 「go-generate」を使ってエレガントにジェネリクスできる様にするgennyというツールを紹介します。 go-generate コーディングとビルドとの間に行う「何らかの処理」を定義できます。 「何らかの処理」はただの1行のシェルコマンドラインです。 go-generateは指定した パッケージの中で「何らかの処理」=コマンドラインを起動するだけの機能です。 Makefileでやってもいい様な気がしますが、以下の2つの支援機能が

  • Goのアンチパターン

    Go書いててなんとなく見えてきた Goでやっちゃいけないパターン WAF導入してらくらくWebアプリ WAF自体が現在群雄割拠状態。 WAF毎にハンドラインターフェースが違うので既存コードつなぐにはラッパーが必要。 どのWAFもLL言語に比べるとまだまだフィーチャーの網羅範囲が狭い。 なのでもちろんLL言語ほど楽には書けないことが多い。 リフレクション使いまくりでトータル性能はLL言語並みに遅いのもある。 Go1.7のcontextパッケージの導入で標準のHTTPハンドラが復権する可能性があり更に荒れる予想。 追記: 楽できるのを期待してWAFを導入するの「やっちゃいけない」とまでは言い過ぎだったかもしれないけれど例のsqlでPrepareを正しく使えていないで性能出なかった件とか、当面WAFを使うなら自分で概ね中身を理解して使う覚悟が必要。 構造体メソッドにロジックを詰め込む Goの思想

  • GopherJSの紹介

    Javascriptを書きたくないでござる!な人向け。 GopherJSってなに? Goの記述を100%Javascriptに変換してくれるツール。 サイト: http://www.gopherjs.org GopherJSの特徴 pure-GoなコードをJSの世界で動くように変換する。 goroutineやchanも論理的に動作するように変換。 外部バイナリ(.soなど)への依存のある実装の変換はできません。 CGOももちろんNG。 オンメモリ操作のパッケージなどは100%動く。 jsアーキテクチャとしてビルドされ、GOPATHを既存のものと共存可能。 GoGopherJS両対応のパッケージも増えてきた。 GopherJS対応ライブラリ honnef.co/go/js/dom github.com/goxjs/gl github.com/goxjs/glfw github.com/go

    GopherJSの紹介
  • Goで読み上げチャットボットを作ってみた。。

    Goで読み上げチャットボットを作ってみた。。 By nobonobo December 8, 2013 mattnさんのgo-xmpp使ったらあっさり作れた。 スピーチエンジンはOSX内蔵のものかGoogleのものを選べるようにしてみた。 ユーザー名やパスワードを指定して起動するとチャットメッセージを受け取るとそれをしゃべります。 動作に必要なもの go get github.com/mattn/go-xmpp soxのインストールまたはOS-Xのスピーチボイスにkyokoを追加。 ソースコード package main import ( "bufio" "flag" "fmt" "github.com/mattn/go-xmpp" "io" "log" "net/http" "net/url" "os" "os/exec" "strings" ) type Speaker interfa

  • 1