Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go言語の紹介(かなり浅く浅く)(仮)(お盆開け勉強会)
Search
Symptote
August 25, 2014
Programming
210
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
Railsバージョンを4倍にした話
optim
0
930
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
770
Performance Optimization With LLMs
xleitix
0
240
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.7k
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
170
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
AI Augmentation Techniques with Liberty
ivargrimstad
1
360
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
340
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
160
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
130
AmebaブログはKMPから卒業します
kmars0605
0
320
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
200
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
529
40k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Evolving SEO for Evolving Search Engines
ryanjones
0
350
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
Tell your own story through comics
letsgokoyo
1
1.1k
How to build a perfect <img>
jonoalderson
1
6.2k
Statistics for Hackers
jakevdp
799
230k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
Balancing Empowerment & Direction
lara
6
1.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ݴޠࣗମ؆୯ʹฒྻॲཧ͕ग़དྷͨΓͱɼதʑݟॴ͕͋Δ ͜Ε͔Βൃల͍ͯ͘͠ͷͰɼظͯͬͯͯ͠Լ͍͞
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