Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go言語の紹介(かなり浅く浅く)(仮)(お盆開け勉強会)
Search
Symptote
August 25, 2014
Programming
200
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語の紹介(かなり浅く浅く)(仮)(お盆開け勉強会)
Symptote
August 25, 2014
Other Decks in Programming
See All in Programming
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.6k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
290
継続モナドとリアクティブプログラミング
yukikurage
2
250
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
310
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
200
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
990
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
220
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
150
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
230
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Facilitating Awesome Meetings
lara
57
7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Balancing Empowerment & Direction
lara
6
1.2k
How to Ace a Technical Interview
jacobian
281
24k
Paper Plane (Part 1)
katiecoart
PRO
0
9.5k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
640
Speed Design
sergeychernyshev
33
1.9k
Designing Experiences People Love
moore
143
24k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Transcript
Goݴޠͷհʢ͔ͳΓઙ͘ઙ͘ʣ(Ծ) @a0symptote
ࣗݾհ ໊લ : ͠Μͬͱ ྸ : 20 ॴଐ : ߴઐ
ڵຯ : ɹ ɹֶͰ͏ਤ(άϥϑ)ͷ࡞
ຊͷ༰
Goݴޠͬͯʁ Google ͕։ൃͯ͠Δݴޠ γϯϓϧͳߏจͰ͕͍ͷ͕ಛ ฒྻॲཧʹڧ͘ɼ؆୯ʹ࣮ग़དྷΔ webΞϓϦέʔγϣϯΛ࡞ΔͨΊͷϥΠϒϥϦ͕Ұഋ ࣈ۟ɾߏจղੳ༻ͷϥΠϒϥϦҰഋ Ϛείοτ͕ՄѪ͍ʂʂʂʂʂʂʂʂʂʂʂʂʂ ࢀߟจݙ :
http:/ /golang.jp
Կʹ͑Δʁ WebΞϓϦέʔγϣϯͷ࡞ ΠϯλϓϦλɾίϯύΠϥͷ։ൃ ܭࢉ etc…
Կʹ͑Δʁ WebΞϓϦέʔγϣϯͷ࡞ ΠϯλϓϦλɾίϯύΠϥͷ։ൃ ܭࢉ etc… ͋ Ε ɼ ଞ ͷ
ݴ ޠ Ͱ ྑ ͘ ͳ ͍……ʁ
͔֬ʹ
GoݴޠΛ͏ཧ༝ͬͯʁ Goݴޠ͕͖Ͱ͖Ͱͨ·Βͳ͍ ָʹฒྻॲཧΛར༻͍ͨ͠
GoݴޠΛ͏ཧ༝ͬͯʁ Goݴޠ͕͖Ͱ͖Ͱͨ·Βͳ͍ ָʹฒྻॲཧΛར༻͍ͨ͠ ී௨ͬͪ͜ʁ
GoݴޠΛ͏ཧ༝ͬͯʁ Goݴޠ͕͖Ͱ͖Ͱͨ·Βͳ͍ ָʹฒྻॲཧΛར༻͍ͨ͠ ී௨ͬͪ͜ʁ ͱ ͍ ͏ Θ ͚ Ͱ
GoݴޠʹΑΔָʑฒྻॲཧ @a0symptote
ָʹฒྻॲཧ͢ΔͨΊ͚ͩʹ GoݴޠΛ͏ͷͪΐͬͱ……
ղܾࡦ
ղܾࡦ ଞͷݴޠͰॻ͍ͨιʔεΛ GoݴޠͰऔΓࠐΜͰ͓͏
औΓࠐΉͨΊͷํ๏
औΓࠐΉͨΊͷํ๏ cgoͱ͍͏πʔϧ͕Goݴޠʹ༻ҙ͞Ε͍ͯΔ
औΓࠐΉͨΊͷํ๏ cgoͱ͍͏πʔϧ͕Goݴޠʹ༻ҙ͞Ε͍ͯΔ ͓ΘΓ
͕͢͞ʹຯؾͳ͍ͷͰ…… ͲΜͳݴޠ͕͑·͔͢ʁ Question C/C++ Ada Fortran Java Objective-C/C++ Answer
͕͢͞ʹຯؾͳ͍ͷͰ…… ͲΜͳݴޠ͕͑·͔͢ʁ Question C/C++ Ada Fortran Java Objective-C/C++ Answer gccͰίϯύΠϧग़དྷΔݴޠͳΒԿͰ
࣮ࡍͷιʔεݟͯΈΑ͏ package main ! /* ! #include<math.h> int larger(int a,
int b){return (a > b) ? a : b;} ! */ ! import "C" import "fmt" ! func main() { fmt.Println(C.larger(1, 2)) fmt.Println(C.cos(30.0 * 3.14 / 180.0)) }
࣮ࡍͷιʔεݟͯΈΑ͏ package main ! /* ! #include<math.h> int larger(int a,
int b){return (a > b) ? a : b;} ! */ ! import "C" import "fmt" ! func main() { fmt.Println(C.larger(1, 2)) fmt.Println(C.cos(30.0 * 3.14 / 180.0)) } ͜ͷίϝϯτͷதʹ Cݴޠͷιʔε
࣮ࡍͷιʔεݟͯΈΑ͏ package main ! /* ! #include<math.h> int larger(int a,
int b){return (a > b) ? a : b;} ! */ ! import "C" import "fmt" ! func main() { fmt.Println(C.larger(1, 2)) fmt.Println(C.cos(30.0 * 3.14 / 180.0)) } ͜ͷίϝϯτͷதʹ Cݴޠͷιʔε ͜ͷΑ͏ʹGoݴޠͷ Ұ෦ͱͯ͠ݺͼग़ͤΔɽ
࣮ࡍͷιʔεݟͯΈΑ͏ package main ! /* ! #include<math.h> int larger(int a,
int b){return (a > b) ? a : b;} ! */ ! import "C" import "fmt" ! func main() { fmt.Println(C.larger(1, 2)) fmt.Println(C.cos(30.0 * 3.14 / 180.0)) } ͜ͷίϝϯτͷதʹ Cݴޠͷιʔε ͜ͷΑ͏ʹGoݴޠͷ Ұ෦ͱͯ͠ݺͼग़ͤΔɽ ϥΠϒϥϦݺΔ
CݴޠҎ֎Ͱʁ package main /* #cgo CFLAGS: -x objective-c #cgo LDFLAGS:
-framework Foundation z#import <Foundation/Foundation.h> #import <objc/Object.h> void fizzBuzz(int n) { for(int i = 1; i <= n; ++i) if(i % 15 == 0) NSLog(@"fizzbuzz\n"); else if(i % 5 == 0) NSLog(@"buzz\n"); else if(i % 3 == 0) NSLog(@"fizz\n"); else NSLog(@"%d\n", i); } */ import "C" ! func main() { C.fizzBuzz(20) }
CݴޠҎ֎Ͱʁ package main /* #cgo CFLAGS: -x objective-c #cgo LDFLAGS:
-framework Foundation z#import <Foundation/Foundation.h> #import <objc/Object.h> void fizzBuzz(int n) { for(int i = 1; i <= n; ++i) if(i % 15 == 0) NSLog(@"fizzbuzz\n"); else if(i % 5 == 0) NSLog(@"buzz\n"); else if(i % 3 == 0) NSLog(@"fizz\n"); else NSLog(@"%d\n", i); } */ import "C" ! func main() { C.fizzBuzz(20) }
CݴޠҎ֎Ͱʁ package main /* #cgo CFLAGS: -x objective-c #cgo LDFLAGS:
-framework Foundation z#import <Foundation/Foundation.h> #import <objc/Object.h> void fizzBuzz(int n) { for(int i = 1; i <= n; ++i) if(i % 15 == 0) NSLog(@"fizzbuzz\n"); else if(i % 5 == 0) NSLog(@"buzz\n"); else if(i % 3 == 0) NSLog(@"fizz\n"); else NSLog(@"%d\n", i); } */ import "C" ! func main() { C.fizzBuzz(20) } gccʹೖ͍ͬͯΕɼCFLAGS͔Β ࢦఆͯ͠Εͳ͘։͚Δ
CݴޠҎ֎Ͱʁ package main /* #cgo CFLAGS: -x objective-c #cgo LDFLAGS:
-framework Foundation z#import <Foundation/Foundation.h> #import <objc/Object.h> void fizzBuzz(int n) { for(int i = 1; i <= n; ++i) if(i % 15 == 0) NSLog(@"fizzbuzz\n"); else if(i % 5 == 0) NSLog(@"buzz\n"); else if(i % 3 == 0) NSLog(@"fizz\n"); else NSLog(@"%d\n", i); } */ import "C" ! func main() { C.fizzBuzz(20) } gccʹೖ͍ͬͯΕɼCFLAGS͔Β ࢦఆͯ͠Εͳ͘։͚Δ ϩʔυ͍ͨ͠ϥΠϒϥϦಉ͡ ͘LDFLAGSͰࢦఆग़དྷΔ
ͦ͏ݴ͑ฒྻॲཧʁ
ͦ͏ݴ͑ฒྻॲཧʁ go 並列化したい関数()
ͦ͏ݴ͑ฒྻॲཧʁ go 並列化したい関数() ͓ΘΓ
ࠓճฒྻͰॲཧͯ͠ΈΔ ԁपπΛٻΊΑ Question
ղ͖ํ π = Arctan 0.25. ্ࣜʹ͍ͭͯɼࠨลΛTaylorల։͢Δͱ π = Σ{0.25n /
(2n + 1)}. Answer ࢀߟจݙ : wikipedia-ԁपͷྺ࢙
ղ͖ํ π = Arctan 0.25. ্ࣜʹ͍ͭͯɼࠨลΛTaylorల։͢Δͱ π = Σ{0.25n /
(2n + 1)}. Answer ࢀߟจݙ : wikipedia-ԁपͷྺ࢙ ඍੵͱ͔͔Βͳ͍ΜͰɼ࣮ݧతʹٻΊ·͢
1ลͷ͕͞1ͷਖ਼ํܗͱͦͷԁΛ ߟ͑Δɽਖ਼ํܗʹదʹΛ͏ͪ ԁʹೖ͍ͬͯΔͱͦΕҎ֎ͷͷൺΛ ٻΊΔɽ ࣮ݧతʹʁ Answer CݴޠɿγϛϡϨʔτ Goݴޠɿฒྻॲཧ
۩ମྫ package main ! /* #include <stdio.h> #include <stdlib.h> #include
<time.h> void init(){srand(time(NULL));} double pi(){ //正方形と円の比を計算する,省略 } */ import "C" import "fmt" import "runtime" ! func main() { const NCPU = 5 runtime.GOMAXPROCS(NCPU) ! const MAX = 360000 / NCPU ch := make(chan float64, NCPU) ! C.init() ! for i := 0; i < NCPU; i++ { go func() { for j := 0; j < MAX; j++ { ch <- float64(C.pi()) } }() } ! p := 0.0 for i := 0; i < MAX*NCPU; i++ { p = <-ch + p } ! fmt.Println("円周率π ≈", p/(MAX*NCPU)) }
۩ମྫ package main ! /* #include <stdio.h> #include <stdlib.h> #include
<time.h> void init(){srand(time(NULL));} double pi(){ //正方形と円の比を計算する,省略 } */ import "C" import "fmt" import "runtime" ! func main() { const NCPU = 5 runtime.GOMAXPROCS(NCPU) ! const MAX = 360000 / NCPU ch := make(chan float64, NCPU) ! C.init() ! for i := 0; i < NCPU; i++ { go func() { for j := 0; j < MAX; j++ { ch <- float64(C.pi()) } }() } ! p := 0.0 for i := 0; i < MAX*NCPU; i++ { p = <-ch + p } ! fmt.Println("円周率π ≈", p/(MAX*NCPU)) } ϓϩηεͷઃఆ
۩ମྫ package main ! /* #include <stdio.h> #include <stdlib.h> #include
<time.h> void init(){srand(time(NULL));} double pi(){ //正方形と円の比を計算する,省略 } */ import "C" import "fmt" import "runtime" ! func main() { const NCPU = 5 runtime.GOMAXPROCS(NCPU) ! const MAX = 360000 / NCPU ch := make(chan float64, NCPU) ! C.init() ! for i := 0; i < NCPU; i++ { go func() { for j := 0; j < MAX; j++ { ch <- float64(C.pi()) } }() } ! p := 0.0 for i := 0; i < MAX*NCPU; i++ { p = <-ch + p } ! fmt.Println("円周率π ≈", p/(MAX*NCPU)) } ϓϩηεͷઃఆ ฒྻॲཧ෦(ແ໊ؔ)
࣮ߦͷ࣌ؒͷධՁ 1ίΞͰ࣮ߦ 5ίΞͰ࣮ߦ ࣮ߦ࣌ؒ 1m2.151s 0m45.90s
࣮ߦͷ࣌ؒͷධՁ 1ίΞͰ࣮ߦ 5ίΞͰ࣮ߦ ࣮ߦ࣌ؒ 1m2.151s 0m45.90s 1/3ͷ࣮ߦ࣌ؒͷݮʹ
ࠓճͷ·ͱΊ Goݴޠɼ͍ͬ͢͝Մೳੑʹ͋;ΕͯΔ ଞͷݴޠͷྑ͍ॴΛͭ·Έ৯͍ͯ͠ར༻Ͱ͖Δ Goݴޠࣗମ؆୯ʹฒྻॲཧ͕ग़དྷͨΓͱɼதʑݟॴ͕͋Δ ͜Ε͔Βൃల͍ͯ͘͠ͷͰɼظͯͬͯͯ͠Լ͍͞
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