って,タイトル見て何だって思うかも知れないけど,
仕様を一部読んだだけで動かしてもいないので,
かじったと言うにはということで.
Go言語の仕様についての詳細は
"The Go Programming Language Specification" を
ちゃんと読んでもらうってことで,
ちょっと覚え書き.
・数値型
整数型や浮動小数点型がC/C++やJavaのように
名前で区別するんじゃなくてサイズをつけている
って言うのは面白いね.
int8/int16/int32/int64
float32/float64
complext64/complex128
って感じで,サイズ拡張もしやすそうだね.
最後のは複素数で,実数部と虚数部がそれぞれ,
float32とfloat64ってこと.
・配列
C/C++やJavaのコードに見慣れたさすらいびとには
見た目に違和感があって微妙な感じだね.
var array [10][5]int32
・slice
良くわからないのが "slice".
どうもサイズ不定で連続領域ってことなのかな.
サイズはmake/newで動的作るみたい.
make([]int32, 100)
new([100]byte)[0:50]
・type
C/C++のtypedefって感じかな.
type Hoge strcut {
a int8
b float32
}
・クラス?
struct + funcでクラスっぽくなるらしいね.
struct Point {
x, y int32
}
メソッド実装は
func (p Point) DoSome() {...}
func (p Point) DoOther() {...}
って感じでレシーバを指定するらしい.
・関数
ちょっとC/C++やJavaなさすらいびとには驚きだったのが,
複数の戻り値.
func Func1(p1, p2 int, p3 string) (string, string) {
return p3[0:p1], p3[p1:p2]
}
例えば,上の関数は次の関数の引数として,
func Func2(s1, s2 string) bool {...}
if Func2(Func1(1, 2, someString)) {
println("OK")
}
ってな感じで使える.
・selector
基本的にはstructやinterfaceのメンバアクセスに
使えるんだけど,特徴が2つほど.
メンバ階層を勝手にたどってくれるってこと.
ポインタかどうかは関係なく"."でOKってこと.
type T1 struct { x int }
type T2 struct { y int }
type T3 struct { z int T1 *T2 }
var a *T3
って時に,
a.x
a.y
a.z
って感じで使える.
・channel
チャネルってことだけど…
chan int32 // 送受信
chan<- int32 // 送信
<-chan int32 // 受信
これって,まだちゃんと読んでいないけど,
SpinのPromelaのチャネルとかと同じものかな?
とりあえずはここまで.