Hello,世界
2012/01/31に神戸GTUG主催のGo言語勉強会に参加しました。
内容は、A Tour of Goの
日本語版を解説して頂きながらGo言語について学びました。
上記の日本語版を開くと画面左側にソース、右側にソースの解説が載っています。
さて、左側のソースをみると、次のようになっています。
1行目はpackage mainとなっていて、5行目のmain()と名前が一致してなければなりません。6行目のPrintlnの最初が大文字となっていまが、これはPublicを意味していて、
小文字だったらprivateです。とセクションごとに説明を頂きましたが、重要そうなところだけメモっときます。
型が変数名の後ろにくる
http://go-tour-jp.appspot.com/#6
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
上記のfunc add(x <font color="red">int</font>, y <font color="red">int</font>) <font color="red">int</font>
の赤文字のように、
型が変数x,y
の後ろに来ているのがわかります。
また、上記のように (x int, y int)
と型がx
とy
の型が同じ場合、 (x, y int)
とまとめることができます。
複数の戻り値を返せる
http://go-tour-jp.appspot.com/#8
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
個人的にはこれに衝撃を受けた。関数は複数の戻り値を返すことができるなんて。。。
変数宣言の方法
http://go-tour-jp.appspot.com/#12
package main
import "fmt"
func main() {
var x, y, z int = 1, 2, 3
c, python, java := true, false, "no!"
fmt.Println(x, y, z, c, python, java)
}
変数を宣言するには、``## Hello,世界
2012/01/31に神戸GTUG主催のGo言語勉強会に参加しました。
内容は、A Tour of Goの
日本語版を解説して頂きながらGo言語について学びました。
上記の日本語版を開くと画面左側にソース、右側にソースの解説が載っています。
さて、左側のソースをみると、次のようになっています。
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
1行目はpackage mainとなっていて、5行目のmain()と名前が一致してなければなりません。6行目のPrintlnの最初が大文字となっていまが、これはPublicを意味していて、
小文字だったらprivateです。とセクションごとに説明を頂きましたが、重要そうなところだけメモっときます。
型が変数名の後ろにくる
http://go-tour-jp.appspot.com/#6
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
上記のfunc add(x <font color="red">int</font>, y <font color="red">int</font>) <font color="red">int</font>
の赤文字のように、
型が変数x,y
の後ろに来ているのがわかります。
また、上記のように (x int, y int)
と型がx
とy
の型が同じ場合、 (x, y int)
とまとめることができます。
複数の戻り値を返せる
http://go-tour-jp.appspot.com/#8
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
個人的にはこれに衝撃を受けた。関数は複数の戻り値を返すことができるなんて。。。
変数宣言の方法
http://go-tour-jp.appspot.com/#12
package main
import "fmt"
func main() {
var x, y, z int = 1, 2, 3
c, python, java := true, false, "no!"
fmt.Println(x, y, z, c, python, java)
}
変数を宣言するには、`` とすると、int
型x
を宣言し、1
で初期化します。
:=
を使用すると、var
を使用せずに宣言できます。x:=1
で先ほどと同じ意味です。
if文の書き方が面白かった
http://go-tour-jp.appspot.com/#21
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
}
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
if
やfor
には()
は付かないというのはすんなり入ったけど、
上記のコードは一目見ただけでは分からなかった。。9行目のとこ。
これは、Pow(x,n)
をv
に代入して、そのv
がlim
より小さかったら、return v
とのこと。
ここで宣言された変数v
は、if
のスコープだけで有効です。12行目のreturn lim
の上でv
を使うことができません。
構造体とポインタ
http://go-tour-jp.appspot.com/#26
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
p := Vertex{1, 2}
q := &p
q.X = 1e9
fmt.Println(p)
}
まず構造体は、5〜8行目ですね。これはX,Y
のフィールドを持つVertex
という名前の構造体を定義しています。
11行目で構造体を1,2で初期化された構造体p
を定義して、p
のアドレスをq
に代入しています。
q.X = 1e9
でq
のアドレスとp
のアドレスは同じですから、p.X
には1e9
が格納されていることになります。
Go言語にアロー演算子がなく、q.X
のq
がポインタであることが分かりにくいため、ポインタであることを意識しておく必要があるとのこと。
MapとSliceは重要
http://go-tour-jp.appspot.com/#31
http://go-tour-jp.appspot.com/#32
MapとSliceは長くなるので、また次回の勉強会のとこにがっつり説明していただけるとのことです。
comments powered by Disqus