• 検索結果がありません。

勉強会 資料 Google Developer Group 京都 KyotoGTUG 20100724

N/A
N/A
Protected

Academic year: 2018

シェア "勉強会 資料 Google Developer Group 京都 KyotoGTUG 20100724"

Copied!
62
0
0

読み込み中.... (全文を見る)

全文

(1)

Go Go language!

有山圭二

(有限会社シーリス 代表)

京都GTUG 勉強会 Jul 24, 2010

(2)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 2

自己紹介 – 有山 圭二 (twitter id: keiji_ariyama)

 大阪のソフトウェア会社、 有限会社シーリス代表。

 手間暇かけてくだらないことをするのが大好きで、仕事の

合間に「僕が死んだら...」「Escape from the KAIGI」等を

開発。フリーソフトウェアとして公開している。

 普段仕事で使用するプログラム言語は、Java, PHP, Perl,

C#, VB.NET。CやC++は、趣味程度にしか使ったことがな

い。

 新しいものに挑戦するときは、気づかないうちに、踏まな

くてもいい地雷を、順番に踏んでいく体質。

(3)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 3

Go言語の登場

2009年11月10日、Google社は新しいプログラム言語

「Go」を公開した。

(4)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 4

なんだこれ

(5)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 5

2007年11月 Android発表

(6)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 6

2008年4月 Google App Engine発表

(7)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 7

2009年11月 Go Language発表

(8)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 8

(9)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 9

Go言語に関する疑問

何に使うの?

なんで今更、新しい言語を作る必要が?

使うと何か良いことがあるの?

これが、今日の本題です

(10)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 10

Agenda

自己紹介

Goに関する疑問

Go言語ってなんだ

対応OS/アーキテクチャ

Goの特徴

Goの目標

インストールからHello World

言語仕様

変数の宣言

変数の型

配列とスライス

分岐構文

繰り返し構文

goroutine

構造体

ポインタ

(11)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 11

Go言語とは

Googleが開発した新しいシステムプログラミング言語

オープンソースで開発

BSDライセンス

コンパイラやツール類は、C言語で開発

(12)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 12

システムプログラミング

 

システムプログラミング(英: System programming)は、システムソフトウェアの

プログラミングを指す。

 アプリケーションソフトウェアのプログラミングとの主な違いは、ハードウェアとの

関わりが大きい点である。他にも以下のような特徴がある。

プログラマはハードウェアやその他のシステムの特徴を前提として、それらを

利用してコードを作成する。例えば、そのハードウェアで効率がよいとわかっ

ているアルゴリズムを採用したりする。

以下のような低レベルなプログラミング言語が使われることが多い。

リソースに制限のある環境で動作可能な言語を使う。

効率がよく、実行時オーバーヘッドの小さい言語を使う。

ランタイムライブラリが非常に小さいか、全くライブラリを持たない言語を使

う。

メモリアクセスや制御構造を直接制御できる。

プログラムの一部を直接アセンブリ言語で書くことが出来る。

Wikipedia より)

(13)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 13

なぜ、新しい言語を作ったのか?

既存のシステムプログラミング言語と、環境に不満があったか

現在、主流の言語には、

効率的なコンパイル

効率的な実行

容易なプログラミング

この三つを全て満たすものがない

開発者は、安全性や効率より、より容易にプログラムが出来る

PythonやJavaScriptのような動的型付け言語を選択している

効率的なコンパイル

容易なプログラミング 効率的な実行

(14)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 14

Goの目標

PHPやPython等、動的型付けのインタプリタ言語のように

プログラミングが容易

CやC++等、静的型付け言語の安全性と効率性

ネットワーク接続、マルチコア・コンピューティングを

サポート

単体のコンピュータ上で、大きな実行ファイルが数秒でビルド

できる速度

軽量な型システム

並列処理のサポート、および高速で効率的な自動ガベージコレ

クション

システムプログラミング言語を作る

(15)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 15

Goが影響を受けた言語

C(基本的な文法)

Pascal/Modula/Oberon (宣言/パッケージ)

Newsqueak/Limbo (並列処理)

(16)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 16

インストール

(17)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 17

対応OS/アーキテクチャ

OS

darwin

freebsd

linux

nacl

