Go言語:数値型の幅

フィボナッチなサンプルを写経して動かしていた時にやっと理解した。 Go言語の数値型(の整数) intはジェネリックであり、実行環境に依存したサイズ(値の扱える範囲)を持つ。 Goプログラミング言語の情報サイト golang.jp 数値型 範囲を超えた場合は、オ…

Go言語:Channesの制限

Channelsの話 Channelsはバッファにすることができる。 容量を指定することが可能。 make関数の第2引数に指定。 capとlenの実行が可能。 容量cap以上にはバッファ(値の送信)できない。ブロックする。 バッファサイズlen以上には取り出し(値の受信)できな…

Go言語:Goroutines

Goroutinesの話 goroutine (ゴルーチン)は、Goのランタイムに管理される軽量なスレッドです。 go 関数呼び出しで新しいスレッドで処理される。 プログラムは、スレッドの処理の終了を待つわけではない。 新しいスレッドで処理が始まるのに(ノンブロックの状…

Go言語:HTTPサーバーのコーディングをしてみる

↓のslideshareのコードを写経していく。 Go言語によるwebアプリの作り方 from Yasutaka Kawamoto 写経させていただきました。資料ありがとうございます! とりあえずコーディング HTTPサーバーの写経// http://www.slideshare.net/yasi_life/ ... 構成 GOP…

Go言語:HTTPサーバーの基本

HTTPサーバーの話 net/httpをimportしてちょろちょろするくらいで簡単にサーバーを立ち上げられる。 サーバーの処理はinterfaceで定義された関数に実装していく。 Handleでルーティング処理と、ルーティングさせるオブジェクトの設定。 ServeHTTPを実装する…

このコンピュータ書がすごい!2015年版 の勝手なまとめ

このコンピュータ書がすごい!2015年版にいってきたので、勝手なまとめをします。何年かぶりの参加です。 19時30分スタート。(時間経過メモっておくと面白そうなので。。。) (メモは、自分がメモりたかったものだけです。高橋さんや各出版社さんの表現か…

Go言語:iota

interfaceを理解しようと調べていると、なぜかちょいちょいiotaを使った例が出てくるので、まずはiotaについて調べる。 Go言語の日本語サイトの説明によると Go言語での定数の列挙にはiota列挙子を使います。iotaは式の一部となって、かつその式は暗黙的に繰…

Go言語:メソッド定義

メソッドの話 Go言語にはクラスはない。 代わりに、構造体にメソッドを定義することで、同様のことが可能。 構造体以外にも、任意の型に定義することも可能。 他のパッケージの構造体へのメソッド定義は不可。 基本型への直接のメソッド定義は不可。 メソッ…

Go言語:switch

switchの話。 ifステートメントと同じで、条件式にカッコは不要。 ifステートメントと同じで、変数のスコープを持つ。 swtichステートメントの条件式は省略することが可能。 rubyのcase文と同じような書き方が可能。 switch caseには、数値以外に、文字列な…

Go言語:関数(クロージャ)

クロージャな話 Go言語の関数は値として扱える。 Go言語の関数はクロージャとして振る舞う。 変数のスコープもクロージャのそれ。 試してみた クロージャのスコープ スコープは他の言語のそれと同じ。 ** 1 1 1 ** 1 1 1 ** 2 1 2 ** 2 2 4 ** 3 1 3 ** 3 3 …

Go言語:Map

Mapの話 mapの型の指定は、キーと値の型をそれぞれ指定する。 map[キーの型]値の型という形式。 map[string]int みたいな。 作成するには、make関数、もしくは初期化子を使う。 make関数、空の初期化子で作ったmapは、空。 初期化前のmapは、nil nilのmapに…

Go言語:スライス、ループの演習から

演習の内容から(メモ的な) Go言語で面白いと思うこと リモートサーバーのライブラリを簡単にインポートできる。 import "code.google.com/p/go-tour/pic" 関数そのものを引数に渡すことができる。 func main() { pic.Show(Pic) } 渡された側の実装がこちら…

Go言語:for-rangeループ

for-rangeループの話 for-rangeループは、Slice(とかMap)の要素を簡単にループ処理する。 Go1.4から、インデックス/値を変数に代入する文法を省略可能。 Sliceの要素数分だけのループ処理を簡単にかける。 インデックスの値を使わずに値だけを使う場合、…

Go言語:スライス

スライスの話(go-tourは、なぜかArrayをとばしてSliceの話をする) SliceとArrayは異なる。こちらを参照してお勉強。 Go言語のArrayとSliceについて - done is better than perfect あとはこちらのSlideShareを参照する。 Go言語のスライスを理解しよう fro…

Go言語:構造体とポインタ

Go言語:構造体 - sugilogのブログ のエントリーで、ポインタの部分の理解が曖昧だったので、復習。 参照したのは、こちら(M.Hiroi's Home Page / お気楽 Go 言語プログラミング入門)の記事 まずCのポインタのの利点 (1) 「参照呼び (call by reference) …

Go言語:構造体

構造体(Struct)の話 structはフィールドの集まり。 フィールドへは、.(ドット)でアクセスする。 typeステートメントで定義する。 ポインタ演算はないが、ポインタを通した間接的なアクセスは可能。 初期化のための値の指定は、ブレース{}内で指定する。 …

Go言語:ニュートン法を使った演算の練習

練習実装 この問題では、ニュートン法は、 開始点 z を選び、以下の式を繰り返すことによって、 Sqrt(x) を近似します。 最初は、その計算式を10回だけ繰り返し、 x を(1, 2, 3, ...)と様々な値に対する結果がどれだけ正解値に近いかを確認してみてください…

Go言語:条件分岐:if

ifの話 if、else、else ifで条件分岐を書く。 forと同じで、条件式はカッコが不要。 forの条件式の初期化と同じようなことができる。 if ~ else if ~ else内が1つの狭いスコープになっていて、変数はその中でのみ有効。 スコープの外から変数を参照すると、u…

Go言語:繰り返し

Forの話 Go言語の繰り返しは、'for`のみ。 条件の書き方で、rubyでいうところの、whileやloopみたいなことを書ける。 forステートメントの条件式に、カッコは不要 というか、書けない。 繰り返しを抜けるときはbreak パターンA for i := 0; i < 10; i++ { } …

Go言語:定数

定数の話 定数は、constキーワードを使って宣言する。 型の指定は不要だが、:=による代入はできない。 指定できるが、数値定数みたいに扱うために、基本的に行わない? 定数の種類は、character、string、'boolean、numeric` numeric数値定数は、指定がない…

Go言語:変数

変数の話 varステートメントで変数を宣言する。 変数名 型の形で宣言する。 カンマで区切って羅列すると、複数の変数を宣言できる。 varステートメントで初期化することもできる。 初期化子を与えた場合は、型の指定が不要。 変数の型が、初期化子の型になる…

Go言語:関数

関数の話 関数は、 0個以上の引数をとる。 同じ型の引数の場合は、型の指定をまとめられる。 変数の宣言と同じ。 0個以上の返り値を返す。 返り値がある場合には、返り値の型を指定する、とも言える。 Javaなどでいうところのvoidの場合は、返り値の型の指定…

Go言語:エクスポートされる名前

エクスポートされる名前の話 インポートステートメントで指定したパッケージについて エクスポートされる名前(関数名など)は、エクスポートされるパッケージ側で決まる。 名前の最初が大文字で始まる場合、エクスポートされる。 ためしに パッケージ:エク…

Go言語:パッケージのalias

importするパッケージのalias(っぽいやつ)。 import時に別名(alias)を指定することができる。 正確にはaliasではない。 もともとつけられるはずの名前(別名を使わなければ使えたはずの名前)は使えない。 パッケージ:alias ためしに、mypackageでアク…

Go言語:自作パッケージ

自作パッケージの作成と実行 ディレクトリの構造に従う。 環境変数を指定する。 つくってみた 自作パッケージ:main 自作パッケージ:mypackage1 自作パッケージ:mypackage2 自作パッケージのディレクトリ構造 $GOPATH/src以下に自作パッケージを作成する。…

Go言語:パッケージ

パッケージについての話 Goのプログラムはパッケージで構成されている。 プログラムの処理は、mainパッケージ内で始まる。 mainプログラムで最初にcallされるのは、main関数。 他のパッケージの実装は、importで取り込む。 importで指定したパスの最後の要素…

Go言語の学習

しばらく、Go言語を学習していきます。 間違った内容があったら、ごめんなさい とりあえずは、プログラミング言語Goツアー ( Go言語基礎文法最速マスター )で勉強します。 おすすめのGo言語の学習のための書籍があったら、ぜひ教えてください。きっと買いま…

ActiveRecordHandlerSocketなんていうgemを作っています。

業務的に必要に迫られて、memcachedとかRedisとかいろいろ触ってたんですが、HandlerSocketに行き着きました。 んで、せっかくActiveRecordのRDBをMySQL使ってて、HandlerSocketも使うんなら、うまくActiveRecord的な感じでHandlerSocketを使えたらいいよね…

VMware Fusion4以降 のポートフォワーディングまわり のまとめ

結構昔に書いたブログから自分の中で情報をアップデートできたので、まとめる。 説明内容にインフラ的に正しくない説明が混ざるかもしれないが、ご容赦をm( )m 説明は、ホスト:Mac、仮想マシン:Linux、の前提。 at your own risk でお願いします。 2014/04…

エラー処理の方法論

以前自分で実装していたときにいろいろやっていたので、まとめておく。 module Hoge class HogeError < StandardError end def self.raise_with_inherit some_process "hack" rescue ArgumentError => e error = HogeError.new e.message error.set_backtrac…