Go言語勉強会に行って来ました。

Posted by kwmt on Tue, Jan 31, 2012

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)と型がxyの型が同じ場合、 (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)と型がxyの型が同じ場合、 (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)
}

変数を宣言するには、`` とすると、intxを宣言し、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),
	)
}

ifforには()は付かないというのはすんなり入ったけど、

上記のコードは一目見ただけでは分からなかった。。9行目のとこ。

これは、Pow(x,n)vに代入して、そのvlimより小さかったら、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 = 1e9qのアドレスとpのアドレスは同じですから、p.Xには1e9が格納されていることになります。

Go言語にアロー演算子がなく、q.Xqがポインタであることが分かりにくいため、ポインタであることを意識しておく必要があるとのこと。

MapとSliceは重要

http://go-tour-jp.appspot.com/#31

http://go-tour-jp.appspot.com/#32

MapとSliceは長くなるので、また次回の勉強会のとこにがっつり説明していただけるとのことです。



comments powered by Disqus