アーキテクチャ

amd64 (a.k.a x86-64)

386 (a.k.a x86, x86-32)

arm

(18)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 18

Windows...

2010年7月時点で、Windowsのサポートは無し

(19)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 19

Cygwin で動くか実験

インストール

bison

make

gcc

ed

gawk

Mercurial

(20)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 20

無理だった...

ビルド時にERROR 発生

(21)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 21

ERRORの内容で検索してみた

golang-nuts

I

nstalling Go "make all" error

http://groups.google.co.kr/group/golang-nuts/browse_thread/thread/1e43f088d360cf75

You can't run Go under Cygwin this way.

「Cygwinでは動かないよ」

Windows用のバイナリも出てます(サードパーティ)

http://code.google.com/p/go/wiki/WindowsPort

(22)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 22

Linux(CentOS amd64) にインストール

$ yum install bison gcc make ed gawk

$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

$ cd $GOROOT/src

$ ./all.bash

ツール類のインストール

$ export GOROOT=$HOME/go

$ export GOOS=linux

$ export GOARCH=amd64 環境変数の設定

$ rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

$ yum install '*mercurial*' - 1.4.1 Mercurialのインストール

ソースのチェックアウトとインストール

(23)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 23

インストール完了

(24)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 24

Hello World

package main import fmt "fmt" func main() {

fmt.Printf("Hello, world\n") }

$ 6g hello.go

$ 6l hello.6

$ ./6.out Hello, world 実行

(25)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 25

Go の基礎

(26)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 26

Hello World

エントリポイントは、mainパッケージのmain関数

package main import fmt "fmt" func main() {

fmt.Printf("Hello, world\n") }

(27)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 27

セミコロンがない!

ステートメントの末尾にセミコロン(;)がない

セミコロンは、パーザーの都合であって、開発者のためではない

(Language Design FAQ - Why are there braces but no semicolons?)

一行に複数のステートメントを記述する場合は、セミコロンを

記述する

package main import fmt "fmt" func main() {

fmt.Printf("Hello, world\n"); fmt.Printf("Hello, world 2\n") }

(28)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 28

コメント

C++のコメントと同様

// …

/* … */

package main import fmt "fmt" /*

メインエントリポイント

*/

func main() {

// 文字列を表示

fmt.Printf("Hello, world\n") }

(29)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 29

変数

var キーワードのあと、「変数名」、「型名」と続く

package main import fmt "fmt" func main() {

var num int = 0

fmt.Printf("Hello, world %d\n", num) }

num := 0

型名を省略可能

(30)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 30

bool ブール型 ( true or false ) uint8 符号無し8ビット (0 to 255) uint16 符号無し16ビット (0 to 65535)

uint32 符号無し32ビット (0 to 4294967295)

uint64 符号無し64ビット (0 to 18446744073709551615) int8 符号付き8ビット (-128 to 127)

int16 符号付き16ビット (-32768 to 32767)

int32 符号付き32ビット (-2147483648 to 2147483647)

int64 符号付き64ビット (-9223372036854775808 to 9223372036854775807) float32 IEEE-754 32ビット浮動小数点

float64 IEEE-754 64ビット浮動小数点 byte uint8の別名

The Go Programming Language Specification - Types

http://golang.org/doc/go_spec.html#Types

(31)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 31

int長の確認

package main import fmt "fmt" func main() {

var a1 uint64 = 1<<64 -1 var a2 uint32 = 1<<32 -1 var a3 uint = 1<<32 -1

fmt.Printf("unsigned int64 = %v\n", a1) fmt.Printf("unsigned int32 = %v\n", a2) fmt.Printf("unsigned int = %v\n", a3)

}

$ ./6.out

unsigned int64 = 18446744073709551615 unsigned int32 = 4294967295

unsigned int = 4294967295 実行

(32)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 32

int長の確認

package main import fmt "fmt" func main() {

var a1 uint64 = 1<<64 -1 var a2 uint32 = 1<<32 -1 var a3 uint = 1<<64 -1

fmt.Printf("unsigned int64 = %v\n", a1) fmt.Printf("unsigned int32 = %v\n", a2) fmt.Printf("unsigned int = %v\n", a3)

}

コンパイルエラーが発生する

