【Go】 一舐め? | さすらいびとの徒然漂流記

さすらいびとの徒然漂流記

ふらふら漂流するさすらいびとのように,色々な話題についてお気楽極楽,徒然なるままに…

って,タイトル見て何だって思うかも知れないけど,

仕様を一部読んだだけで動かしてもいないので,

かじったと言うにはということで.


Go言語の仕様についての詳細は

"The Go Programming Language Specification"

ちゃんと読んでもらうってことで,

ちょっと覚え書き.



・数値型

整数型や浮動小数点型がC/C++やJavaのように

名前で区別するんじゃなくてサイズをつけている

って言うのは面白いね.


int8/int16/int32/int64

float32/float64

complext64/complex128


って感じで,サイズ拡張もしやすそうだね.

最後のは複素数で,実数部と虚数部がそれぞれ,

float32float64ってこと.


・配列

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のチャネルとかと同じものかな?



とりあえずはここまで.