for loop
• Cݴޠ
• Go
for (i = 0; i < sizeof(array)/sizeof(array[0]); i++)
for i, v := range array {}
Slide 15
Slide 15 text
switch
• GoͰswitchͷcaseʹifͱಉ༷ҙͷ݅ࣜΛॻ͘
͜ͱ͕Ͱ͖Δɻ
• CݴޠͰɺఆͷΈ
a := 100
switch {
case a > 80:
fmt.Println("over 80")
default:
fmt.Println("under 80")
}
Slide 16
Slide 16 text
Scope
• for
• if
// Cݴޠ(C89)
int i;
for (i = 0; i < 10; i++ ) {}
// Go
for i := 0; i < 10; i++ {}
// Cݴޠ
err = funcX()
if (err < 0) {}
// είʔϓ͕࿙ΕΔ
// Go
if err := funcX(); err != nil {
// errͷείʔϓ͕ด͡Δ
}
Slide 17
Slide 17 text
Zero initialization
• Cݴޠ
• ؔͷϩʔΧϧมɹෆఆ
• άϩʔόϧม 0
• staticม 0
• Go
• ͯ͢θϩॳظԽ
ϝϞϦΞυϨεૢ࡞
• ੬ऑੑͷݪҼ
• ʑͷ੬ऑੑΛੜΈग़͖ͯͨ͠ɻࠓੜΈग़͠ଓ͚͍ͯΔɻ
• ্هͷΑ͏ʹsize͕ݻఆͳΒϛεগͳ͍͕ɺύέοτΛύʔεͯ͠αΠ
ζΛऔಘ͢Δ߹ͳͲةݥɻ
• ύέοτ͕ૹ͖ͬͯͨαΠζΛ৴༻͍͚ͯ͠ͳ͍ɻ
int a[5];
int b[10];
int *p = &a;
// b͔Βaʹ10byteίϐʔɻ
// όοϑΝΦʔόʔϑϩʔ
memcpy(a, b, sizeof(b))
Slide 29
Slide 29 text
ࡾ߲ԋࢉࢠ
• if จ͕1ߦʹͳΔ
• ࡾ߲ԋࢉࢠগ͠ಡΈͮΒ͍
• GoͰࡾ߲ԋࢉࢠআ
• ifͰΑ͠ɹ
int a = (x > 1) ? 10 : 5
var a int
if x > 1 {
a = 10
} else {
a = 5
}
Slide 30
Slide 30 text
Cݴޠͷ҉తܕม
• ܕ͕ҟͳΔͷൺֱ
// Cݴޠ
int a = -1;
unsigned int b = 1;
if (a < b) {
printf("a < b");
} else {
printf("a > b");
}
// Go
var a int = -1
var b uint = 1
if a < b {
fmt.Println("a < b")
} else {
fmt.Println("a > b")
}
Slide 31
Slide 31 text
Cݴޠͷ҉తܕม
• Cݴޠ : ූ߸ແ͠ܕΛ࣋ͭΦϖϥϯυ͕ɺଞํͷΦϖϥϯυͷม
ͷॱҐΑΓߴ͍ຢ͍͠ॱҐΛͭͳΒɺූ߸͖ܕΛͭΦϖ
ϥϯυΛɺූ߸ແ͠ܕΛͭΦϖϥϯυͷܕʹม͢Δɻ
• Go : ҉తܕมͳ͍ɻܕ͕ҟͳΔͷಉ࢜ͷԋࢉίϯύΠϧΤϥʔ
// Cݴޠ
int a = -1;
unsigned int b = 1;
// int a = -1ɺ
// unsigned intͷ4,294,967,295
// ʹม͞ΕΔ
if (a < b) {
printf("a < b");
} else {
printf("a > b");
}
// ग़ྗ݁Ռ a > b
// Go
var a int = -1
var b uint = 1
if a < b {
fmt.Println("a < b")
} else {
fmt.Println("a > b")
}
// main.go:10:
// invalid operation: a < b
// (mismatched types int and uint)
Slide 32
Slide 32 text
֦ு
• Cݴޠͷ֦ு
• ܭࢉ్தͷ͕Φʔόʔϑϩʔ͢Δ͜ͱͰࢉज़Τ
ϥʔ͕ى͜ΔͷΛ͙
short a = 32767;ɹ// shortͷ࠷େ
short b = 1;
int c = a + b;
// ্هͷߦҎԼͷΑ͏ʹॲཧ͞Ε·͢ɻ
// int c = (int)a + (int)b
short d = a + b;
// ্هͷߦҎԼͷΑ͏ʹॲཧ͞Ε·͢ɻ
// short d = (short)((int)a + (int)b)
printf("int c = %d ",c);
printf("short d = %d",d);
// int c = 32768 short d = -32768
Slide 33
Slide 33 text
֦ு
• Goݴޠͷ֦ு
• ػೳͱͯ͠ଘࡏ͠ͳ͍
• Better C - Goݴޠͱ #golang
• http://qiita.com/sonatard/items/464a9d45c689386edfe1
var a int16 = 32767 // int16ͷ࠷େ
var b int16 = 1
var c int32
// a + b int16Ͱܭࢉ͞ΕΔ
c = int32(a + b) // ҉ͷܕม͕ͳ͍ͨΊΩϟετ͠ͳ͍ͱΤϥʔ
fmt.Println(c)
// -32768
Slide 34
Slide 34 text
·ͱΊ
• Go࠷ߴ
• ϓϩάϥϛϯάݴޠ Go
• Alan A.A. Donovan B.W. Kernighan
• GoCݴޠ༝དྷͷ༷ػೳ͕ଟ͍ͷͰCΛษڧ͢ΔͱಘΔͷ͕͋Δ͔
• ϓϩάϥϛϯάݴޠC ୈ2൛ ANSIن֨४ڌ
• B.W. Kernighan , D.M. Ritchie
• ϓϩάϥϛϯά࡞๏
• Brian W. Kernighan, Rob Pike
Slide 35
Slide 35 text
※
• ͯ͢ͷϢʔεέʔεʹ͓͍ͯCݴޠΑΓGo͕ྑ͍Θ
͚Ͱ͋Γ·ͤΜ
• ϋʔυΣΞͷϨδελΛૢ࡞͢Δ߹ɺϝϞϦ
Λશʹཧ͍ͨ͠߹ʹGo͍͍ͯ·ͤΜ
• Linux KernelɺυϥΠόͳͲಉ༷Ͱ͢
• There's no magic