2020-03-01ãã1ã¶æéã®è¨äºä¸è¦§
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ å¼ãç¶ããå°ãã¿ãã£ãã«é¢æ°ã®ç¶ããï¼ #é¢é£è¨äº åç §) pythonã« enumerate ã¨ãã颿°ãããã¾ãã ãã®é¢æ°ã¯ãæå®ãããã·ã¼ã±ã³ã¹ãåãåºãã¨åæã«ã¤ã³ããã¯ã¹ãä»ä¸ãã¦è¿ãã¦ããã¾ãã ãããªæãã $ pythoâ¦
æ¦è¦ ãµã³ãã« æ¦è¦ å¿ããªãå ã«ã¡ã¢ã¡ã¢ã ç¥ããªãã£ãã®ã§ãããGoLandã§ãããã°æã« DebugString() string ã¨ããã¡ã½ãããç¨æãã¦ãã㨠ãããã¬ã§è¡¨ç¤ºãã¦ãããã¿ããã blog.jetbrains.com v2019.2 ãã追å ãããæ©è½ã¿ããã§ããã 試ãã¦ã¿â¦
æ¦è¦ ãµã³ãã« æ¦è¦ å æ¥ãæå®ãããã¯ã¼ã«ã¼æ°ã§ãã¡ã³ã¢ã¦ãããã颿°ãã¤ãã£ã¦ã¿ã¾ããã devlights.hatenablog.com ã¤ãã§ãªã®ã§ãããã使ã£ãåãä¸ã¤ä½ã£ã¦ã¿ã¾ããã å¦çãæ¸ãã¦ããã¨ãsync.WaitGroupãé »ç¹ã«å©ç¨ããã¨æãã¾ãã ãã¾ã«ãsyâ¦
æ¦è¦ ãã£ãã·ã¥ãæ¶ãæ¹æ³ æ¯åãã£ãã·ã¥ç¡è¦ãã¦ãã¹ãå®è¡ãã¦ããã go test ã®ãã©ã°ã«ã©ããªã®ãããã®ãã調ã¹ã åèæ å ± æ¦è¦ å¿ããªãå ã«ã¡ã¢ã¡ã¢ã ãã¹ããããããã« go test ãå®è¡ãã¦ããã¨ããã¾ã«ä»¥ä¸ã®ããã«ãã£ãã·ã¥ããçµæã表示â¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ å¼ãç¶ããå°ãã¿ãã£ãã«é¢æ°ã®ç¶ããï¼ #é¢é£è¨äº åç §) 以åã«ãã¡ã³ã¤ã³ãã颿°ã«ã¤ãã¦è¨äºæ¸ãã¾ããã devlights.hatenablog.com ã¤ãã§ãªã®ã§ããã¡ã³ã¢ã¦ãããã颿°ãæ¸ãã¦ã¿ã¾ããã ãµã³ãã« package chansâ¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ å¼ãç¶ããå°ãã¿ãã£ãã«é¢æ°ã®ç¶ããï¼ #é¢é£è¨äº åç §) ãã¾ã«å¦çããããã³ã«ä¸å®æéã®ã¤ã³ã¿ã¼ãã«ãç½®ãã¦ããããã¨ãããã£ãããã¾ãã ããã¦ã以ä¸ã®ããã«æ¸ãã¨æãã¾ãã for v := range Take(Repeat(1)) â¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ å¼ãç¶ããå°ãã¿ãã£ãã«é¢æ°ã®ç¶ããï¼ #é¢é£è¨äº åç §) ãã£ãã«ã®ãã¤ãã©ã¤ã³ãæ§ç¯ããã¨ãã諸å ã®ãã¼ã¿ãã¹ã©ã¤ã¹ã¨ãã§æã£ã¦ããå ´åããã㨠æåã«ããããã£ãã«ã«æµãã¦ããå¿ è¦ããã£ãããã¾ããä¸åã«ã¼â¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ããï¼ #é¢é£è¨äº åç §) æ¸ç±ã«ã¯è¨è¼ããã¦ããªãã§ããããã£ãã«ããã触ã£ã¦ã¦é¢ç½ãã®ã§ããã¿çãªé¢æ°ãããããæ°ååç¶ãããããªã¨ã ã¾ããã«ã¼ãããç¨ã®ãã£ãã«ã¤ãã颿°ã§ããæ®éã«åããâ¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ãã ããã¾ã使ããã¨ã¯ç¡ãããã§ããããã£ããæ¸ããã®ã§ã¡ã¢ã¡ã¢ã unixç³»ã®teeã³ãã³ãã®ããã«ãä¸ã¤ã®å ¥åãï¼ã¤ã«è¤è£½ãã¦ããããã£ãã«ãçæãã颿°ã ãã¼ã¿ãå¦çããªãããã¤ãã§ã«éåæâ¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ devlights.hatenablog.com ã®è£è¶³ãµã³ãã«ã ä¸ã®è¨äºã§ã¯ãä¸ã¤ã®ãã£ãã«ãOrDone() ã§ã©ãããã¦å¦çãã¦ãã¾ããã è¤æ°ã®å ´åã®ãµã³ãã«ãã¤ãã§ã«è¿½å ã ãµã³ãã« package ordone import ( "context" "fmt" "runtimeâ¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ãã ä»åã¯ãFan-In (ãã¡ã³ã¤ã³) ãã¿ã¼ã³ã§è¤æ°ã®ãã£ãã«ã®ã·ã¼ã±ã³ã¹ãä¸ã¤ã«ã¾ã¨ãã¦æ¶è²»ãã¦ãããã£ãã«ãä½ã颿°ã«ã¤ãã¦ã éåæç³»ã®æ¬ã¨ãå¼ãã§ããã¨ããããã¡ã³ã»ã¤ã³(fan-in) ã¨ã ãã¡â¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ãã ä»åã¯ãè¤æ°ã®ãã£ãã«ã®ã·ã¼ã±ã³ã¹ãä¸ã¤ã«ã¾ã¨ãã¦é ã«æ¶è²»ãã¦ãããã£ãã«ãä½ã颿°ã«ã¤ãã¦ã ä¾ãã°ãï¼ã¤ã®ãã¡ã¤ã«ãèªã¿è¾¼ãå¦çæ¸ãã¦ãã¦ãããããã®ãã¡ã¤ã«ãèªãå¦çãã´ã«ã¼ãã³ã«â¦
Goã¡ã¢-71 (æå®ããããã£ãã«ã®ã©ã¡ãããéãããéãããã£ãã«, OrDone)
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ãã ä»åã¯ãçµäºå¤å®ã®doneãã£ãã«ã¨å ¥åãã¼ã¿ã®ãã£ãã«ã®ã©ã¡ãããéãããéãããã£ãã«ãè¿ã颿°ã«ã¤ãã¦ã Goã§ããã£ãã«ã使ã£ãå¦çãæ¸ãã¨ãã¨ã¦ã便å©ã§ããä¾ãã°ãä½ãã®ãã£ãã«ã®ãâ¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ãã ä»åã¯ãæå®ããããã£ãã«ããæå®ãããåæ°åã ããã¼ã¿ãåãåºããã£ãã«ãè¿ã颿°ã§ãã C# ã® Enumerable.Take ã Enumerable.TakeWhile ããã¯ãªæãã ãµã³ãã« package chans // Take --â¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ ãã£ãã«é¢æ°ã®ç¶ãã ä»åã¯ãæå®ãããå¤ãå»¶ã ã¨ç¹°ãè¿ãã¦ããããã£ãã«ãè¿ã颿°ã§ããC# ã® Enumerable.Repeat ããã¯ãªæãã ãµã³ãã« package chans // Repeat -- æå®ããå¤ãæ°¸é ã¨ç¹°ãè¿ããã£ãã«ãè¿ãã¾â¦
æ¦è¦ ãµã³ãã« åè æ¦è¦ ããå¿ãã¦ãã¾ãã®ã§ãããã«ã¡ã¢ã¡ã¢ã Go ã«ã¯ãä»ã®è¨èªã«ãããããªç¶æ¿ã®æ¦å¿µãããã¾ããããåã®çµã¿è¾¼ã¿ã¯ãµãã¼ãããã¦ãã¾ãã (ãã®ãããã¯ããè°è«ã®çã¿ããã§ãããå人çã«ã¯ç¶æ¿ã¯æ®æ®µãã¾ã使ããªãã®ã§ç§ã¯ä¸â¦
æ¦è¦ ãµã³ãã« åè é¢é£è¨äº æ¦è¦ å°ãã¿ãçµæ§ä¾¿å©ãªã®ã§å人çã«ã¯ãã使ã£ã¦ãããã¿ã¼ã³ã§ãã C#ã«ã¯ãè¤æ°ã®ã¿ã¹ã¯ãã¾ã¨ãã¦ãã¾ã£ã¦ããã®å ã®å ¨ã¦ãå®äºãããå®äºæ±ãã«ãã¦ãããã¿ã¹ã¯ãè¿ã Task.WhenAll() ã¨ããã¡ã½ãããããã¾ãã Goã®å ´â¦
æ¦è¦ ãµã³ãã« åè æ¦è¦ å°ãã¿ãçµæ§ä¾¿å©ãªã®ã§å人çã«ã¯ãã使ã£ã¦ãããã¿ã¼ã³ã§ãã C#ã«ã¯ãè¤æ°ã®ã¿ã¹ã¯ãã¾ã¨ãã¦ãã¾ã£ã¦ããã®å ã®ã©ããä¸ã¤ã§ãå®äºãããå®äºæ±ãã«ãã¦ãããã¿ã¹ã¯ãè¿ã Task.WhenAny() ã¨ããã¡ã½ãããããã¾ãã Goã®å ´â¦
æ¦è¦ ãµã³ãã« ã¤ãã§ã« C# ã®ãµã³ãã« æ¦è¦ ããããæ¹å¿ããã®ã§ãèªåç¨ã«ããã«ã¡ã¢ã WaitGroupã®å¾ ã¡åããã¨ãã£ãã«ã®closeãå¿ããã¨Goã«deadlockã£ã¦æãããã®ã§æ³¨æã ãµã³ãã« ãã£ã¬ã¯ããªãå帰çã«éãã¦ãã£ã¦åºåãããµã³ãã«ãå¥ã«éåæâ¦
æ¦è¦ æºå ãµã³ãã« æ¦è¦ 以ä¸ã®è¨äºã§ç¥ãã¾ãããæè¬ m( )m dave.cheney.net Go1.13ã®ã¨ãã¯ãt.Log() ããã¨ããã¹ããå®äºãã¦ããåºåããã¦ããã®ã§ãã Go1.14ããã¯ããããã¡ãªã³ã°ããã«å³åºåãããããã«ãªã£ã¦ããã¿ããã§ããã æºå èªåã®â¦
æ¦è¦ ã¤ã³ã¹ãã¼ã« ãµã³ãã« Shift-JIS EUC-JP æ¦è¦ 以ä¸ãèªåç¨ã¡ã¢ã§ããå¿ããªãå ã«ã¡ã¢ã¡ã¢ã ç¾å¨ãã»ã¨ãã©ã®ãã¡ã¤ã«ã UTF-8 ã¨ãã«ãªã£ã¦ãããã¨ãå¤ãã§ãã ããã§ããå®åã¨ãã ã¨æªã ã« Shift-JIS ã¨ã EUC-JP ãªãã¡ã¤ã«ãããè¦ããã¨ããâ¦
æ¦è¦ ã¤ã³ã¹ãã¼ã« ãµã³ãã« sync.WaitGroupã§ã¨ã©ã¼ä¼æ errgroup.Groupã§ã¨ã©ã¼ä¼æ errgroupã§ctx.Contextã使ã£ããµã³ãã« errgroupã§ãã¤ãã©ã¤ã³å¦ç ã¤ãã§ã«çµæãExcelã«åºåãããµã³ãã« æ¦è¦ å¿ããªãå ã«ã¡ã¢ã¡ã¢ã è¤æ°ã®éåæå¦çã®å®äºãå¾ â¦
æ¦è¦ ãµã³ãã« ãµã³ãã«2 æ¦è¦ Goã§ã½ã¼ã¹æ¸ãã¦ããã¨ãããã¾ã«ã«ã¼ãå ã§deferã使ãããã¨ããããã¾ãã ä½åããã¡ã¤ã«ãéãã¦ããã¨ãã¨ãã ããããã¨ããã«ã¼ãå ã§ defer æ¸ãã¨ãGoLandããããã«ã¼ãå ã§ defer ãç´æ¥ä½¿ã£ã¦ããï¼ãã£ã¦è¦åâ¦
æ¦è¦ åå¼·ããç°å¢ä½ã Github ã«ç»é² åå¼·ç¨ã®ãªãã¸ããªä½ã Gitpodã«ç»é²ãã Gitpodã®æ¡å¼µæ©è½ãChromeãã©ã¦ã¶ã«ã¤ã³ã¹ãã¼ã« Githubã®ãªãã¸ããªãGitpodã§éã ãã®ç°å¢ã®ã¡ãªãã ãã®ç°å¢ã®ãã¡ãªãã åè æ¦è¦ å人çã«ããå®ãåå¼·ã§ããç°å¢ãâ¦
æ¦è¦ ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨æ§é ä½ãå®ç¾©ãã¦ã¿ã ã¤ã³ã¿ã¼ãã§ã¼ã¹ãæ¡å¼µãã¦ã¿ã æ§é ä½ã®ã³ã³ã¹ãã©ã¯ã¿ã§ã¤ã³ã¿ãã§ã¼ã¹åã§è¿ã è¤æ°ã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ãå®è£ ãã¦ããå ´å æ¦è¦ Qiitaã«ä»¥ä¸ã®ã¨ã¦ãåå¼·ã«ãªãè¨äºãããã¾ããã qiita.com ãªãã»ã©ããâ¦
æ¦è¦ ãµã³ãã« åè æ¦è¦ ã¡ã¢ãªä½¿ç¨éãåå¾ããããæ¹ã調ã¹ã¦ããã®ã§ãå¿ããªããã¡ã«ã¡ã¢ã¡ã¢ã 大æµã©ã®è¨èªã§ããããã®ãªãã§ãããGoã®å ´å㯠runtime.ReadMemStats(*runtime.MemStats) ã§åå¾ã§ããã¿ããã§ããã 以ä¸ãã¡ãã£ã¨ããã¡ã¢æ¸ããµã³â¦
æ¦è¦ Ctrl+Shift+Aã§Actions表示ã㦠"shadow" ã£ã¦å ¥å åè æ¦è¦ var hoge *Hogeif condition != nil { hoge, err := https://t.co/3dOQ15DCmc(ctx, hoge_key)if err != nil {return nil, err} fmt.Printf("%v", *hoge)} else {hoge = nil}ãããªæãã®ã³â¦
ã¾ããã æ¦è¦ ãµã³ãã« ã¾ããã devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com ã®ç¶ãã§ããããã覧ãªã£ã¦ããªãå ´åã¯å ã«ä¸ã御覧ãã ããã¾ãã¼ã æ¦è¦ ä»äºä¸ã大â¦
ã¾ããã æ¦è¦ ãµã³ãã« ã¾ããã devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com ã®ç¶ãã§ããããã覧ãªã£ã¦ããªãå ´åã¯å ã«ä¸ã御覧ãã ããã¾ãã¼ã æ¦è¦ ä»äºä¸ã大æµã®äººã¯Windowsã§ä½æ¥ãã¦â¦
æ¦è¦ ãµã³ãã« æ¦è¦ Tour of Go ã®ã¡ã¢ããã¦ãããã©ãæ¸ãããã¨ããã£ããå¿ãã¦ããã®ã§å¿ä½ãªãã®ã§ããã«ã¡ã¢ã Tour of Go ã® - sync.Mutex ã«ã¤ãã¦ã®ãµã³ãã«ã tour.golang.org Goã§ãã¥ã¼ããã¯ã¹ãæ±ãå ´åã¯ãsync.Mutexã使ãã¾ãã åºæ¬çã«â¦