ビット長を指定しないint型は32bit

$ 6g int64.go

int64.go:9: constant 18446744073709551615 overflows uint 実行

(33)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 33

暗黙 の型変換

package main import fmt "fmt" func main() {

var num1 uint16 = 0xffff var num2 uint32 = 0x0 num2 = num1

fmt.Printf("%v", num2) }

コンパイルエラーが発生する

$ 6g implicit_numeric_conversion.go

implicit_numeric_conversion.go:10: cannot use num1 (type uint16) as type uint32 in assignment

実行

(34)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 34

Goには、暗黙の型変換が存在しない

変換される値を開発者自身が知らなければならず、混乱を生む

コンパイラの実装が困難

マシンアーキテクチャの違いを吸収(ポータビリティを維持)する

実装にしなければならない

(35)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 35

int型の変換

package main import fmt "fmt" func main() {

var num1 uint = 0xffff var num2 uint32 = 0 num2 = num1

fmt.Printf("%v", num2) }

uintと、uint32。

値の取り得る範囲は同じでも、違う型として扱われる

$ 6g implicit_numeric_conversion.go

implicit_numeric_conversion.go:10: cannot use num1 (type uint) as type uint32 in assignment

実行

(36)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 36

示的な型変換

package main import fmt "fmt" func main() {

var num1 uint = 0xffff var num2 uint32 = 0x0 num2 = uint32(num1) fmt.Printf("%v", num2) }

$ 6g explicit_numeric_conversion.go

$ 6l explicit_numeric_conversion.6

$ ./a.out 65535 実行

(37)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 37

配 列/スライス/マップ/構造体

(38)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 38

package main import fmt "fmt" func main() {

var arra []int = []int{0, 1, 2}

var arra2 []int = make([]int, 100) fmt.Printf("%d\n", len(arra))

fmt.Printf("%d\n", len(arra2)) arra2[10] = 20

fmt.Printf("%d\n", arra2[10]) }

$ 6g array_test.go

$ 6l array_test.6

$ ./a.out 3

100 20 実行

角括弧[]に続いて型を宣言

配列個数を指定しない場合

make(配列の型, 個数)

(39)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 39

スライス

package main import fmt "fmt" func main() {

var arra2 []int = make([]int, 100) var slice2 []int = arra2[0:32]

arra2[10] = 20

fmt.Printf("%d\n", len(arra2))

fmt.Printf("arra2[10] %d\n", arra2[10]) fmt.Printf("%d\n", len(slice2))

fmt.Printf("slice2[10] %d\n", slice2[10]) }

$ 6g slice_test.go

$ 6l slice_test.6

$ ./a.out 100

arra2[10] 20 32

slice2[10] 20 実行

配列の一部を参照する

(40)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 40

マップ

package main import fmt "fmt" func main() {

var timeZone = map[string] int { "UTC": 0*60*60,

"EST": -5*60*60, "CST": -6*60*60, "MST": -7*60*60, "PST": -8*60*60, "JST": 9*60*60, }

var second int = 0 var ok bool = false

second, ok := timeZone[“JST”] fmt.Printf("JST %d\n", second) }

$ 6g map_test.go

$ 6l map_test.6

$ ./a.out

JST 32400 true 実行

マップ

timeZone[文字列]で参照

キーが存在しない場合は、

2番目の戻り値(ok)がfalse

になる

(41)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 41

構造体

package main import fmt "fmt" type person struct { name string point int }

func main() {

p := new(person) p.name = "test" p.point = 100

fmt.Printf("%s %d\n", p.name, p.point) }

$ 6g struct_test.go

$ 6l struct_test.6

$ ./a.out Test 100 実行

newキーワードで、

構造体をインスタンス化す

配列がmakeだった事に

注意

(42)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 42

ポインタ

package main import fmt "fmt" func main() {

var str string = "ok" var pt *string = &str

fmt.Printf("value is %s", *pt) }

$ ./6.out Value is ok 実行

ポインタが使える

(43)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 43

ポインタ

package main import fmt "fmt" func main() {

var str string = "ok" var pt *string = &str pt++

fmt.Printf("value is %s", *pt) }

$ 6g pointer.go

pointer.go:9: invalid operation: pt += 1 (type *string + int) 実行

