id:JAPLJã¨äºäººã§Goãåå¼·ãã¾ããï¼ ãã½ã³ã³ç²åå
俺éã®ãã½ã³ã³ç²ååã¯çµããã¾ãããè³éããããã¨ãããªã
伿´¥è¥æ¾ã¯ã·ã³ãã³ããã«ã«æ³ã¾ãã¾ãããã¤ã³ã¿ã¼ãããã使ãã¾ãã幸ãã
ã¾ã æ¥ä»ã¯è¶ãã¦ãã¾ããããæ¨æ¥ã®æµã¯ä»æ¥ã®ããã§ããã¨ãããã¨ã§id:JAPLJãç¡çã«èªããGoãåå¼·ãã¾ããã
ã¤ã³ã¹ãã¼ã«
早速 Go 言語を試してみる! - IT戦記
ãã¡ã®ç°å¢ã®å ´å
export GOOS=linux export GOARCH=386
GOARCHã386ãªã®ã§ã³ã³ãã¤ã©ã®ååã6gã§ã¯ãªã8gã¨ãã«ãªãã¾ãã
ãã¹ãããã
ååã®ç±æ¥
çºãã¦ããçºè¦ããã®ã§ãããGoã®ãããã¬ã¯Ogleã£ã¦è¨ããã§ããã
æ§æ
ãããã¯ã®æ³¢æ¬å¼§ã¯çç¥ã§ããªããªã£ãããã§ãã
whileã¨forã¨foreachã¨while(true)ã¯å ¨ã¦ãforãã§æ¸ãã¾ãã
for {}//while(true) for i < j {}//while(i<j) for k,v := range m {}//foreach(k,v in m) for i := 0; i < 100; i++ {}//ããªãã¿ã®
æ¬å¼§ãç¡ããªã£ã¦é常ã«ä¸æè°ãªæãã§ãã
ifãä½ã ãé£ãããªã£ãã
if i < j {}//ããªãã¿ if {}//trueã«ãªããããï¼ if i := f(); i < j {}//i<jã®è©ä¾¡åã«å®è¡ãããæ
夿°å®£è¨
åãå¾ã«ãªãã®ãç¹å¾´çã§ãã
夿°å®£è¨
var variable type;
夿°ã®ä»£å ¥ã¨å®£è¨ãåæã«è¡ãã
variable := expression;
å
ã夿° åãã¨ããè¨æ³ã¨ãç·ç§°å å弿°ãã¨ããè¨æ³ã¯é¡ä¼¼ãã¦ãã¦ããã¨æãã¾ãã
var out chan int;//chan intå var ary []int;//[]intå
颿°
æ¸ããããå¾®å¦ã«JavaScriptã£ã½ãã
func nanika(a int,b int) {}//æ®éã®é¢æ° func(a int, b int) {}//ç¡å颿° func are(a int, b int) int {}//æ»ãå¤ã®åã®æå® func (self *Bar) clone() *bar {}//ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
goroutine
channelã¯ãåææ©è½ã¤ãQueueã
goã¯éåæå®è¡ã
UNIXã«ä¾ããã¨ãchannelã¯ãã¤ãã©ã¤ã³ãgoã¯forkã«è¿ãããã«æãã¾ããã
goã§åé¢ããã«ã¼ãã³ã¯éåæã§ãããã¤ã¾ãgoã®å¾ã®å¦çã¨ã®é åºãå ¥ãããã¦ããããã¨ããæç¤ºã«ãªãã¾ãããã ããã ãã§ã¯ã ããªã®ã§ãåæã®ããã®ä»çµã¿ã¨ãã¦channelã使ãã¾ãã
颿°åè¨èªã«ä¾ããã¨ãé å»¶è©ä¾¡ã«é常ã«è¿ãã¨æãã¾ããã颿°åã«ããã¦é å»¶è©ä¾¡ãå¯è½ãªã®ã¯å¯ä½ç¨ãçããªãã¨ããä¿è¨¼ãããããã§ããGoã«ããã¦ã¯goã¨channelãç¨ãã¦å±æçã«ä¿è¨¼ãè¡ããã¨ã§ãæç¶ãçãªå¦çã®ä¸ã§ä¼¼ããããªãã¨ãå®ç¾ãã¦ããããã§ããé å»¶è©ä¾¡ã«ä¾ãããªããchannelã¯é å»¶ãªã¹ãã£ã½ãã§ãã
ããã§ãgoã®å å´ã®å¦çãchannelããè¦æ±ããªããã¡ã¯è¡ããªãããã«ããã¨é å»¶è©ä¾¡ã«ãªãã®ã§ãããå è¡è©ä¾¡ãã§ããããã«ããã¨ããã並ååã«ãªãããã§ããã
ãããªããã§ãgoroutineã®ç·´ç¿ããããªããé å»¶è©ä¾¡ã£ã½ããã¨ãããã°ããã¨æãã¾ãã
ææç©
çµå±primesãæ¸ãã¾ããã
package main import "fmt" func filter(in chan int, prime int) chan int { out := make(chan int); go func() { for { num := <-in; if(num % prime != 0) { out <- num } } }(); return out; } func primes() chan int { out := make(chan int); go func() { nums := func() chan int { nums := make(chan int); go func() { for i := 2; ; i++ { nums <- i; } }(); return nums; }(); for { prime := <-nums; out <- prime; nums = filter(nums, prime); } }(); return out; } func main() { p := primes(); for i := 0 ; i < 100 ; i++ { fmt.Printf("%d\n", <-p) } }
filterã¯ä¸ããããchannelããprimeã§å²ããããªããã®ãæ½åºãã¾ãã
2以ä¸ã®æ´æ°ãåæããchannelã§ããnumsãçæãã¦ã
ãnumsã®å
é ãã¨ãprimeã¨ããoutã«æ¿å
¥ãããnumsããprimeã§å²ããããªããã®ãæ½åºããæ°ãã«numsã¨ãããã
ã¨ãã使¥ãããæãã§ãã
ãã¼ãããã£ãããã