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
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
自作OSでスライド発表する
uyuki234
1
3.6k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.6k
AIで効率化できた業務・日常
ochtum
0
160
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.7k
Contextとはなにか
chiroruxx
1
390
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
250
dRuby over BLE
makicamel
2
410
どこまでゆるくて許されるのか
tk3fftk
0
300
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
270
Test your architecture with Archunit
thirion
1
2.3k
Prompt Engineering for Job Search
mfonobong
0
370
Designing Experiences People Love
moore
143
24k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
360
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Technical Leadership for Architectural Decision Making
baasie
3
430
Are puppies a ranking factor?
jonoalderson
1
3.7k
How GitHub (no longer) Works
holman
316
150k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Limits of Empathy - UXLibs8
cassininazir
1
390
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
620
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ݴޠࣗମ؆୯ʹฒྻॲཧ͕ग़དྷͨΓͱɼதʑݟॴ͕͋Δ ͜Ε͔Βൃల͍ͯ͘͠ͷͰɼظͯͬͯͯ͠Լ͍͞
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