Goは、ポインタの演算は

出来ない

(44)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 44

Goのメモリ管理

Garbage Collectionでメモリを回収

並列処理に最適化するためには、メモリ管理を自動化する

アプローチが適していると判断

現在はMark and Sweep方式だが、より効率よく、効果が高

いGC方式へ置き換え作業中

(45)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 45

制御文

(46)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 46

分岐 (if else)

package main import fmt "fmt" func main() {

var num int = 5 // var num int = 3

If num == 5 {

fmt.Printf("number is 5\n") } else if num == 3 {

fmt.Printf(“number is 3\n") } else {

fmt.Printf(“number is unknown\n") }

}

$ 6g if_test.go

$ 6l if_test.6

$ ./a.out number is 5 実行

(47)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 47

り返し(for)

package main import fmt "fmt" func main() {

for i := 0; i < 100; i++ {

fmt.Printf("loop %d\n", i) }

}

$ 6g for_test.go

$ 6l for_test.6

$ ./a.out loop 0 ....

loop 99 実行

while や do while構文は

Goにはない

(48)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 48

選択 (switch)

package main import fmt "fmt" func main() {

var num int = 1 switch num {

case 1: fmt.Printf(“case 1\n") case 2: fmt.Printf("case 2\n")

case 3,4,5,6,7: fmt.Printf("case > 3\n") default: fmt.Printf(“case unknown\n”) }

}

$ 6g switch_test.go

$ 6l switch_test.6

$ ./a.out 19

実行

(49)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 49

関数(func)

package main import fmt "fmt" func main() {

var num int = sum(7, 12) fmt.Printf("%d\n", num) }

func sum(a int, b int) int { return a+b

}

$ 6g func_test.go

$ 6l func_test.6

$ ./a.out 19

実行

func キーワードの後に

関数名 sum

引数 (a int, b int)

戻り値 int

の順で記述する

(50)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 50

可変の引数

package main import fmt "fmt" func main() {

var num int = sum(7, 12, 2, 6) fmt.Printf("%d\n", num)

}

func sum( values ... int) int { var result int = 0;

for i := 0 ; i < len(values); i++ { result += values[i]

}

return result; }

$ 6g func_multi_args_test.go

$ 6l func_multi_args_test.6

$ ./a.out 27

実行

引数を ... と指定すると、

数を特定しない引数となる

関数内からは、

配列としてアクセスする

(51)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 51

数の値を返す

package main import fmt "fmt" func main() {

max, min := minMax(7, 12, 2, 6) fmt.Printf("%d %d\n", max, min) }

func minMax(... int) int, int {

var maxFlg, minFlg bool = false var max, min int = 0

for i := 0 ; i < len(values); i++ { If maxFlg == false {

max = values[i] maxFlg = true }

If minFlg == false { min = values[i] minFlg = true }

If max < values[i] max = values[i] If min > values[i] min = values[i] }

return (max, min); }

$ 6g func_multi_returns_test.go

$ 6l func_multi_returns_test.6

$ ./a.out 2 12 実行

戻り値をカンマで区切って

複数指定可能

関数の呼び出し元では、

受側の変数をカンマで区切

(52)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 52

列処理

(53)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 53

goroutine

並列処理を容易に行うための

構文

func() { … } 内の処理を並列

で実行する

go sum(...)のように、関数も

実行可能

package main import fmt "fmt" import time "time" func main() {

var num uint = 0 var num2 uint = 0 go func() {

for i := 0; i < 100; i++ { num++

time.Sleep(1000*1000*1000) }

}()

go func() {

for i := 0; i < 200; i++ { num2++

time.Sleep(2*1000*1000*1000) }

}()

for ; (num < 100 || num2 < 200); {

fmt.Printf("%d %d\n", num, num2) time.Sleep(1000*1000*1000) }

}

(54)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 54

チャンネル

goroutine と値を共有したり、goroutine同士、または

goroutineとメインルーチンが同期をする仕組み

メイン ルーチン

goroutine チャンネル

メインルーチンはチャンネルに値を入力

goroutineはチャンネルから値を取り出し

値がなければ、スレッドがブロックされ、チャンネルに値が

入力されるまで待機する(同期)

(55)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 55

その他

(56)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 56

別子はUnicode

日本語の変数・関数名も可能

package main import fmt "fmt" func main() {

var あいう string = "unicode test" var num int = 加算(7, 12)

fmt.Printf("%v\n", あいう) fmt.Printf("%d\n", num) }

func 加算(a int, b int) int { return a+b

}

(57)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 57

変数や関数のエクスポート

識別子の最初の1文字が大文字の場合、パッケージ外に

エクスポートする

日本語等、他の言語の場合は対応出来ない

“X日本語”のようにする解決策もあるが、満足しないことは

明らか

別の選択肢を考えている

On a related note, since an exported identifier must begin with an upper-case letter, identifiers created from “letters” in some languages can, by definition, not be

exported. For now the only solution is to use something like X日本語, which is clearly unsatisfactory; we are considering other options.

Language Design FAQ – What's up with Unicode identifiers? http://golang.org/doc/go_lang_faq.html#unicode_identifiers

(58)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 58

例外

try-catch-finally 構文は、コードが読みにくくなると考えてい

るのでサポートしない

組み込み関数 signal と recover を使ってエラーを処理する

(59)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 59

まとめ - Goの現状

現状でGoは、未成熟な言語

最終的な利用ターゲットはシステム・プログラマだが、信頼性が重視さ

れるシステム開発に採用するには、十分ではない

冒険的なユーザーが利用して、意見を出し合って成熟させていく余地が

ある(そのためのオープンソース!)

Go単体での開発は現実的ではない。CやC++で開発された過去

の資産の呪縛から逃れることは出来ないと思われる

統一された言語仕様。ネットワーク、マルチプロセッサ、

並列処理への対応、統合されたライブラリ環境が、Goの強み

If you try to write Java programs in Go. you may become

frustrated. If you write Go programs in Go. you will be

much more productive.

(Google I/O 2010)

(60)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 60

まとめ - Goの将来

将来的、現在よりも効率的で、遅延の少ないGCの実装が期待

される

現在のGo言語は、新規開発はもちろん、既存のソフトウェア

資産と組み合わせて用いる強力な「ツール」であり、最終的に

は、

効率的なコンパイル

効率的な実行

開発の容易さ

最もバランスの取れたシステムプログラミング言語となり得る

(61)

Copyright C-LIS CO., LTD. 2010

京都GTUG Go言語勉強会 Jul 24, 2010 61

ご静聴 ありがとうございました

本資料の内容の一部は、Googleが作成、提供しているコンテンツを複製したもので、 クリエイティブコモンズの表示 3.0 ライセンスに記載の条件に従って使用しています。 本資料は、有限会社シーリスの著作物であり、

クリエイティブコモンズの表示-非営利-継承 3.0 Unported ライセンスの元で公開しています。

(62)

京都GTUG Go言語勉強会 Jul 24, 2010 Copyright C-LIS CO., LTD. 2010 62

参考資料

The Go Programming Language

http://golang.org

Go programming - Tech Talks - Rob Pike, Russ Cox

http://code.google.com/intl/ja/events/io/2010/sessions/go-programming.html

Google's Go Guide

http://golang.jp/

参照

関連したドキュメント

This conjecture is not solved yet, and a good direction to solve it should be to build first a Quillen model structure on the category of weak ω-groupoids in the sense of

where it does not matter). 10.4] for a discussion of the relation between sequences of this form and elliptic divisibility sequences defined via a bilinear recurrence or the sequence

Our main result below gives a new upper bound that, for large n, is better than all previous bounds..

The linearized parabolic problem is treated using maximal regular- ity in analytic semigroup theory, higher order elliptic a priori estimates and simultaneous continuity in

(4) It is immediate from the definition (2) that our sequence A is equal to its curling number transform, and in fact is the unique sequence with this property!. 2 The

It provides a tool to prove tightness and conver- gence of some random elements in L 2 (0, 1), which is particularly well adapted to the treatment of the Donsker functions. This

Theorem 3.7 gives some criteria of completeness of the canonical family of G-invariant functions related to an action of a Lie group G on a bi-Poisson manifold M being Hamiltonian

Khovanov associated to each local move on a link diagram a homomorphism between the homology groups of its source and target diagrams.. In this section we describe how this