145 KiB
| title | comments |
|---|---|
| Japanese Version | true |
Goč¨čŞă§ăăăăĄăŞééă
ăăŽăăźă¸ăŻă100 Go MistakesăăŽĺ 厚ăăžă¨ăăăăŽă§ăăä¸ćšă§ăăłăăĽăăăŁăŤéăăăăăźă¸ă§ăăăăžăăăăăăăĄăŞééăăăć°ăăŤčż˝ĺ ăăăăšăă ă¨ăčăă§ăăă community mistake issue ăä˝ćăăŚăă ăăă
???+ Tip "Jobs"
Is your company hiring? [Sponsor](https://github.com/sponsors/teivah/sponsorships?sponsor=teivah&tier_id=386213&preview=true) the Japanese version of this repository and let a significant audience of Go developers (~1k unique visitors per week) know about your opportunities in this section.
???+ warning "注ć"
çžĺ¨ă大ĺš
ăŤĺ¤ăăŽăłăłăăłăăčż˝ĺ ăăŚĺźˇĺăăŚăăć°ăăăăźă¸ă§ăłăé˛čڧăăŚăăžăăăăŽăăźă¸ă§ăłăŻăžă éçşä¸ă§ăăĺéĄăčŚă¤ăăĺ ´ĺăŻăŠăăć°čť˝ăŤPRăä˝ćăăŚăă ăăă
ăłăźăă¨ăăă¸ă§ăŻăć§ć
ćĺłçă§ăŞăĺ¤ć°ăŽăˇăŁăăźă¤ăłă° (#1)
???+ info "čŚç´"
ĺ¤ć°ăŽăˇăŁăăźă¤ăłă°ăéżăăăă¨ăŻă誤ăŁăĺ¤ć°ăŽĺç
§ăčŞăżćăŽćˇˇäšąăé˛ăăžăă
ĺ¤ć°ăŽăˇăŁăăźă¤ăłă°ăŻăĺ¤ć°ĺăăăăăŻĺ
ă§ĺ厣č¨ăăăăă¨ă§çăăžăăăăăăŻééăăĺźă辡ăăăăăăăžăăĺ¤ć°ăŽăˇăŁăăźă¤ăłă°ăçŚć˘ăăăăŠăăăŻĺäşşăŽĺĽ˝ăżăŤăăăžăăăă¨ăă°ăă¨ăŠăźăŤĺŻžă㌠err ăŽăăăŞć˘ĺăŽĺ¤ć°ĺăĺĺŠç¨ăăă¨äžżĺŠăŞĺ ´ĺăăăăžăăă¨ăŻăăăăłăźăăŻăłăłăă¤ăŤăăăăăŽăŽăĺ¤ăĺăĺăŁăĺ¤ć°ăäşćăăăăŽă§ăŻăŞăă¨ăăăˇăăŞăŞăŤç´é˘ăăĺŻč˝ć§ăăăăăăĺĺă¨ăăŚĺźăçśă注ćăćăĺż
čŚăăăăžăă
ă˝ăźăšăłăźă :simple-github:
ä¸ĺż čŚăŤăăšăăăăăłăźă (#2)
???+ info "čŚç´"
ăăšăă桹ăăŞăăŞăăăăŤăăăăăăźăăšă塌ĺ´ăŤćăăăă¨ă§ăĄăłăżăŤăłăźăă˘ăăŤăć§çŻăăăă¨ă厚ćăŤăŞăăžăă
ä¸čŹçăŤăé˘ć°ăăă桹ăăăšăăčŚćąăăăťăŠăčŞăă§çč§Łăăăă¨ăăăč¤éăŤăŞăăžăăç§ăăĄăŽăłăźăăŽĺŻčŞć§ăćéŠĺăăăăăŤăăăŽăŤăźăŤăŽéŠç¨ćšćłăčŚăŚăăăžăăăă
ifăăăăŻăčżăăăă¨ăăăăšăŚăŽĺ ´ĺăŤăăăŚelseăăăăŻăççĽăăĺż čŚăăăăžăă ăă¨ăă°ă揥ăŽăăăŤć¸ăăšăă§ăŻăăăžăăă
if foo() {
// ...
return true
} else {
// ...
}
䝣ăăăŤă揥ăŽăă㍠else ăăăăŻăççĽăăžăă
if foo() {
// ...
return true
}
// ...
- ăăłăăăăźăăšă§ăăăŽăă¸ăăŻăŤĺžăăă¨ăĺŻč˝ă§ăă
if s != "" {
// ...
} else {
return errors.New("empty string")
}
ăăă§ăŻă犺㎠s ăăăłăăăăźăăšă襨ăăžăăăăăăŁăŚă揥ăŽăăăŤćĄäťśăă˛ăŁăăčżăĺż
čŚăăăăžăă
if s == "" {
return errors.New("empty string")
}
// ...
čŞăżăăăăłăźăăć¸ăăă¨ăŻăăăšăŚăŽéçşč ăŤă¨ăŁăŚéčŚăŞčŞ˛éĄă§ăăăăšăăăăăăăăŻăŽć°ăć¸ăăăăĺŞăăăăăăźăăšă塌ĺ´ăŤćăăă§ăăă ăćŠăćťăăă¨ăăăłăźăăŽĺŻčŞć§ăĺä¸ăăăĺ ˇä˝çăŞć掾ă§ăă
ă˝ăźăšăłăźă :simple-github:
inité˘ć°ăŽčŞ¤ç¨ (#3)
???+ info "čŚç´"
ĺ¤ć°ăĺćĺăăă¨ăăŻăinité˘ć°ăŽă¨ăŠăźĺŚçăĺśéăăăŚăăăăšăăźăăŽĺŚçă¨ăăšăăăăč¤éăŤăŞăăă¨ăŤćł¨ćăăŚăă ăăăăťă¨ăăŠăŽĺ ´ĺăĺćĺăŻçšĺŽăŽé˘ć°ă¨ăăŚĺŚçăăăăšăă§ăă
inité˘ć°ăŻăă˘ăăŞăąăźăˇă§ăłăŽăšăăźăăĺćĺăăăăăŤä˝żç¨ăăăé˘ć°ă§ăăĺźć°ăĺăăăçľćăčżăăžăăďź func() é˘ć°ďźăăăăąăźă¸ăĺćĺăăăă¨ăăăăąăźă¸ĺ
ăŽăăšăŚăŽĺŽć°ăăăłĺ¤ć°ăŽĺŽŁč¨ăčŠäžĄăăăžăă揥ăŤăinité˘ć°ăĺŽčĄăăăžăă
inité˘ć°ăŻăăă¤ăăŽĺéĄăĺźă辡ăăĺŻč˝ć§ăăăăžăă
- ă¨ăŠăźĺŚçăĺśéăăăĺŻč˝ć§ăăăăžăă
- ăăšăăŽĺŽčŁ ćšćłăč¤éăŤăŞăĺŻč˝ć§ăăăăžăďźăă¨ăă°ăĺ¤é¨äžĺé˘äżăč¨ĺŽăăĺż čŚăăăăžăăăĺä˝ăăšăăŽçŻĺ˛ă§ăŻĺż čŚăŞăĺŻč˝ć§ăăăăžăďźă
- ĺćĺă§ăšăăźăăč¨ĺŽăăĺż čŚăăăĺ ´ĺăŻăă°ăăźăăŤĺ¤ć°ă使ç¨ăăŚčĄăĺż čŚăăăăžăă
inité˘ć°ăŤăŻćł¨ćăĺż čŚă§ăăăă ăăéçć§ćăŽĺŽçžŠăŞăŠăçśćłăŤăăŁăŚăŻĺ˝šçŤă¤ĺ ´ĺăăăăžăăăă䝼ĺ¤ăŽăťă¨ăăŠăŽĺ ´ĺăĺćĺĺŚçăŻçšĺŽăŽé˘ć°ăéăăŚčĄăăăăšăă§ăă
ă˝ăźăšăłăźă :simple-github:
ă˛ăăżăźă¨ăťăăżăźăŽäšąç¨ (#4)
???+ info "čŚç´"
Goč¨čŞă§ăŻăć
Łç¨çăŤă˛ăăżăźă¨ăťăăżăźăŽä˝żç¨ă埡ĺśăăăă¨ăŻăăăžăăăĺŽĺŠăéčŚăăĺšçć§ă¨çšĺŽăŽć
ŁçżăŤĺžăăă¨ă¨ăŽéăŽéŠĺăŞăăŠăłăšăčŚă¤ăăăă¨ăăé˛ăăšăéă§ăăăŻăă§ăă
ăăźăżăŽăŤăăťăŤĺă¨ăŻăăŞăă¸ă§ăŻăăŽĺ¤ăžăăŻçść ăé ăăă¨ăćăăžăăă˛ăăżăźă¨ăťăăżăźăŻăă¨ăŻăšăăźăăăăŚăăŞăăŞăă¸ă§ăŻăăăŁăźăŤăăŽä¸ăŤă¨ăŻăšăăźăăăăăĄă˝ăăăćäžăăăă¨ă§ăŤăăťăŤĺăĺŻč˝ăŤăăć掾ă§ăă
Goč¨čŞă§ăŻăä¸é¨ăŽč¨čŞă§čŚăăăăăăŞă˛ăăżăźă¨ăťăăżăźăŽčŞĺăľăăźăăŻăăăžăăăăžăăă˛ăăżăźă¨ăťăăżăźă使ç¨ăăŚć§é ä˝ăăŁăźăŤăăŤă˘ăŻăťăšăăăă¨ăŻĺż é ă§ăć Łç¨çă§ăăăăžăăăĺ¤ăăăăăăŞăć§é ä˝ăŽă˛ăăżăźă¨ăťăăżăźă§ăłăźăăĺăăăšăă§ăŻăăăžăăăĺŽĺŠăéčŚăăäťăŽăăă°ăŠăăłă°ăăŠăă¤ă ă§ćăŤăŻč°čŤăŽä˝ĺ°ăăŞăă¨čăăăăŚăăć ŁçżăŤĺžăăă¨ă¨ăĺšçć§ă¨ăŽéăŽéŠĺăŞăăŠăłăšăčŚă¤ăăăăĺŞăăăšăă§ăă
Goč¨čŞăŻăăˇăłăăŤăăĺŤăĺ¤ăăŽçšć§ăčć ŽăăŚč¨č¨ăăăçŹčŞăŽč¨čŞă§ăăăă¨ăĺżăăŞăă§ăă ăăăăă ăăă˛ăăżăźă¨ăťăăżăźăŽĺż čŚć§ăčŚă¤ăăŁăĺ ´ĺăăžăăŻĺčż°ăŽăăăŤăĺćšäşćć§ăäżč¨źăăŞăăĺ°ćĽăŽĺż čŚć§ăäşć¸Źăăăĺ ´ĺăŻăăăăă使ç¨ăăăă¨ăŤĺéĄăŻăăăžăăă
ă¤ăłăżăă§ăźăšćąć (#5)
???+ info "čŚç´"
ć˝čąĄĺăŻä˝ćăăăăšăăăŽă§ăŻăŞăăçşčŚăăăăšăăăŽă§ăăä¸ĺż
čŚăŞč¤éăăéżăăăăăŤăă¤ăłăżăă§ăźăšăŻăĺż
čŚăŤăŞăă¨äşć¸Źăăă¨ăă§ăŻăŞăăĺż
čŚăŤăŞăŁăă¨ăăŤä˝ćăăăăĺ°ăŞăă¨ăć˝čąĄĺăćĺšă§ăăăă¨ă訟ćă§ăăĺ ´ĺăŤä˝ćăăŚăă ăăă
ă¤ăłăżăă§ăźăšăŻăăŞăă¸ă§ăŻăăŽĺä˝ăćĺŽăăćšćłăćäžăăžăăč¤ć°ăŽăŞăă¸ă§ăŻăăĺŽčŁ
ă§ăăĺ
ąéé
ăć˝ĺşăăăăăŤăă¤ăłăżăă§ăźăšăŻä˝żç¨ăăăžăăGoč¨čŞăŽă¤ăłăżăă§ăźăšă大ăăç°ăŞăăŽăŻăćéťçăŤćşăăăăăă¨ă§ăăăŞăă¸ă§ăŻă X ăă¤ăłăżăă§ăźăš Y ăĺŽčŁ
ăăŚăăăă¨ă示ă implements ăŽăăăŞć示çăŞăăźăŻăźăăŻăăăžăăă
ä¸čŹăŤăă¤ăłăżăă§ăźăšă䞥ĺ¤ăăăăăă¨čăăăă丝čŚăŞä˝żç¨äžăŻďźă¤ăăăžăăăăăŻăĺ ąéăŽĺä˝ăé¤ĺ¤ăăăä˝ăăăŽĺé˘ăä˝ćăăăăăăłĺăçšĺŽăŽĺä˝ăŤĺśéăăă¨ăăăăŽă§ăăăă ăăăăŽăŞăšăăŻăăšăŚăçś˛çž ăăŚăăăăă§ăŻăŞăăç´é˘ăăçśćłăŤăăŁăŚăç°ăŞăăžăă
ĺ¤ăăŽĺ ´ĺăă¤ăłăżăă§ăźăšăŻć˝čąĄĺăăăăăŤä˝ćăăăžăăăăăŚăăăă°ăŠăăłă°ă§ć˝čąĄĺăăă¨ăăŽä¸ťăŞćł¨ćçšăŻăć˝čąĄĺăŻä˝ćăăăăšăă§ăŻăŞăăçşčŚăăăăšăă§ăăă¨ăăăă¨ăčŚăăŚăăăă¨ă§ăăăăŞăăĄăăăăăç´ćĽăŽççąăăŞăéăăăłăźăĺ ă§ć˝čąĄĺăăšăă§ăŻăŞăă¨ăăăă¨ă§ăăă¤ăłăżăă§ăźăšă使ăŁăŚč¨č¨ăăăŽă§ăŻăŞăăĺ ˇä˝çăŞăăźăşăĺž ă¤ăšăă§ăăĺĽăŽč¨ăćšăăăă°ăă¤ăłăżăă§ăźăšăŻĺż čŚăŤăŞăă¨äşć¸Źăăă¨ăă§ăŻăŞăăĺż čŚăŤăŞăŁăă¨ăăŤä˝ćăăĺż čŚăăăăžăă ă¤ăłăżăă§ăźăšăŽé庌ăŞä˝żç¨ăăăĺ ´ĺăŽä¸ťăŞĺéĄăŻä˝ă§ăăăăăçăăŻăăłăźăăăăźăăăč¤éăŤăŞăăă¨ă§ăă彚ăŤçŤăăŞăéćĽĺç §ăčż˝ĺ ăăŚăä˝ăŽäžĄĺ¤ăăăăžăăăăăăŻäžĄĺ¤ăŽăŞăć˝čąĄĺăăăăă¨ă§ăăłăźăăčŞăżăçč§Łăăć¨čŤăăăă¨ăăăăŤĺ°éŁăŤăăžăăă¤ăłăżăă§ăźăšăčż˝ĺ ăăć確ăŞççąăăŞăăă¤ăłăżăă§ăźăšăŤăăŁăŚăłăźăăăŠăŽăăăŤćšĺăăăăăä¸ćçăŞĺ ´ĺăŻăăăŽă¤ăłăżăă§ăźăšăŽçŽçăŤç°č°ăĺąăăĺż čŚăăăăžăăĺŽčŁ ăç´ćĽĺźăłĺşăăŽăä¸ă¤ăŽćă§ăă
ăłăźăĺ ă§ć˝čąĄĺăăă¨ăăŻćł¨ćăĺż čŚă§ăďźć˝čąĄĺăŻä˝ćăăăŽă§ăŻăŞăăçşčŚăăĺż čŚăăăăžăďźăĺžă§ĺż čŚăŤăŞăĺŻč˝ć§ăăăăăŽăčć ŽăăĺŽç§ăŞć˝čąĄĺăŹăăŤăć¨ć¸ŹăăŚăç§ăăĄă˝ăăăŚă§ă˘éçşč ăŻăłăźăăăŞăźăăźă¨ăłă¸ăă˘ăŞăłă°ăăăă¨ăăăăăăžăăăťă¨ăăŠăŽĺ ´ĺăăłăźăăä¸ĺż čŚăŞć˝čąĄĺă§ćąćăăăčŞăżăŤăăăŞăăăăăăŽăăăťăšăŻéżăăăšăă§ăă
!!! quote "ăăăťăă¤ăŻ"
ă¤ăłăżăă§ăźăšă§ăăśă¤ăłăăăŞăă¤ăłăżăă§ăźăšăčŚă¤ăĺşăă
ć˝čąĄçăŤĺéĄăč§Łćąşăăăă¨ăăăŽă§ăŻăŞăăäťč§Łćąşăăšăăă¨ăč§ŁćąşăăžăăăăćĺžăŤéčŚăŞăă¨ă§ăăăă¤ăłăżăă§ăźăšăŤăăŁăŚăłăźăăăŠăŽăăăŤćšĺăăăăăä¸ćçăŞĺ ´ĺăŻăăłăźăăç°Ąç´ ĺăăăăăŤă¤ăłăżăă§ăźăšăĺé¤ăăăă¨ăć¤č¨ăăĺż čŚăăăă§ăăăă
ă˝ăźăšăłăźă :simple-github:
ççŁč ĺ´ăŽă¤ăłăżăă§ăźăš (#6)
???+ info "čŚç´"
ă¤ăłăżăă§ăźăšăăŻăŠă¤ă˘ăłăĺ´ă§äżćăăăă¨ă§ä¸ĺż
čŚăŞć˝čąĄĺăĺéżă§ăăžăă
Goč¨čŞă§ăŻă¤ăłăżăă§ăźăšăćéťçăŤćşăăăăžăăăăăŻăć示çăŞĺŽčŁ ăćă¤č¨čŞă¨ćŻčźăăŚĺ¤§ăăŞĺ¤ĺăăăăăĺžĺăăăăžăăăťă¨ăăŠăŽĺ ´ĺăĺžăăšăă˘ăăăźăăŻĺăŽăťăŻăˇă§ăłă§čŞŹćăăăăŽââć˝čąĄĺăŻä˝ćăăăŽă§ăŻăŞăăçşčŚăăĺż čŚăăăââăŤäźźăŚăăžăăăăăŻăăăšăŚăŽăŻăŠă¤ă˘ăłăăŤĺŻžăăŚçšĺŽăŽć˝čąĄĺă埡ĺśăăăŽăŻççŁč ăŽĺ˝šĺ˛ă§ăŻăŞăăă¨ăćĺłăăžăă䝣ăăăŤăä˝ăăăŽĺ˝˘ĺźăŽć˝čąĄĺăĺż čŚăăŠăăăĺ¤ćăăăăŽăăźăşăŤćéŠăŞć˝čąĄĺăŹăăŤăćąşĺŽăăăŽăŻăŻăŠă¤ă˘ăłăăŽč˛Źäťťă§ăă
ăťă¨ăăŠăŽĺ ´ĺăă¤ăłăżăă§ăźăšăŻćśč˛ťč ĺ´ăŤĺĺ¨ăăĺż čŚăăăăžăăăă ăăçšĺŽăŽçśćłďźăă¨ăă°ăć˝čąĄĺăćśč˛ťč ăŤă¨ăŁăŚĺ˝šçŤă¤ăă¨ăăăăŁăŚăăââäşć¸ŹăŻăăŚăăŞăââĺ ´ĺďźă§ăŻăăăăççŁč ĺ´ă§ä˝żç¨ăăăĺ ´ĺăăăăžăăăăăăĺ ´ĺăĺŻč˝ăŞéăćĺ°éăŤćăăĺĺŠç¨ĺŻč˝ć§ăéŤăăăăç°ĄĺăŤć§ćă§ăăăăăŤĺŞăăăšăă§ăă
ă˝ăźăšăłăźă :simple-github:
ă¤ăłăżăă§ăźăšăčżă (#7)
???+ info "čŚç´"
ćčťć§ăŤĺéĄăăŞăăăăŤăăăăăŤăé˘ć°ăŻăťă¨ăăŠăŽĺ ´ĺăă¤ăłăżăă§ăźăšă§ăŻăŞăĺ
ˇä˝çââăŞĺŽčŁ
ăčżăĺż
čŚăăăăžăăéăŤăé˘ć°ăŻĺŻč˝ăŞéăă¤ăłăżăă§ăźăšăĺăĺ
Ľăăĺż
čŚăăăăžăă
ăťă¨ăăŠăŽĺ ´ĺăă¤ăłăżăă§ăźăšă§ăŻăŞăĺ ˇä˝çăŞĺŽčŁ ăčżăĺż čŚăăăăžăăăăă§ăŞăă¨ăăăąăźă¸ăŽäžĺé˘äżăŤăăč¨č¨ăăăŁăăč¤éăŤăŞăăăăšăŚăŽăŻăŠă¤ă˘ăłăăĺăć˝čąĄĺăŤäžĺăăĺż čŚăăăăăăćčťć§ăŤćŹ ăăĺŻč˝ć§ăăăăžăăçľčŤăŻĺăŽăťăŻăˇă§ăłă¨äźźăŚăăžăăć˝čąĄĺăăŻăŠă¤ă˘ăłăăŤă¨ăŁăŚĺ˝šçŤă¤ăă¨ăďźäşć¸Źăăăă§ăŻăŞăďźăăăŁăŚăăĺ ´ĺăŻăă¤ăłăżăă§ăźăšăčżăăă¨ăć¤č¨ăăŚăăăă§ăăăăăă䝼ĺ¤ăŽĺ ´ĺăŻăć˝čąĄĺă埡ĺśăăšăă§ăŻăăăžăăăăăăăŻăŻăŠă¤ă˘ăłăăŤăăŁăŚçşčŚăăăĺż čŚăăăăžăăä˝ăăăŽççąă§ăŻăŠă¤ă˘ăłăăĺŽčŁ ăć˝čąĄĺăăĺż čŚăăăĺ ´ĺă§ăăăŻăŠă¤ă˘ăłăĺ´ă§ăăăčĄăăă¨ăă§ăăžăă
any ăŻä˝ăč¨ăăŞă (#8)
???+ info "čŚç´"
`json.Marshal` ăŞăŠčăăăăăšăŚăŽĺăĺăĺ
Ľăăăčżăĺż
čŚăăăĺ ´ĺăŤăŽăż `any` ă使ç¨ăăŚăă ăăăăă䝼ĺ¤ăŽĺ ´ĺă`any` ăŻćĺłăŽăăć
ĺ ąăćäžăăăĺźăłĺşăĺ
ăäťťćăŽăăźăżĺăŽăĄă˝ăăăĺźăłĺşăăă¨ă訹ĺŻăăăăăăłăłăă¤ăŤćăŤĺéĄăçşçăăĺŻč˝ć§ăăăăžăă
any ĺăŻăčăăăăăšăŚăŽĺăĺăĺ
Ľăăăčżăĺż
čŚăăăĺ ´ĺďźăă¨ăă°ăăăźăˇăŁăŞăłă°ăăăŠăźăăăăŽĺ ´ĺďźăŤĺ˝šçŤăĄăžăăĺĺă¨ăăŚăłăźăăé庌ăŤä¸čŹĺăăăă¨ăŻä˝ă¨ăăŚăéżăăăšăă§ăăăłăźăăŽčĄ¨çžĺăŞăŠăŽäťăŽĺ´é˘ăĺä¸ăăĺ ´ĺăŻăăłăźăăĺ°ăéč¤ăăăăťăăčŻăăă¨ăăăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¸ă§ăăŞăăŻăšăăă¤ä˝żç¨ăăăšăăçč§ŁăăŚăăŞă (#9)
???+ info "čŚç´"
ă¸ă§ăăŞăăŻăšă¨ĺăăŠăĄăźăżăźăĺŠç¨ăăăă¨ă§ăčŚç´ ăĺä˝ăé¤ĺ¤ăăăăăŽăă¤ăŠăźăăŹăźăăłăźăăéżăăăă¨ăă§ăăžăăăă ăăĺăăŠăĄăźăżăŻććĺ°ćŠăŤä˝żç¨ăăăĺ
ˇä˝çăŞĺż
čŚć§ăăăăŁăĺ ´ĺăŤăŽăżä˝żç¨ăăŚăă ăăăăăă§ăŞăăă°ăä¸ĺż
čŚăŞć˝čąĄĺă¨č¤éăăçăăžăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
ă˝ăźăšăłăźă :simple-github:
ĺăŽĺăčžźăżă§čľˇăăăăĺéĄăććĄăăŚăăŞă (#10)
???+ info "čŚç´"
ĺĺăčžźăżă使ç¨ăăă¨ăăă¤ăŠăźăăŹăźăăłăźăăĺéżăăăă¨ăă§ăăžăăăă ăăăăăăăă¨ă§ăä¸é¨ăŽăăŁăźăŤăăé襨示ăŤăăŚăăĺż
čŚăăăĺ ´ĺăŤĺéĄăçşçăăŞăăăăŤăăŚăă ăăă
ć§é ä˝ăä˝ćăăă¨ăăGoč¨čŞăŻĺăĺăčžźăăŞăăˇă§ăłăćäžăăžăăăă ăăĺĺăčžźăżăŽćĺłăăăšăŚçč§ŁăăŚăăŞăă¨ăäşćłĺ¤ăŽĺä˝ăçşçăăĺŻč˝ć§ăăăăžăăăăŽăťăŻăˇă§ăłă§ăŻăĺăĺăčžźăćšćłăăăăăăăăăăŽăăăăłčăăăăĺéĄăŤă¤ăăŚčŚăŚăăăžăă
Goč¨čŞă§ăŻăĺĺăŞăă§ĺŽŁč¨ăăăć§é ä˝ăăŁăźăŤăăŻăĺăčžźăżă¨ĺźă°ăăžăăăă¨ăă°ă揥ăŽăăăŞăăŽă§ăă
type Foo struct {
Bar // ĺăčžźăżăăŁăźăŤă
}
type Bar struct {
Baz int
}
Foo ć§é ä˝ă§ăŻăBar ĺăé˘éŁäťăăăăĺĺăŞăă§ĺŽŁč¨ăăăŚăăžăăăăăăŁăŚăăăăŻĺăčžźăżăăŁăźăŤăă§ăă
ĺăčžźăżă使ç¨ăăăă¨ă§ăĺăčžźăżĺăŽăăŁăźăŤăă¨ăĄă˝ăăăŻćć źăăžăăBar ăŤăŻ Baz ăăŁăźăŤăăĺŤăžăăŚăăăăăăăŽăăŁăźăŤă㯠Foo ăŤćć źăăžăăăăăăŁăŚăFoo ăă Baz ăĺŠç¨ă§ăăăăăŤăŞăăžăă
ĺăŽĺăčžźăżăŤă¤ăăŚä˝ăč¨ăăă§ăăăăăăžăăăăăĺż čŚăŤăŞăăă¨ăŻăťă¨ăăŠăŞăăăŚăźăšăąăźăšăä˝ă§ăăăăăăăĺĺăčžźăżăŞăă§ăĺć§ăŤč§Łćąşă§ăăăă¨ăćĺłăăžăăĺăŽĺăčžźăżăŻä¸ťăŤĺŠäžżć§ăçŽçă¨ăăŚä˝żç¨ăăăžăăăťă¨ăăŠăŽĺ ´ĺăăăăŻĺä˝ăćć źăăăăăŤä˝żç¨ăăăžăă
ĺĺăčžźăżă使ç¨ăăĺ ´ĺăŻă揥㎠2 ă¤ăŽä¸ťăŞĺśç´ăĺżľé ăŤç˝Žăĺż čŚăăăăžăă
- ăăŁăźăŤăă¸ăŽă˘ăŻăťăšăç°Ąç´ ĺăăăăăŽçłčĄŁć§ćă¨ăăŚăŽăżä˝żç¨ăăŞăă§ăă ăăďź
Foo.Bar.Baz()ăŽäťŁăăăŤFoo.Baz()ăŞăŠďźă ăăăĺŻä¸ăŽć šć ă§ăăĺ ´ĺăŻăĺ é¨ĺăĺăčžźăžăă䝣ăăăŤăăŁăźăŤăă使ăăžăăăă - ĺ¤é¨ăăé ăăăăăźăżďźăăŁăźăŤăďźăĺä˝ďźăĄă˝ăăďźăćć źăăŚăŻăŞăăžăăăăă¨ăă°ăć§é ä˝ăŤĺŻžăăŚăăŠă¤ăăźăăŞăžăžăŤăăŚăăĺż čŚăăăăăăŻĺä˝ăŤăŻăŠă¤ă˘ăłăăă˘ăŻăťăšă§ăăăăăŤăăĺ ´ĺăŞăŠă§ăă
ăăăăŽĺśç´ăĺżľé ăŤç˝ŽăăŚĺĺăčžźăżăćčçăŤä˝żç¨ăăă¨ăčż˝ĺ ăŽčť˘éăĄă˝ăăăŤăăăă¤ăŠăźăăŹăźăăłăźăăĺéżăăăŽăŤĺ˝šçŤăĄăžăăăă ăăčŚăçŽă ăăçŽçă¨ăăăăé ăăšăčŚç´ ăćć źăăăăăŞăăăăŤćł¨ćăăžăăăă
ă˝ăźăšăłăźă :simple-github:
Functional Options ăăżăźăłă使ç¨ăăŚăăŞă (#11)
???+ info "čŚç´"
API ăŤéŠăăćšćłă§ăŞăăˇă§ăłăäžżĺŠăŤĺŚçăăăŤăŻăFunctional Options ăăżăźăłă使ç¨ăăžăăăă
ăăžăăžăŞĺŽčŁ ćšćłăĺĺ¨ăăĺ¤ĺ°ăŽéăăŻăăăžăăă丝ăŞčăćšăŻćŹĄăŽă¨ăăă§ăă
- ćŞă¨ăŻăšăăźăăŽć§é ä˝ăŻăŞăăˇă§ăłč¨ĺŽăäżćăăžăă
- ĺăŞăăˇă§ăłăŻĺăĺă
type Option func(options *options)ă¨ăŠăźăčżăé˘ć°ă§ăăăă¨ăă°ăWithPortăŻăăźăă襨ăintĺźć°ăĺăĺăăoptionsć§é ä˝ăŽć´ć°ćšćłă襨ăOptionĺăčżăăžăă
type options struct {
port *int
}
type Option func(options *options) error
func WithPort(port int) Option {
return func(options *options) error {
if port < 0 {
return errors.New("port should be positive")
}
options.port = &port
return nil
}
}
func NewServer(addr string, opts ...Option) ( *http.Server, error) {
var options options
for _, opt := range opts {
err := opt(&options)
if err != nil {
return nil, err
}
}
// ăăŽćŽľéă§ăoptions ć§é ä˝ăć§çŻăăăć§ćăĺŤăžăăžăă
// ăăăăŁăŚăăăźăč¨ĺŽăŤé˘éŁăăăă¸ăăŻăĺŽčŁ
ă§ăăžăă
var port int
if options.port == nil {
port = defaultHTTPPort
} else {
if *options.port == 0 {
port = randomPort()
} else {
port = *options.port
}
}
// ...
}
Functional Options ăăżăźăłăŻăăŞăăˇă§ăłăĺŚçăăăăăŽć蝽㧠API ăăŹăłăăŞăźăŞćšćłăćäžăăžăă Builder ăăżăźăłăŻćĺšăŞăŞăăˇă§ăłă§ăăăăăă¤ăăŽĺ°ăăŞćŹ çšďźçŠşăŽĺŻč˝ć§ăăăć§ćć§é ä˝ă渥ăăŞăăă°ăŞăăŞăăăžăăŻă¨ăŠăźăĺŚçăăćšćłăăăžăäžżĺŠă§ăŻăŞăďźăăăăăăŽç¨ŽăŽĺéĄăŤăă㌠Functional Options ăăżăźăłăGoč¨čŞăŤăăăć Łç¨çăŞĺŻžĺŚćšćłăŤăŞăĺžĺăăăăžăă
ă˝ăźăšăłăźă :simple-github:
誤ăŁăăăă¸ă§ăŻăć§ć (ăăă¸ă§ăŻăć§é ă¨ăăăąăźă¸ć§ć) (#12)
ĺ ¨ä˝çăŞć§ćăŤé˘ăăŚăŻăăăžăăžăŞčăćšăăăăžăăăă¨ăă°ăă˘ăăŞăąăźăˇă§ăłăăłăłăăăšăăă¨ăŤć´çăăšăăăăăă¨ăăŹă¤ă¤ăźăă¨ăŤć´çăăšăăăăăăŻĺĽ˝ăżăŤăăŁăŚç°ăŞăăžăăăłăłăăăšăďźéĄ§ĺŽ˘ăłăłăăăšăăĺĽç´ăłăłăăăšăăŞăŠďźăă¨ăŤăłăźăăă°ăŤăźăĺăăăă¨ăé¸ăśĺ ´ĺăăăă°ăĺ č§ĺ˝˘ăŽă˘ăźăăăŻăăŁĺĺăŤĺžăăă¨ă¨ăćčĄĺą¤ăă¨ăŤă°ăŤăźăĺăăăă¨ăé¸ăśĺ ´ĺăăăăžăăç§ăăĄăčĄăćąşĺŽăä¸č˛ŤăăŚăăéăăăăăăŚăźăšăąăźăšăŤéŠĺăăăŞăăăăăééăŁăŚăăăă¨ăŻăăăžăăă
ăăăąăźă¸ăŤé˘ăăŚăŻăĺžăăšăăăšăăăŠăŻăăŁăšăč¤ć°ăăăžăăăžăăăăă¸ă§ăŻăăé庌ăŤč¤éăŤăŞăĺŻč˝ć§ăăăăăăććĺ°ćŠăŞăăăąăźă¸ĺăŻéżăăăšăă§ăăĺ ´ĺăŤăăŁăŚăŻăĺŽç§ăŞć§é ăćĺăăçĄçăŤä˝ăăă¨ăăăăăăĺç´ăŞć§ćă使ç¨ăăăăŽĺ 厚ăçč§Łăăä¸ă§ăăă¸ă§ăŻăăçşĺąăăăăťăăčŻăĺ ´ĺăăăăžăă ç˛ĺşŚăčć ŽăăšăéčŚăŞçšă§ăă 1 ă¤ăžă㯠2 ă¤ăŽăăĄă¤ăŤă ăăĺŤăć°ĺăŽăăăăăąăźă¸ăä˝ćăăăă¨ăŻéżăăăšăă§ăăăăŽĺ ´ĺăăăăăăăăăŽăăăąăźă¸éăŽčŤççăŞćĽçśăŽä¸é¨ăćăč˝ăĄăčŞăżćăŤă¨ăŁăŚăăă¸ă§ăŻăăçč§ŁăăŤăăăŞăăăă§ăăéăŤăăăăąăźă¸ĺăŽćĺłăčăăăăăŞĺˇ¨ĺ¤§ăŞăăăąăźă¸ăéżăăăšăă§ăă
ăăăąăźă¸ăŽĺĺäťăă注ćăăŚčĄăĺż čŚăăăăžăăďźéçşč ăŞăďźčްăăçĽăŁăŚăăăăăŤăĺĺăäťăăăŽăŻéŁăăă§ăăăŻăŠă¤ă˘ăłăă Go ăăă¸ă§ăŻăăçč§ŁăăăăăăăŤăăăăąăźă¸ăŤĺŤăžăăăăŽă§ăŻăŞăăćäžăăăăŽăŤĺşăĽăăŚăăăąăźă¸ăŤĺĺăäťăăĺż čŚăăăăžăăăžăăăăźăăłă°ăŤăŻćĺłăŽăăăăŽăäťăăĺż čŚăăăăžăăăăăăŁăŚăăăăąăźă¸ĺăŻçăăç°Ąć˝ă§ă襨çžĺčąăă§ăć ŁäžăŤăăĺä¸ăŽĺ°ćĺăŤăăĺż čŚăăăăžăă
ä˝ăă¨ăŻăšăăźăăăăăŤă¤ăăŚăŽăŤăźăŤăŻé常ăŤç°Ąĺă§ăăăăăąăźă¸éăŽçľĺăć¸ăăăă¨ăŻăšăăźăăăăä¸čŚăŞčŚç´ ăé襨示ăŤăăăăăŤăă¨ăŻăšăăźăăăĺż čŚăăăăăŽăă§ăăéăćĺ°éăŤćăăĺż čŚăăăăžăăčŚç´ ăă¨ăŻăšăăźăăăăăŠăăä¸ćăŞĺ ´ĺăŻăăăăŠăŤăă§ă¨ăŻăšăăźăăăŞăăăăŤăăĺż čŚăăăăžăăĺžă§ă¨ăŻăšăăźăăăĺż čŚăăăăă¨ăĺ¤ćăăĺ ´ĺăŻăăłăźăă調ć´ă§ăăžăăăžăăć§é ä˝ă encoding/json ă§ă˘ăłăăźăˇăŁăŞăłă°ă§ăăăăăŤăăŁăźăŤăăă¨ăŻăšăăźăăăăŞăŠăăăă¤ăăŽäžĺ¤ăŤăçćăăŚăă ăăă
ăăă¸ă§ăŻăăć§ćăăăŽăŻç°Ąĺă§ăŻăăăžăăăăăăăăŽăŤăźăŤăŤĺžăăă¨ă§çśćă厚ćăŤăŞăăžăăăă ăăäżĺŽć§ă厚ćăŤăăăăăŤăŻä¸č˛Ťć§ăéčŚă§ăăăă¨ăŤćł¨ćăăŚăă ăăăăăăăŁăŚăăłăźăăăźăšĺ ă§ĺŻč˝ăŞéăä¸č˛Ťć§ăäżă¤ăăăŤăăžăăăă
???+ note "čŁčśł"
Go ăăźă 㯠Go ăăă¸ă§ăŻăăŽçľçšĺ/ć§é ĺăŤé˘ăăĺ
ŹĺźăŹă¤ăăŠă¤ăłă 2023 ĺš´ăŤçşčĄăăžăăďź [go.dev/doc/modules/layout](https://go.dev/doc/modules/layout)
ăŚăźăăŁăŞăăŁăăăąăźă¸ăŽä˝ć (#13)
???+ info "čŚç´"
ĺĺäťăăŻă˘ăăŞăąăźăˇă§ăłč¨č¨ăŽéčŚăŞé¨ĺă§ăă`common` ă`util` ă`shared` ăŽăăăŞăăăąăźă¸ăä˝ćăăŚăăčŞăżćăŤăăăťăŠăŽäžĄĺ¤ăăăăăăžăăăăăŽăăăŞăăăąăźă¸ăćĺłăŽăăĺ
ˇä˝çăŞăăăąăźă¸ĺăŤăŞăăĄăŻăżăŞăłă°ăăžăăăă
ăžăăăăăąăźă¸ăŤĺŤăžăăăăŽă§ăŻăŞăăăăăąăźă¸ăćäžăăăăŽăŤĺşăĽăăŚăăăąăźă¸ăŤĺĺăäťăăă¨ăăăŽčĄ¨çžĺăéŤăăĺšççăŞćšćłăŤăŞăăă¨ăŤăçćăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
ăăăąăźă¸ĺăŽčĄçŞăçĄčŚăă (#14)
???+ info "čŚç´"
桡䚹ăăăăŤăŻăă°ăŤă¤ăŞăăăăăŞăăĺ¤ć°ă¨ăăăąăźă¸éăŽĺĺăŽčĄçŞăĺéżăăăăăŤăăăăăăŤä¸ćăŽĺĺă使ç¨ăăžăăăăăăăä¸ĺŻč˝ăŞĺ ´ĺăŻăă¤ăłăăźăă¨ă¤ăŞă˘ăšă使ç¨ăăŚäżŽéŁžĺăĺ¤ć´ăăŚăăăąăźă¸ĺă¨ĺ¤ć°ĺăĺşĺĽăăăăăăčŻăĺĺăčăăŚăă ăăă
ăăăąăźă¸ăŽčĄçŞăŻăĺ¤ć°ĺăć˘ĺăŽăăăąăźă¸ĺă¨čĄçŞăăĺ ´ĺăŤçşçăăăăăąăźă¸ăŽĺĺŠç¨ă匨ăăăăžăăćć§ăăéżăăăăăŤăĺ¤ć°ĺăŽčĄçŞăé˛ăĺż čŚăăăăžăăčĄçŞăçşçăăĺ ´ĺăŻăĺĽăŽćĺłăŽăăĺĺăčŚă¤ăăăăă¤ăłăăźăă¨ă¤ăŞă˘ăšă使ç¨ăăĺż čŚăăăăžăă
ăłăźăăŽćçŤ ĺăčĄăăăŚăăŞă (#15)
???+ info "čŚç´"
ăŻăŠă¤ă˘ăłăă¨ăĄăłăăăăłăźăăŽćĺłăçč§Łă§ăăăăăŤăă¨ăŻăšăăźăăăăčŚç´ ăćçŤ ĺăăžăăăă
ćçŤ ĺăŻăłăźăăŁăłă°ăŽéčŚăŞĺ´é˘ă§ăăăăăŤăăăăŻăŠă¤ă˘ăłăă API ăăăç°ĄĺăŤä˝żç¨ăăăă¨ăă§ăăžăăăăăă¸ă§ăŻăăŽçśćăŤă彚çŤăĄăžăăGoč¨čŞă§ăŻăăłăźăăć Łç¨çăŞăăŽăŤăăăăăŤăăăă¤ăăŽăŤăźăŤăŤĺžăĺż čŚăăăăžăă
ăžăăă¨ăŻăšăăźăăăăăăšăŚăŽčŚç´ ăćçŤ ĺăăĺż čŚăăăăžăăć§é ăă¤ăłăżăă§ăźăšăé˘ć°ăŞăŠăă¨ăŻăšăăźăăăĺ ´ĺăŻćçŤ ĺăăĺż čŚăăăăžăăć Łäžă¨ăăŚăă¨ăŻăšăăźăăăăčŚç´ ăŽĺĺăăĺ§ăžăăłăĄăłăăčż˝ĺ ăăžăă
ć Łäžă¨ăăŚăĺăłăĄăłăăŻĺĽčŞçšă§çľăăĺŽĺ ¨ăŞćă§ăăĺż čŚăăăăžăăăžăăé˘ć°ďźăžăăŻăĄă˝ăăďźăćçŤ ĺăăă¨ăăŻăé˘ć°ăăŠăŽăăăŤĺŽčĄăăăă§ăŻăŞăăăăŽé˘ć°ăä˝ăĺŽčĄăăă¤ăăă§ăăăă埡調ăăĺż čŚăăăăă¨ăŤăçćăăŚăă ăăăăăăŻăăăĽăĄăłăă§ăŻăŞăăé˘ć°ă¨ăłăĄăłăăŤă¤ăăŚă§ăăăăăĽăĄăłăăŻçćłçăŤăŻăĺŠç¨č ăă¨ăŻăšăăźăăăăčŚç´ ăŽä˝żç¨ćšćłăçč§ŁăăăăăŤăłăźăăčŚăĺż čŚăăŞăăťăŠĺĺăŞć ĺ ąăćäžăăĺż čŚăăăăžăă
ĺ¤ć°ăžăăŻĺŽć°ăćçŤ ĺăăĺ ´ĺăăăŽçŽçă¨ĺ 厚ă¨ăă 2 ă¤ăŽĺ´é˘ăäźăăăă¨ăéčŚăăăăăžăăăĺč ăŻăĺ¤é¨ăŻăŠă¤ă˘ăłăăŤă¨ăŁăŚĺ˝šçŤă¤ăăăŤăăłăźăăăăĽăĄăłăă¨ăăŚĺĺ¨ăăĺż čŚăăăăžăăăă ăăĺžč ăŻĺż ăăăĺ Źéăăăăšăă§ăŻăăăžăăă
ăŻăŠă¤ă˘ăłăă¨ăĄăłăăăăăăąăźă¸ăŽçŽçăçč§Łă§ăăăăăŤăĺăăăąăźă¸ăăăăĽăĄăłăăăĺż
čŚăăăăžăăć
Łäžă¨ăăŚăăłăĄăłă㯠//Package ă§ĺ§ăžăăăăŽĺžăŤăăăąăźă¸ĺăçśăăžăăăăăąăźă¸ăłăĄăłăăŽćĺăŽčĄăŻăăăăąăźă¸ăŤčĄ¨ç¤şăăăăăç°Ąć˝ăŤăăĺż
čŚăăăăžăăăăăŚă揥ăŽčĄăŤĺż
čŚăŞć
ĺ ąăăăšăŚĺ
Ľĺăăžăă
ăłăźăăćçŤ ĺăăăă¨ăĺśç´ăŤăŞăăšăă§ăŻăăăžăăăăŻăŠă¤ă˘ăłăăăĄăłăăăăłăźăăŽćĺłăçč§ŁăăăŽăŤĺ˝šçŤă¤ĺż čŚăăăăžăă
ăŞăłăżăźă使ç¨ăăŚăŞă (#16)
???+ info "čŚç´"
ăłăźăăŽĺ質ă¨ä¸č˛Ťć§ăĺä¸ăăăăŤăŻăăŞăłăżăźă¨ăăŠăźăăăżăźă使ç¨ăăžăăă
ăŞăłăżăźăŻăăłăźăăĺćăăŚă¨ăŠăźăć¤ĺşăăčŞĺăăźăŤă§ăăăăŽăťăŻăˇă§ăłăŽçŽçăŻăć˘ĺăŽăŞăłăżăźăŽĺŽĺ ¨ăŞăŞăšăăćäžăăăă¨ă§ăŻăăăžăăăăăăăĺ ´ĺăăăăŤä˝żăçŠăŤăŞăăŞăăŞăŁăŚăăžăăăă§ăăăă ăăăťă¨ăăŠăŽ Go ăăă¸ă§ăŻăăŤăŞăłăżăźăä¸ĺŻćŹ ă§ăăă¨ăăăă¨ăŻçč§ŁăăčŚăăŚăăăžăăăă
- https://golang.org/cmd/vetââGoč¨čŞăŽć¨ćşăłăźăă˘ăăŠă¤ăśăź
- https://github.com/kisielk/errcheckââă¨ăŠăźăă§ăăŤăź
- https://github.com/fzipp/gocycloââ垪ç°çč¤é庌ă˘ăăŠă¤ăśăź
- https://github.com/jgautheron/goconstââč¤ć°ĺ使ç¨ćĺĺă˘ăăŠă¤ăśăź
ăŞăłăżăźăŽăťăăŤăăłăźăăšăżă¤ăŤă俎ćŁăăăăăŤăłăźăăăŠăźăăăżăźă使ç¨ăăžăăăă䝼ä¸ăŤăăăă¤ăăŽăłăźăăăŠăźăăăżăźă示ăăžăă
- https://golang.org/cmd/gofmtââGoč¨čŞăŽć¨ćşăłăźăăăŠăźăăăżăź
- https://godoc.org/golang.org/x/tools/cmd/goimportsââGoč¨čŞăŽć¨ćşă¤ăłăăźăăăŠăźăăăżăź
ăťă㍠golangci-lint (https://github.com/golangci/golangci-lint) ă¨ăăăăŽăăăăžăăăăăŻăĺ¤ăăŽäžżĺŠăŞăŞăłăżăźăăăŠăźăăăżăźăŽä¸ăŤăăĄăľăźăăćäžăăăŞăłăăŁăłă°ăăźăŤă§ăăăžăăăŞăłăżăźă丌ĺĺŽčĄăăŚĺćé庌ăĺä¸ăăăăă¨ăă§ăăé常ăŤäžżĺŠă§ăă
ăŞăłăżăźă¨ăăŠăźăăăżăźăŻăăłăźăăăźăšăŽĺ質ă¨ä¸č˛Ťć§ăĺä¸ăăă埡ĺăŞćšćłă§ăăćéăăăăŚăŠăă使ç¨ăăšăăăçč§ŁăăăăăăŽĺŽčĄďź CI ă Git ăăŞăłăăăăăăŻăŞăŠďźăčŞĺĺăăžăăăă
ăăźăżĺ
8 é˛ć°ăŞăăŠăŤă§ćˇˇäšąăćăăŚăăžă (#17)
???+ info "čŚç´"
ć˘ĺăŽăłăźăăčŞăă¨ăăŻă `0` ă§ĺ§ăžăć´ć°ăŞăăŠăŤă 8 é˛ć°ă§ăăăă¨ăŤçćăăŚăă ăăăăžăăćĽé čž `0o` ăäťăăăă¨ă§8é˛ć°ă§ăăăă¨ăć確ăŤăăčŞăżăăăăĺä¸ăăăžăăăă
8 é˛ć°ăŻ 0 ă§ĺ§ăžăăžăďźăă¨ăă°ă010 㯠10 é˛ć°ăŽ 8 ăŤç¸ĺ˝ăăžăďźăĺŻčŞć§ăĺä¸ăăăĺ°ćĽăŽăłăźăăŞăźăăźăŽć˝ĺ¨çăŞééăăĺéżăăăŤăŻă 0o ćĽé čžă使ç¨ă㌠8 é˛ć°ă§ăăăă¨ăćăăăŤăăžăăăďźäž: 0o10 ďźă
äťăŽć´ć°ăŞăăŠăŤčĄ¨çžăŤă注ćăăŚăă ăăă
- ăă¤ă㪠- ćĽé čž
0băăăăŻ0Bă使ç¨ăăžăďźăă¨ăă°ă0b㯠10 é˛ć°ăŽ 4 ăŤç¸ĺ˝ăăžăďź - 16é˛ć° - ćĽé čž
0xăăăăŻ0Xă使ç¨ăăžăďźăă¨ăă°ă0xF㯠10 é˛ć°ăŽ 15 ăŤç¸ĺ˝ăăžăďźă - čć° - ćĽĺ°žčž
iă使ç¨ăăžăďźăă¨ăă°ă3iďź
čŞăżăăăăăăăăŤăĺşĺăćĺă¨ăăŚă˘ăłăăźăšăłă˘ďź _ ďźă使ç¨ăăăă¨ăă§ăăžăăăă¨ăă°ă 10 ĺ㯠1_000_000_000 ăŽăăăŤć¸ăăă¨ăă§ăăžăăă˘ăłăăźăšăłă˘ăŻ 0b)00_00_01 ăŽăăăŤäťăŽčĄ¨çžă¨ä˝ľç¨ăăăă¨ăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ć´ć°ăŞăźăăźăăăźăçĄčŚăăŚăă (#18)
???+ info "čŚç´"
Goč¨čŞă§ăŻć´ć°ăŽăŞăźăăźăăăźă¨ă˘ăłăăźăăăźăčŁĺ´ă§ĺŚçăăăăăăăăăăăăŁăăăăçŹčŞăŽé˘ć°ăĺŽčŁ
ă§ăăžăă
Goč¨čŞă§ăŻăăłăłăă¤ăŤćăŤć¤ĺşă§ăăć´ć°ăŞăźăăźăăăźăŤăăŁăŚăłăłăă¤ăŤă¨ăŠăźăçćăăăžăăăă¨ăă°ă揥ăŽăăăŤăŞăăžăă
var counter int32 = math.MaxInt32 + 1
constant 2147483648 overflows int32
ăă ăăĺŽčĄćăŤăŻăć´ć°ăŽăŞăźăăźăăăźăžăăŻă˘ăłăăźăăăźăŻçşçăăžăăăăăăŤăăŁăŚă˘ăăŞăąăźăˇă§ăłăŽăăăăŻăçşçăăăă¨ăŻăăăžăăăăăŽĺä˝ăŻăăŁăăăŞăă°ďźăă¨ăă°ăč˛ ăŽçľćăŤă¤ăŞăăć´ć°ăŽĺ˘ĺăćŁăŽć´ć°ăŽĺ çŽăŞăŠďźăŤă¤ăŞăăĺŻč˝ć§ăăăăăăé ăŤĺ ĽăăŚăăăă¨ăéčŚă§ăă
ă˝ăźăšăłăźă :simple-github:
澎ĺĺ°ć°çšăçč§ŁăăŚăăŞă (#19)
???+ info "čŚç´"
çšĺŽăŽăăŤăżĺ
ă§ćľŽĺĺ°ć°çšćŻčźăčĄăă¨ăăłăźăăŽç§ťć¤ć§ă確äżă§ăăžăăĺ çŽăžăăŻć¸çŽăĺŽčĄăăă¨ăăŻă粞庌ăĺä¸ăăăăăăŤăĺç¨ĺşŚăŽĺ¤§ăăăŽćźçŽăă°ăŤăźăĺăăŚăă ăăăăžăăäšçŽă¨é¤çŽăŻĺ çŽă¨ć¸çŽăŽĺăŤĺŽčĄăăŚăă ăăă
Goč¨čŞăŤăŻăďźčć°ăé¤ăăĺ ´ĺďź float32 㨠float64 ă¨ăă 2 ă¤ăŽćľŽĺĺ°ć°çšĺăăăăžăă澎ĺĺ°ć°çšăŽćŚĺżľăŻăĺ°ć°ĺ¤ă襨çžă§ăăŞăă¨ăăć´ć°ăŽĺ¤§ăăŞĺéĄăč§ŁćąşăăăăăŤçşćăăăžăăăäşćłĺ¤ăŽäşć
ăéżăăăăăŤă澎ĺĺ°ć°çšćźçŽăŻĺŽéăŽćźçŽăŽčżäźźă§ăăăă¨ăçĽăŁăŚăăĺż
čŚăăăăžăă
ăăŽăăăŤăäšçŽăŽäžăčŚăŚăżăžăăăă
var n float32 = 1.0001
fmt.Println(n * n)
ăăŽăłăźăăŤăăăŚăŻ 1.0001 * 1.0001 = 1.00020001 ă¨ăăçľćăĺşĺăăăăă¨ăćĺž ăăă¨ćăăžăăăăăăŞăăăăťă¨ăăŠăŽ x86 ăăăťăăľă§ăŻă䝣ăă㍠1.0002 ăĺşĺăăăžăă
Goč¨čŞăŽ float32 ăăăł float64 ĺăŻčżäźźĺ¤ă§ăăăăăăăă¤ăăŽăŤăźăŤăĺżľé ăŤç˝Žăĺż
čŚăăăăžăă
- 2 ă¤ăŽćľŽĺĺ°ć°çšć°ăćŻčźăăĺ ´ĺăŻăăăŽĺˇŽă訹厚çŻĺ˛ĺ ă§ăăăă¨ă確čŞăăă
- ĺ çŽăžăăŻć¸çŽăĺŽčĄăăĺ ´ĺă粞庌ăéŤăăăăăŤăĺăćĄć°ăŽćźçŽăă°ăŤăźăĺăăă
- 粞庌ăéŤăăăăăä¸éŁăŽćźçŽă§ĺ çŽăć¸çŽăäšçŽăé¤çŽăĺż čŚăŞĺ ´ĺăŻăäšçŽă¨é¤çŽăćĺăŤĺŽčĄăăă
ă˝ăźăšăłăźă :simple-github:
ăšăŠă¤ăšăŽéˇăă¨ĺŽšéăçč§ŁăăŚăăŞă (#20)
???+ info "čŚç´"
Go éçşč
ăŞăă°ăăšăŠă¤ăšăŽéˇăă¨ĺŽšéăŽéăăçč§Łăăăšăă§ăăăšăŠă¤ăšăŽéˇăăŻăšăŠă¤ăšĺ
ăŽä˝żç¨ĺŻč˝ăŞčŚç´ ăŽć°ă§ăăăăšăŠă¤ăšăŽĺŽšéăŻăăăăłă°é
ĺĺ
ăŽčŚç´ ăŽć°ă§ăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
ă˝ăźăšăłăźă :simple-github:
éĺšçăŞăšăŠă¤ăšăŽĺćĺ (#21)
???+ info "čŚç´"
ăšăŠă¤ăšăä˝ćăăă¨ăăéˇăăăă§ăŤăăăŁăŚăăĺ ´ĺăŻăćĺŽăăăéˇăăžăăŻĺŽšéă§ăšăŠă¤ăšăĺćĺăăžăăăăăăăŤăăăĺ˛ăĺ˝ăŚăŽć°ăć¸ăăăăăŠăźăăłăšăĺä¸ăăžăă
make ă使ç¨ăăŚăšăŠă¤ăšăĺćĺăăă¨ăăŤăéˇăă¨ăŞăăˇă§ăłăŽĺŽšéăćĺŽă§ăăžăăăăăăŽăăŠăĄăźăżăŽä¸ĄćšăŤéŠĺăŞĺ¤ă渥ăăă¨ăéŠĺ˝ă§ăăăŤăăăăăăăăăăĺżăăăŽăŻăăăăééăă§ăăĺŽéăč¤ć°ăŽăłăăźăĺż
čŚăŤăŞăăä¸ćçăŞăăăăłă°é
ĺăăŻăŞăźăłă˘ăăăăăă㍠GC ăŤčż˝ĺ ăŽĺ´ĺăăăăĺŻč˝ć§ăăăăžăăăăăŠăźăăłăšăŽčŚłçšăăč¨ăă°ăGo ăŠăłăżă¤ă ăŤćă塎ă䟸ăšăŞăççąăŻăăăžăăă
ăŞăăˇă§ăłăŻăćĺŽăăă厚éăžăăŻćĺŽăăăéˇăăŽăšăŠă¤ăšăĺ˛ăĺ˝ăŚăăă¨ă§ăă ăăă 2 ă¤ăŽč§ŁćąşçăŽăăĄă2 çŞçŽăŽč§ŁćąşçăŽćšăăăăăŤéŤéă§ăăĺžĺăăăăă¨ăăăăăžăăăăă ăăçšĺŽăŽĺŽšéă¨čż˝ĺ ă使ç¨ăăă¨ăĺ ´ĺăŤăăŁăŚăŻĺŽčŁ ă¨čŞăżĺăă厚ćăŤăŞăăă¨ăăăăžăă
ă˝ăźăšăłăźă :simple-github:
nil ă¨çŠşăŽăšăŠă¤ăšă桡ĺăăŚăă (#22)
???+ info "čŚç´"
`encoding/json` ă `reflect` ăăăąăźă¸ăŞăŠă使ç¨ăăă¨ăăŤăăăă桡䚹ăéżăăăăăŤăŻănil ăšăŠă¤ăšă¨çŠşăŽăšăŠă¤ăšăŽéăăçč§Łăăĺż
čŚăăăăžăăăŠăĄăăéˇăăźăă厚éăźăăŽăšăŠă¤ăšă§ăăăĺ˛ăĺ˝ăŚăĺż
čŚă¨ăăŞăăŽăŻ nil ăšăŠă¤ăšă ăă§ăă
Goč¨čŞă§ăŻănil ă¨çŠşăŽăšăŠă¤ăšăŻĺşĺĽăăăžăănil ăšăŠă¤ăšăŻ nil ăŤçăăăŽăŤĺŻžăă犺ăŽăšăŠă¤ăšăŽéˇăăŻăźăă§ăănil ăšăŠă¤ăšăŻçŠşă§ăăă犺ăŽăšăŠă¤ăšăŻĺż
ăăănil ă§ăăă¨ăŻéăăžăăăä¸ćšănil ăšăŠă¤ăšăŤăŻĺ˛ăĺ˝ăŚăŻĺż
čŚăăăžăăăăăŽăťăŻăˇă§ăłĺ
¨ä˝ăéăăŚă䝼ä¸ăŽćšćłă使ç¨ăăăă¨ăŤăăŁăŚăçśćłăŤĺżăăŚăšăŠă¤ăšăĺćĺăăăă¨ăčŚăŚăăžăăă
- ćçľçăŞéˇăăä¸ćă§ăšăŠă¤ăšă犺ăŽĺ ´ĺăŻ
var s []string - nil ă¨çŠşăŽăšăŠă¤ăšăä˝ćăăçłčĄŁć§ćă¨ăăŚăŽ
[]string(nil) - ĺ°ćĽăŽéˇăăăăăŁăŚăăĺ ´ĺăŻ
make([]string, length)
čŚç´ ăŞăă§ăšăŠă¤ăšăĺćĺăăĺ ´ĺăćĺžăŽăŞăăˇă§ăł []string{} ăŻéżăăăšăă§ăăćĺžăŤăäşćłĺ¤ăŽĺä˝ăé˛ăăăăŤă使ç¨ăăăŠă¤ăăŠăŞă nil ă¨çŠşăŽăšăŠă¤ăšăĺşĺĽăăŚăăăăŠăăă確čŞăăŚăżăžăăăă
ă˝ăźăšăłăźă :simple-github:
ăšăŠă¤ăšă犺ăăŠăăăéŠĺăŤç˘şčŞăăŞă (#23)
???+ info "čŚç´"
ăšăŠă¤ăšăŤčŚç´ ăĺŤăžăăŚăăŞăăă¨ă確čŞăăăŤăŻăăăŽéˇăă確čŞăăžăăăăăăăŻăăšăŠă¤ăšă `nil` ă§ăăă犺ă§ăăăăŤé˘äżăŞăćŠč˝ăăžăăăăăăŤă¤ăăŚăĺć§ă§ăăć確㪠API ăč¨č¨ăăăŤăŻănil ăšăŠă¤ăšă¨çŠşăŽăšăŠă¤ăšăĺşĺĽăăŞăă§ăă ăăă
ăšăŠă¤ăšăŤčŚç´ ăăăăăŠăăăĺ¤ćăăăŤăŻăăšăŠă¤ăšă nil ăăŠăăăăžăăŻăăŽéˇăă 0 ăŤçăăăăŠăăă確čŞăăăă¨ă§ĺ¤ćă§ăăžăăăšăŠă¤ăšă犺ă§ăăĺ ´ĺă¨ăšăŠă¤ăšă nil ă§ăăĺ ´ĺăŽä¸ĄćšăăŤăăźă§ăăăăăéˇăă確ăăăăă¨ăćčŻăŽćšćłă§ăă
ä¸ćšăă¤ăłăżăă§ăźăšăč¨č¨ăăă¨ăăŻă蝽垎ăŞăăă°ăŠăăłă°ă¨ăŠăźă辡ăăăŞăăă nil ăšăŠă¤ăšă¨çŠşăŽăšăŠă¤ăšăĺşĺĽăăŞăăăăŤăăĺż čŚăăăăžăăăšăŠă¤ăšăčżăă¨ăăŤănil ăžăăŻçŠşăŽăšăŠă¤ăšăčżăăăŠăăăŻăćĺłçăŤăćčĄçăŤăéăăŻăăăžăăăăłăźăŠăźăŤă¨ăŁăŚăŻăŠăĄăăĺăăă¨ăćĺłăăăŻăă§ăăăăŽĺçăŻăăăă§ăĺăă§ăăăăăă犺ăăŠăăă確čŞăăăŤăŻăăăă nil ăăŠăăă§ăŻăŞăăăăŽéˇăă確čŞăăžăăăă
ă˝ăźăšăłăźă :simple-github:
ăšăŠă¤ăšăŽăłăăźăćŁăăä˝ćăăŚăăŞă (#24)
???+ info "čŚç´"
çľăżčžźăżé˘ć° `copy` ă使ç¨ăăŚăăăšăŠă¤ăšăĺĽăŽăšăŠă¤ăšăŤăłăăźăăăŤăŻăăłăăźăăăčŚç´ ăŽć°ă 2 ă¤ăŽăšăŠă¤ăšăŽéˇăăŽéăŽćĺ°ĺ¤ăŤç¸ĺ˝ăăăă¨ăŤćł¨ćăăŚăă ăăă
čŚç´ ăăăăšăŠă¤ăšăăĺĽăŽăšăŠă¤ăšăŤăłăăźăăćä˝ăŻăăăŞăé ťçšăŤčĄăăăžăăăłăăźă使ç¨ăăĺ ´ĺăăłăăźĺ ăŤăłăăźăăăčŚç´ ăŽć°ăŻ 2 ă¤ăŽăšăŠă¤ăšăŽéˇăăŽéăŽćĺ°ĺ¤ăŤç¸ĺ˝ăăăă¨ăŤćł¨ćăăĺż čŚăăăăžăăăžăăăšăŠă¤ăšăăłăăźăăăăăŽäťăŽäťŁćżć掾ăĺĺ¨ăăăă¨ăŤăçćăăŚăă ăăăăăŽăăăăłăźăăăźăšă§ăăăăčŚă¤ăăŚăéŠăăă¨ăŻăăăžăăă
ă˝ăźăšăłăźă :simple-github:
append ăŽä˝żç¨ăŤăăäşćłĺ¤ăŽĺŻä˝ç¨ (#25)
???+ info "čŚç´"
2ă¤ăŽç°ăŞăé˘ć°ăĺăé
ĺăŤĺşăĽăăšăŠă¤ăšă使ç¨ăăĺ ´ĺăŤăcopy ăžăăŻĺŽĺ
¨ăšăŠă¤ăšĺźă使ç¨ăăăă¨ă§ `append` ăŤăăčĄçŞăé˛ăăă¨ăă§ăăžăăăă ăă大ăăŞăšăŠă¤ăšă縎ĺ°ăăĺ ´ĺăăĄă˘ăŞăŞăźăŻăé˛ăăă¨ăă§ăăăŽăŻăšăŠă¤ăšăŽăłăăźă ăă§ăă
ăšăŠă¤ăšă使ç¨ăăă¨ăăŻăäşćłĺ¤ăŽĺŻä˝ç¨ăŤă¤ăŞăăçśćłăŤç´é˘ăăĺŻč˝ć§ăăăăă¨ăčŚăăŚăăĺż čŚăăăăžăăçľćăŽăšăŠă¤ăšăŽéˇăăăăŽĺŽšéăăĺ°ăăĺ ´ĺăčż˝ĺ ăŤăăŁăŚĺ ăŽăšăŠă¤ăšăĺ¤ć´ăăăĺŻč˝ć§ăăăăžăă辡ăăĺžăĺŻä˝ç¨ăŽçŻĺ˛ăĺśéăăăĺ ´ĺăŻăăšăŠă¤ăšăŽăłăăźăžăăŻĺŽĺ ¨ăšăŠă¤ăšĺźă使ç¨ă§ăăžăăăăăŤăăăăłăăźăĺŽčĄă§ăăŞăăŞăăžăă
???+ note "čŁčśł"
`s[low:high:max]`ďźĺŽĺ
¨ăšăŠă¤ăšĺźďźââăăŽĺ˝äť¤ćăŻă厚éă `max - low` ăŤçăăăă¨ăé¤ăă°ă`s[low:high]` ă§ä˝ćăăăăšăŠă¤ăšă¨ĺć§ăŽăšăŠă¤ăšăä˝ćăăžăă
ă˝ăźăšăłăźă :simple-github:
ăšăŠă¤ăšă¨ăĄă˘ăŞăŞăźăŻ (#26)
???+ info "čŚç´"
ăă¤ăłăżăŽăšăŠă¤ăšăžăăŻăă¤ăłăżăăŁăźăŤăăćă¤ć§é ä˝ăćä˝ăăĺ ´ĺăăšăŠă¤ăšćä˝ăŤăăŁăŚé¤ĺ¤ăăăčŚç´ ă nil ă¨ăăăă¨ă§ăĄă˘ăŞăŞăźăŻăĺéżă§ăăžăă
厚éćźă
大ăăŞăšăŠă¤ăšăžăăŻé ĺăăšăŠă¤ăšăăă¨ăăĄă˘ăŞćśč˛ťăéŤăăŞăĺŻč˝ć§ăăăăă¨ăŤćł¨ćăăŚăă ăăăćŽăăŽăšăăźăšăŻ GC ăŤăăŁăŚĺĺŠç¨ăăăăĺ°ć°ăŽčŚç´ ăă使ç¨ăăŞăăŤăăăăăăă大ăăŞăăăăłă°é ĺăäżćăăăžăăăšăŠă¤ăšăŽăłăăźăăăăă¨ă§ăăăŽăăăŞäşć ăé˛ăăă¨ăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ăšăŠă¤ăšă¨ăă¤ăłăż
ăă¤ăłăżăžăăŻăă¤ăłăżăăŁăźăŤăăĺŤăć§é ä˝ă使ç¨ăăŚăšăŠă¤ăšćä˝ăăăĺ ´ĺăGC ăăăăăŽčŚç´ ăĺĺŠç¨ăăŞăăă¨ăçĽăŁăŚăăĺż
čŚăăăăžăăăăŽĺ ´ĺăŽé¸ćč˘ăŻăăłăăźăĺŽčĄăăăăćŽăăŽčŚç´ ăžăăŻăăŽăăŁăźăŤăăć示ç㍠nil ă¨ăăăă¨ă§ăă
ă˝ăźăšăłăźă :simple-github:
éĺšçăŞăăăăŽĺćĺ (#27)
???+ info "čŚç´"
ăăăăä˝ćăăă¨ăăăăŽéˇăăăă§ăŤăăăŁăŚăăĺ ´ĺăŻăćĺŽăăăéˇăă§ĺćĺăăžăăăăăŤăăăĺ˛ăĺ˝ăŚăŽć°ăć¸ăăăăăŠăźăăłăšăĺä¸ăăžăă
ăăăăŻăăăźăťĺ¤ăă˘ăŽé ĺşăŞăăłăŹăŻăˇă§ăłăćäžăăžăăăŞăăăăăăăŽăă˘ăŻĺşćăŽăăźăćăĄăžăăGoč¨čŞă§ăŻăăăăăŻăăăˇăĽăăźăăŤăăźăżć§é ăŤĺşăĽăăŚăăžăăĺ é¨çăŤăŻăăăăˇăĽăăźăăŤăŻăăąăăăŽé ĺă§ăăăĺăăąăăăŻăăźăťĺ¤ăă˘ăŽé ĺă¸ăŽăă¤ăłăżă§ăă
ăăăăŤĺŤăžăăčŚç´ ăŽć°ăäşĺăŤăăăŁăŚăăĺ ´ĺăŻăăăŽĺćăľă¤ăşăćĺŽăăŚä˝ćăăĺż čŚăăăăžăăăăăăŽĺ˘ĺ¤§ăŻăĺĺăŞăšăăźăšăĺĺ˛ăĺ˝ăŚăăăăšăŚăŽčŚç´ ăŽăăŠăłăšăĺ調ć´ăăĺż čŚăăăăăăč¨çŽéăé常ăŤĺ¤ăăŞăăžăăăăăăŤăăăăăĺéżăăăă¨ăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ăăăă¨ăĄă˘ăŞăŞăźăŻ (#28)
???+ info "čŚç´"
ăăăăŻăĄă˘ăŞĺ
ă§ĺ¸¸ăŤĺ˘ĺ¤§ăăĺŻč˝ć§ăăăăžăăă縎ĺ°ăăăă¨ăŻăăăžăăăăăăăŁăŚăăĄă˘ăŞăŽĺéĄăçşçăăĺ ´ĺăŻăăăăă埡ĺśçăŤĺçćăăăăăă¤ăłăżă使ç¨ăăăăăăŞăŠăăăžăăžăŞć掾ă芌ăăă¨ăă§ăăžăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
ă˝ăźăšăłăźă :simple-github:
誤ăŁăćšćłăŤăăĺ¤ăŽćŻčź (#29)
???+ info "čŚç´"
Goč¨čŞă§ĺăćŻčźăââăăŤăŻă2 ă¤ăŽĺăćŻčźĺŻč˝ăŞăă°ă== ćźçŽĺ㨠!= ćźçŽĺă使ç¨ă§ăăžăăçĺ˝ĺ¤ăć°ĺ¤ăćĺĺăăă¤ăłăżăăăŁăăŤăăăăłć§é ä˝ăĺŽĺ
¨ăŤćŻčźĺŻč˝ăŞĺă§ć§ćăăăŚăăžăăăă䝼ĺ¤ăŻă `reflect.DeepEqual` ă使ç¨ăăŚăŞăăŹăŻăˇă§ăłăŽäťŁĺăćŻćăăăçŹčŞăŽĺŽčŁ
ă¨ăŠă¤ăăŠăŞă使ç¨ăăăă¨ăă§ăăžăă
ĺšćçăŤćŻčźăăăŤăŻă == 㨠!= ăŽä˝żç¨ćšćłăçč§Łăăăă¨ăä¸ĺŻćŹ ă§ăăăăăăŽćźçŽĺăŻăćŻčźĺŻč˝ăŞč˘ŤćźçŽĺă§ä˝żç¨ă§ăăžăă
- çĺ˝ĺ¤ - 2 ă¤ăŽçĺ˝ĺ¤ăçăăăăŠăăăćŻčźăăžăă
- ć°ĺ¤ (intăfloatăăăăł complex ĺ) - 2 ă¤ăŽć°ĺ¤ăçăăăăŠăăăćŻčźăăžăă
- ćĺĺ - 2 ă¤ăŽćĺĺăçăăăăŠăăăćŻčźăăžăă
- ăăŁă㍠- 2 ă¤ăŽăăŁăăŤăĺă make ĺźăłĺşăăŤăăŁăŚä˝ćăăăăăăžăăŻä¸Ąćšă nil ă§ăăăăćŻčźăăžăă
- ă¤ăłăżăă§ăźăš - 2 ă¤ăŽă¤ăłăżăă§ăźăšăĺăĺçăżă¤ăă¨çăăĺçĺ¤ăćă¤ăăŠăăăăžăăŻä¸Ąćšă nil ă§ăăăăŠăăăćŻčźăăžăă
- ăă¤ăłăż - 2 ă¤ăŽăă¤ăłăżăăĄă˘ăŞĺ ăŽĺăĺ¤ăćăăŚăăăăăžăăŻä¸Ąćšă¨ă nil ă§ăăăăćŻčźăăžăă
- ć§é ä˝ă¨é ĺ - éĄäźźăăĺă§ć§ćăăăŚăăăăŠăăăćŻčźăăžăă
???+ note "čŁčśł"
`?` ă `>=` ă `<` ăăăăł `>` ćźçŽĺăć°ĺ¤ĺă§ä˝żç¨ăăŚĺ¤ăćŻčźăăăăćĺĺă§ĺĺĽé ĺşăćŻčźăăăăăăă¨ăă§ăăžăă
袍ćźçŽĺăćŻčźă§ăăŞăĺ ´ĺďźăšăŠă¤ăšă¨ăăăăŞăŠďźăăŞăăŹăŻăˇă§ăłăŞăŠăŽäťăŽćšćłăĺŠç¨ăăĺż
čŚăăăăžăăăŞăăŹăŻăˇă§ăłăŻăĄăżăăă°ăŠăăłă°ăŽä¸ç¨Žă§ăăăă˘ăăŞăąăźăˇă§ăłăăăŽć§é ă¨ĺä˝ăĺ
çăăŚĺ¤ć´ăăćŠč˝ăćăăžăăăă¨ăă°ăGoč¨čŞă§ăŻ reflect.DeepEqual ă使ç¨ă§ăăžăăăăŽé˘ć°ăŻă2ă¤ăŽĺ¤ăĺ帰çăŤčŞżăšăăă¨ăŤăăŁăŚă2ă¤ăŽčŚç´ ăĺŽĺ
¨ăŤçăăăăŠăăăĺ ąĺăăžăăĺăĺ
ĽăăăăčŚç´ ăŻăĺşćŹĺăŤĺ ăăŚăé
ĺăć§é ä˝ăăšăŠă¤ăšăăăăăăă¤ăłăżăă¤ăłăżăă§ăźăšăé˘ć°ă§ăăăăăăć大ăŽč˝ă¨ă犴ăŻăăăŠăźăăłăšä¸ăŽăăăŤăăŁă§ăă
ĺŽčĄćăŽăăăŠăźăăłăšăéčŚăŞĺ ´ĺăŻăçŹčŞăŽăĄă˝ăăăĺŽčŁ ăăăă¨ăćĺă¨ăŞăĺŻč˝ć§ăăăăžăă
čż˝č¨ďźć¨ćşăŠă¤ăăŠăŞăŤăŻć˘ăŤćŻčźăĄă˝ăăăăăă¤ăăăăă¨ăčŚăăŚăăĺż
čŚăăăăžăăăă¨ăă°ăćéŠĺăăă bytes.Compare é˘ć°ă使ç¨ăăŚă2ă¤ăŽăă¤ăăšăŠă¤ăšăćŻčźă§ăăžăăçŹčŞăŽăĄă˝ăăăĺŽčŁ
ăăĺăŤăčťčźŞăŽĺçşćăăăŞăăăăŤăăžăăăă
ă˝ăźăšăłăźă :simple-github:
ĺśĺžĄć§é
čŚç´ ă range ăŤăźăĺ
ă§ăłăăźăăăăă¨ăçĽăăŞă (#30)
???+ info "čŚç´"
`range` ăŤăźăĺ
㎠value čŚç´ ăŻăłăăźă§ăăăăăăŁăŚăăă¨ăă°ć§é ä˝ăĺ¤ć´ăăăŤăŻăăăŽă¤ăłăăăŻăšăäťăăŚă˘ăŻăťăšăăăăĺžćĽăŽ `for` ăŤăźăăäťăăŚă˘ăŻăťăšăăžăăăďźĺ¤ć´ăăčŚç´ ăžăăŻăăŁăźăŤăăăă¤ăłăżă§ăăĺ ´ĺăé¤ăďźă
range ăŤăźăă使ç¨ăăă¨ăăăžăăžăŞăăźăżć§é ăŤĺ垊ĺŚçăčĄăăă¨ăă§ăăžăă
- ćĺĺ
- é ĺ
- é ĺă¸ăŽăă¤ăłăż
- ăšăŠă¤ăš
- ăăă
- ĺ俥ăăŁăăŤ
ĺ¤ĺ
¸ç㪠for ăŤăźăă¨ćŻčźăăă¨ărange ăŤăźăăŻăăŽç°Ąć˝ăŞć§ćăŽăăăă§ăăăăăŽăăźăżć§é ăŽăăšăŚăŽčŚç´ ăŤĺ垊ĺŚçăăăăŽăŤäžżĺŠă§ăă
ăă ăărange ăŤăźăĺ ăŽĺ¤čŚç´ ăŻăłăăźă§ăăăă¨ăčŚăăŚăăĺż čŚăăăăžăăăăăăŁăŚăĺ¤ăĺ¤ć´ăăĺż čŚăăăć§é ä˝ăŽĺ ´ĺăĺ¤ć´ăăĺ¤ăžăăŻăăŁăźăŤăăăă¤ăłăżă§ăŞăéăăčŚç´ čŞä˝ă§ăŻăŞăăłăăźăŽăżăć´ć°ăăžăărange ăŤăźăăžăăŻĺžćĽăŽ for ăŤăźăă使ç¨ăăŚă¤ăłăăăŻăšçľçąă§čŚç´ ăŤă˘ăŻăťăšăăăă¨ăć¨ĺĽ¨ăăăžăă
ă˝ăźăšăłăźă :simple-github:
range ăŤăźăďźăăŁăăŤă¨é
ĺďźă§ăŽĺźć°ăŽčŠäžĄćšćłăçĽăăŞă (#31)
???+ info "čŚç´"
`range` ćźçŽĺăŤć¸ĄăăăĺźăŻăŤăźăăŽéĺ§ĺ㍠1 ĺă ăčŠäžĄăăăăă¨ăçč§Łăăă¨ăăăŁăăŤăžăăŻăšăŠă¤ăšăŽĺ垊ĺŚçăŤăăăéĺšçăŞĺ˛ăĺ˝ăŚăŞăŠăŽăăăăĄăŞééăăĺéżă§ăăžăă
range ăŤăźăăŻăďźăżă¤ăăŤé˘äżăŞăďźăłăăźăĺŽčĄăăăă¨ăŤăăăăŤăźăăŽéĺ§ĺăŤăćĺŽăăăĺźă 1 ĺă ăčŠäžĄăăžăăăă¨ăă°ă誤ăŁăčŚç´ ăŤă˘ăŻăťăšăăŚăăžăăă¨ăăăăăŞăăăăĄăŞééăăéżăăăăăŤăăăŽĺä˝ăčŚăăŚăăĺż čŚăăăăžăăăă¨ăă°
a := [3]int{0, 1, 2}
for i, v := range a {
a[2] = 10
if i == 2 {
fmt.Println(v)
}
}
ăăŽăłăźăăŻăćĺžăŽă¤ăłăăăŻăšă 10 ăŤć´ć°ăăžăăăăăăăăŽăłăźăăĺŽčĄăăă¨ă10 ăŻĺşĺăăăžăăă 2 ăĺşĺăăăžăă
ă˝ăźăšăłăźă :simple-github:
range ăŤăźăĺ
ăŤăăăăă¤ăłăżčŚç´ ăŽä˝żç¨ăĺăźă役éżăĺăăŁăŚăăŞă (#32)
???+ info "čŚç´"
ăăźăŤăŤĺ¤ć°ă使ç¨ăăăăă¤ăłăăăŻăšă使ç¨ăăŚčŚç´ ăŤă˘ăŻăťăšăăă¨ăăŤăźăĺ
ă§ăă¤ăłăżăăłăăźăăéăŽééăăé˛ăăă¨ăă§ăăžăă
range ăŤăźăă使ç¨ăăŚăăźăżć§é ăŤĺ垊ĺŚçăć˝ăĺ ´ĺăăăšăŚăŽĺ¤ăĺä¸ăŽä¸ćăŽă˘ăăŹăšăćă¤ä¸ćăŽĺ¤ć°ăŤĺ˛ăĺ˝ăŚăăăăă¨ăćăĺşăăŚăă ăăăăăăŤăĺĺ垊ĺŚçä¸ăŤăăŽĺ¤ć°ăĺç
§ăăăă¤ăłăżăäżĺăăă¨ăĺăčŚç´ ăă¤ăžăćć°ăŽčŚç´ ăĺç
§ăăĺăăă¤ăłăżăäżĺăăăă¨ăŤăŞăăžăăăăŽĺéĄăŻăăŤăźăăŽăšăłăźăĺ
ăŤăăźăŤăŤĺ¤ć°ă埡ĺśçăŤä˝ćăăăăă¤ăłăăăŻăšăäťăăŚăšăŠă¤ăščŚç´ ăĺç
§ăăăă¤ăłăżăä˝ćăăăă¨ă§č§Łćąşă§ăăžăăăŠăĄăăŽč§Łćąşçă§ăĺéĄăăăžăăă
ă˝ăźăšăłăźă :simple-github:
ăăăăŽĺ垊ĺŚçä¸ăŤčޤăŁă䝎ĺŽăăăďźĺ垊ĺŚçä¸ăŽé ĺşäťăă¨ăăăăŽćżĺ Ľďź (#33)
???+ info "čŚç´"
ăăăă使ç¨ăăă¨ăăŤäşć¸ŹĺŻč˝ăŞĺşĺăäżč¨źăăăŤăŻăăăăăŽăăźăżć§é ă揥ăŽă¨ăăă§ăăăă¨ăŤćł¨ćăăŚăă ăăă
- ăăźăżăăăźă§ä¸Śăšćżăăžăă
- ćżĺ Ľé ĺşăŻäżćăăăžăă
- ĺ垊ĺŚçé ĺşăŻćąşăžăŁăŚăăžăă
- ăăĺ垊ĺŚçä¸ăŤčż˝ĺ ăăăčŚç´ ăăăŽĺŚçä¸ăŤçćăăăăă¨ăäżč¨źăăžăă
ă˝ăźăšăłăźă :simple-github:
break ćăăŠăŽăăăŤćŠč˝ăăăăĺăăŁăŚăăŞă (#34)
???+ info "čŚç´"
ăŠăăŤă¨ `break` ăžă㯠`continue` ăŽä˝ľç¨ăŻăçšĺŽăŽĺ˝äť¤ćă埡ĺśçăŤä¸ćăăžăăăăăŻăăŤăźăĺ
㎠`switch` ăžă㯠`select` ćă§ĺ˝šçŤăĄăžăă
é常ăbreak ćăŻăŤăźăăŽĺŽčĄăçľäşăăăăăŤä˝żç¨ăăăžăăăŤăźăă switch ăžă㯠select ă¨çľăżĺăăăŚä˝żç¨ââăăăĺ ´ĺăçŽçăŽĺ˝äť¤ćă§ăŻăŞăăŽăŤä¸ćăăăŚăăžăăă¨ăăăăšăăăăă¨ăéçşč ăŤăŻăăăăăžăăăă¨ăă°
for i := 0; i < 5; i++ {
fmt.Printf("%d ", i)
switch i {
default:
case 2:
break
}
}
break ć㯠for ăŤăźăăçľäşăăăăŽă§ăŻăŞăă䝣ăă㍠switch ćăçľäşăăăžăăăăăăŁăŚăăăŽăłăźă㯠0 ăă 2 ăžă§ăĺ垊ăă䝣ăăăŤă0 ăă 4 ăžă§ăĺ垊ăăžăďź0 1 2 3 4ďźă
čŚăăŚăăăšăéčŚăŞăŤăźăŤăŽ1ă¤ăŻă break ćăŻćăĺ
ĺ´ăŽ for ăswitch ăăžă㯠select ćăŽĺŽčĄăçľäşăăă¨ăăăă¨ă§ăăĺăŽäžă§ăŻăswitch ćăçľäşăăžăă
switch ćăŽäťŁăăăŤăŤăźăăä¸ćăăćăć
Łç¨çăŞćšćłăŻăŠăăŤă使ç¨ăăăă¨ă§ăă
loop:
for i := 0; i < 5; i++ {
fmt.Printf("%d ", i)
switch i {
default:
case 2:
break loop
}
}
ăăă§ăŻăloop ăŠăăŤă for ăŤăźăăŤé˘éŁäťăăžăă 揥ăŤăbreak ć㍠loop ăŠăăŤăćĺŽăăăŽă§ăswitch ă§ăŻăŞă loop ăä¸ćăăăžăăăăŁăŚăăăŽć°ăăăăźă¸ă§ăłăŻäşćłăŠăă 0 1 2 ăĺşĺăăžăă
ă˝ăźăšăłăźă :simple-github:
ăŤăźăĺ
ă§ defer ă使ç¨ăă (#35)
???+ info "čŚç´"
é˘ć°ĺ
ăŽăŤăźăăă¸ăăŻăŽć˝ĺşăŻăĺĺ垊ăŽćĺžă§ăŽ `defer` ćăŽĺŽčĄăŤă¤ăŞăăăžăă
defer ćăŻăä¸ä˝ăăăăŻăŽé˘ć°ăćťăăžă§ĺźăłĺşăăŽĺŽčĄăé
ăăăžăăăăăŻä¸ťăŤĺŽĺăłăźăăĺć¸ăăăăăŤä˝żç¨ăăăžăăăă¨ăă°ăăŞă˝ăźăšăćçľçăŤéăăĺż
čŚăăăĺ ´ĺăŻădefer ă使ç¨ăăŚăreturn ăĺŽčĄăăĺăŤăŻăăźă¸ăŁĺźăłĺşăăçš°ăčżăăă¨ăéżăăăă¨ăă§ăăžăă
defer ă§ăăăăăăšăŽ1ă¤ăŻăä¸ä˝ăăă㯠ăŽé˘ć°ăćťăŁăă¨ăăŤé˘ć°ĺźăłĺşăăăšăąă¸ăĽăźăŤăăăăă¨ăĺżăăăă¨ă§ăăăă¨ăă°
func readFiles(ch <-chan string) error {
for path := range ch {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
// ăăĄă¤ăŤăŽĺŚçăăă
}
return nil
}
defer ĺźăłĺşăăŻăĺăŤăźăĺ垊ä¸ă§ăŻăŞăăreadFiles é˘ć°ăčżăăăă¨ăăŤĺŽčĄăăăžăă readFiles ăčżăăŞăĺ ´ĺăăăĄă¤ăŤč¨čż°ĺăŻć°¸äš
ăŤéăăăžăžăŤăŞăăăŞăźăŻăçşçăăžăă
ăăŽĺéĄăč§ŁćąşăăăăăŽä¸čŹçăŞć掾ăŽ1ă¤ăŻă defer ăŽĺžăŤăĺĺ垊ä¸ăŤĺźăłĺşăăăä¸ä˝ăăăăŻăŽé˘ć°ăä˝ćăăăă¨ă§ăă
func readFiles(ch <-chan string) error {
for path := range ch {
if err := readFile(path); err != nil {
return err
}
}
return nil
}
func readFile(path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
// ăăĄă¤ăŤăŽĺŚçăăă
return nil
}
ĺĽăŽč§ŁćąşçăŻăreadFile é˘ć°ăăŻăăźă¸ăŁăŤăăăă¨ă§ăăăćŹčłŞçăŤăŻĺăă§ăăĺĽăŽä¸ä˝ăăăăŻăŽé˘ć°ăčż˝ĺ ăăŚăĺĺ垊ä¸ăŤ defer ĺźăłĺşăăĺŽčĄăăžăă
ă˝ăźăšăłăźă :simple-github:
ćĺĺ
ăŤăźăłăçč§ŁăăŚăăŞă (#36)
???+ info "čŚç´"
ăŤăźăłă Unicode ăłăźăăă¤ăłăăŽćŚĺżľăŤĺŻžĺżăăč¤ć°ăŽăă¤ăă§ć§ćăăăĺŻč˝ć§ăăăăă¨ăçč§Łăăăă¨ăŻă Go éçşč
ăćĺĺăćŁç˘şăŤćä˝ăăăăăŤä¸ĺŻćŹ ă§ăă
Goč¨čŞă§ăŻăŤăźăłăăăăăĺ ´ćăŤä˝żç¨ăăăăăă揥ăŽçšăçč§Łăăăă¨ăéčŚă§ăă
- ćĺăťăăăŻćĺăŽéĺă§ăăăă¨ăłăłăźăăŁăłă°ăŻćĺăťăăăăă¤ăăŞăŤĺ¤ćăăćšćłăč¨čż°ăăžăă
- Goč¨čŞă§ăŻăćĺĺăŻäťťćăŽăă¤ăăŽä¸ĺ¤ăšăŠă¤ăšăĺç §ăăžăă
- Goč¨čŞăŽă˝ăźăšăłăźă㯠UTF-8 ă§ă¨ăłăłăźăăăăŚăăžăăăăăăŁăŚăăăšăŽćĺĺăŞăăŠăŤăŻ UTF-8 ćĺĺă§ăăăă ăăćĺĺăŤăŻäťťćăŽăă¤ăăĺŤăžăăĺŻč˝ć§ăăăăăăćĺĺăďźă˝ăźăšăłăźăă§ăŻăŞăďźäťăŽĺ ´ćăăĺĺžăăăĺ ´ĺăăăŽćĺĺă UTF-8 ă¨ăłăłăźăăŁăłă°ăŤĺşăĽăăŚăăäżč¨źăŻăăăžăăă
rune㯠Unicode ăłăźăăă¤ăłăăŽćŚĺżľăŤĺŻžĺżăăĺä¸ăŽĺ¤ă§čĄ¨ăăăă˘ă¤ăă ăćĺłăăžăă- UTF-8 ă使ç¨ăăă¨ăUnicode ăłăźăăă¤ăłăă 1 ď˝ 4 ăă¤ăăŤă¨ăłăłăźăă§ăăžăă
- Goč¨čŞă§ćĺĺăŤĺŻžăăŚ
len()ă使ç¨ăăă¨ăăŤăźăłć°ă§ăŻăŞăăă¤ăć°ăčżăăăžăă
ă˝ăźăšăłăźă :simple-github:
ćĺĺăŤĺŻžăăä¸ćŁăŞĺ垊ĺŚç (#37)
???+ info "čŚç´"
`range` ćźçŽĺă使ç¨ăăŚćĺĺăĺ垊ĺŚçăăă¨ăăŤăźăłăŽăă¤ăăˇăźăąăłăšăŽéĺ§ă¤ăłăăăŻăšăŤĺŻžĺżăăă¤ăłăăăŻăšă使ç¨ăăŚăŤăźăłăĺ垊ĺŚçăăăžăăçšĺŽăŽăŤăźăłă¤ăłăăăŻăšďź 3 çŞçŽăŽăŤăźăłăŞăŠďźăŤă˘ăŻăťăšăăăŤăŻăćĺĺă `[]rune` ăŤĺ¤ćăăžăă
ćĺĺăŽĺ垊ĺŚçăŻăéçşč ăŤă¨ăŁăŚä¸čŹçăŞćä˝ă§ăăăăăăăćĺĺĺ ăŽĺăŤăźăłăŤĺŻžăăŚćä˝ăĺŽčĄăăăăçšĺŽăŽé¨ĺćĺĺăć¤ç´˘ăăçŹčŞăŽé˘ć°ăĺŽčŁ ăăĺż čŚăăăă§ăăăăăŠăĄăăŽĺ ´ĺăăćĺĺăŽç°ăŞăăŤăźăłăĺ垊ĺŚçăăĺż čŚăăăăžăăăăăăĺ垊ĺŚçăăŠăŽăăăŤćŠč˝ăăăăŤă¤ăăŚăŻĺ°ćăăăăă§ăă
揥ăŽäžăčăăŚăżăžăăăă
s := "hĂŞllo"
for i := range s {
fmt.Printf("position %d: %c\n", i, s[i])
}
fmt.Printf("len=%d\n", len(s))
position 0: h
position 1: Ă
position 3: l
position 4: l
position 5: o
len=6
桡䚹ăćăĺŻč˝ć§ăŽăă 3 çšăĺăä¸ăăžăăăă
- 2 çŞçŽăŽăŤăźăłăŻăĺşĺă§ăŻ ĂŞ ă§ăŻăŞă Ă ăŤăŞăăžăă
- position 1 ăă position 3 ăŤă¸ăŁăłăăăžăăă position 2 ăŤăŻä˝ăăăăŽă§ăăăăă
- len 㯠6 ăčżăăžăăăs ăŤăŻ 5 ă¤ăŽăŤăźăłăăĺŤăžăăŚăăžăăă
çľćăŽćĺžăăčŚăŚăăăžăăăălen ăŻăŤăźăłć°ă§ăŻăŞăăćĺĺĺ
ăŽăă¤ăć°ăčżăăă¨ăŻăă§ăŤčż°ăšăžăăăćĺĺăŞăăŠăŤă s ăŤĺ˛ăĺ˝ăŚăŚăăăăăs 㯠UTF-8 ćĺĺă§ăăä¸ćšăçšćŽćĺăĂŞă㯠1 ăă¤ăă§ă¨ăłăłăźăăăăžăăă 2 ăă¤ăĺż
čŚă§ăăăăăăŁăŚălen(s) ăĺźăłĺşă㨠6 ăčżăăăžăă
ĺăŽäžă§ăŻăĺăŤăźăłăĺ垊ĺŚçăăŚăăŞăăă¨ăçč§Łăăĺż čŚăăăăžăă䝣ăăăŤăăŤăźăłăŽĺéĺ§ă¤ăłăăăŻăšăĺ垊ĺŚçăăžăă
s[i] ăĺşĺăăŚă i çŞçŽăŽăŤăźăłăŻĺşĺăăăžăăăă¤ăłăăăŻăš i ăŽăă¤ă㎠UTF-8 襨çžăĺşĺăăžăăăăăăŁăŚă hĂŞllo ăŽäťŁăă㍠hĂllo ăĺşĺăăăăžăă
ăăžăăžăŞăŤăźăłćĺăăăšăŚĺşĺăăăĺ ´ĺăŻă range ćźçŽĺ㎠value čŚç´ ă使ç¨ăăăă¨ăă§ăăžăă
s := "hĂŞllo"
for i, r := range s {
fmt.Printf("position %d: %c\n", i, r)
}
ăžăăŻăćĺĺăăŤăźăłăŽăšăŠă¤ăšăŤĺ¤ćăăăăăĺ垊ĺŚçăăăă¨ăă§ăăžăă
s := "hĂŞllo"
runes := []rune(s)
for i, r := range runes {
fmt.Printf("position %d: %c\n", i, r)
}
ăăŽč§Łćąşçă§ăŻă䝼ĺăŽč§Łćąşçă¨ćŻčźăăŚĺŽčĄćăŽăŞăźăăźăăăăçşçăăăă¨ăŤćł¨ćăăŚăă ăăăĺŽéăćĺĺăăŤăźăłăŽăšăŠă¤ăšăŤĺ¤ćăăăŤăŻăčż˝ĺ ăŽăšăŠă¤ăšăĺ˛ăĺ˝ăŚăăă¤ăăăŤăźăłăŤĺ¤ćăăĺż čŚăăăăžăăćĺĺăŽăă¤ăć°ă n ă¨ăăă¨ăćéč¨çŽé㯠O(n) ăŤăŞăăžăăăăăăŁăŚăăăšăŚăŽăŤăźăłăĺ垊ĺŚçăăĺ ´ĺăŻăćĺăŽč§Łćąşçă使ç¨ăăăšăă§ăă
ăă ăăćĺăŽćšćłă使ç¨ăăŚćĺĺ㎠i çŞçŽăŽăŤăźăłăŤă˘ăŻăťăšăăăĺ ´ĺăŻăăŤăźăłă¤ăłăăăŻăšăŤă˘ăŻăťăšă§ăăžăăă䝣ăăăŤăăă¤ăăˇăźăąăłăšĺ ăŽăŤăźăłăŽéĺ§ă¤ăłăăăŻăšăăăăăžăă
s := "hĂŞllo"
r := []rune(s)[4]
fmt.Printf("%c\n", r) // o
ă˝ăźăšăłăźă :simple-github:
trim é˘ć°ăŽčŞ¤ç¨ (#38)
???+ info "čŚç´"
`strings.TrimRight` ăť `strings.TrimLeft` ăŻăćĺŽăăăăťăăăŤĺŤăžăăăăšăŚăŽćŤĺ°žăťĺ
é ăŽăŤăźăłăĺé¤ăăžăăă `strings.TrimSuffix` ăť `strings.TrimPrefix` ăŻăćĺŽăăăćĽĺ°žčžăťćĽé čžăŽăŞăćĺĺăčżăăžăă
ăă¨ăă°
fmt.Println(strings.TrimRight("123oxo", "xo"))
㯠123 ăĺşĺăăžă
éăŤă strings.TrimLeft ăŻăăťăăăŤĺŤăžăăĺ
é ăŽăŤăźăłăăăšăŚĺé¤ăăžăă
ä¸ćšăstrings.TrimSuffix ăť strings.TrimPrefix ăŻăćĺŽăăăćŤĺ°žăŽćĽĺ°žčžăťćĽé čžăé¤ăăćĺĺăčżăăžăă
ă˝ăźăšăłăźă :simple-github:
ćéŠĺăä¸ĺĺăŞćĺĺăŽéŁçľ (#39)
???+ info "čŚç´"
ćĺĺăŽăŞăšăăŽéŁçľăŻăĺ垊ăă¨ăŤć°ăăćĺĺăĺ˛ăĺ˝ăŚăăăŞăăăăŤă`strings.Builder` ă使ç¨ăăŚčĄăĺż
čŚăăăăžăă
+= ćźçŽĺăç¨ăăŚăšăŠă¤ăšăŽăăšăŚăŽćĺĺčŚç´ ăéŁçľăă concat é˘ć°ăčăăŚăżăžăăăă
func concat(values []string) string {
s := ""
for _, value := range values {
s += value
}
return s
}
ĺĺ垊ä¸ăŤă += ćźçŽĺ㯠s 㨠value ćĺĺăéŁçľăăžăăä¸čŚăăă¨ăăăŽé˘ć°ăŻééăŁăŚăăŞăăăăŤčŚăăăăăăăžăăăăăăăăăŽĺŽčŁ
ăŻăćĺĺăŽć ¸ă¨ăŞăçšć§ăŽ1ă¤ă§ăăä¸ĺ¤ć§ăĺżăăŚăăžăăăăăăŁăŚăĺĺ垊ă§ăŻ s ăŻć´ć°ăăăžăăăăĄă˘ăŞĺ
ăŤć°ăăćĺĺăĺĺ˛ăĺ˝ăŚăăăăăăăŽé˘ć°ăŽăăăŠăźăăłăšăŤĺ¤§ăăŞĺ˝ąéżăä¸ăăžăă
嚸ăăŞăă¨ăŤă strings.Builder ăç¨ăăăă¨ă§ăăăŽĺéĄăŤĺŻžĺŚăăč§Łćąşçăăăăžăă
func concat(values []string) string {
sb := strings.Builder{}
for _, value := range values {
_, _ = sb.WriteString(value)
}
return sb.String()
}
ĺĺ垊ä¸ăŤăvalue ăŽĺ
厚ăĺ
é¨ăăăăĄăŤčż˝ĺ ăă WriteString ăĄă˝ăăăĺźăłĺşăăŚçľćăŽćĺĺăć§çŻăăăĄă˘ăŞăŽăłăăźăćĺ°éăŤćăăăă¨ăă§ăăžăăă
???+ note "čŁčśł"
`WriteString` 㯠2 çŞçŽăŽĺşĺă¨ăăŚă¨ăŠăźăčżăăžăăăćĺłçăŤçĄčŚăăžăăăăĺŽéăăăŽăĄă˝ăă㯠nil ă¨ăŠăźäťĽĺ¤ăčżăăă¨ăŻăăăžăăăă§ăŻăăăŽăĄă˝ăăăăˇă°ăăăŁăŽä¸é¨ă¨ăăŚă¨ăŠăźăčżăçŽçăŻä˝ă§ăăăăă`strings.Builder` 㯠`io.StringWriter` ă¤ăłăżăă§ăźăšăĺŽčŁ
ăăŚăăăăăăŤăŻ `WriteString(s string) (n int, err error)` ă¨ăă1ă¤ăŽăĄă˝ăăăĺŤăžăăŚăăžăăăăăăŁăŚăăăŽă¤ăłăżăă§ăźăšăŤćşć ăăăŤăŻă`WriteString` ăŻă¨ăŠăźăčżăăŞăăă°ăŞăăŞăăŽă§ăă
ĺ
é¨çăŤăŻăstrings.Builder ăŻăă¤ăăšăŠă¤ăšăäżćăăžăă WriteString ăĺźăłĺşăăăłăŤăăăŽăšăŠă¤ăšăŤčż˝ĺ ăăĺźăłĺşăăčĄăăăžăăăăăŤăŻ2ă¤ăŽĺ˝ąéżăăăăžăăăžăă append ăŽĺźăłĺşăăčĄçŞçść
ăĺźă辡ăăĺŻč˝ć§ăăăăăăăăŽć§é ä˝ăŻĺćăŤä˝żç¨ăăăăšăă§ăŻăăăžăăă2çŞçŽăŽĺ˝ąéżăŻă éĺšçăŞăšăŠă¤ăšăŽĺćĺ (#21) ă§čŚăăăŽă§ăăăšăŠă¤ăšăŽĺ°ćĽăŽéˇăăăă§ăŤăăăŁăŚăăĺ ´ĺăŻăăăăäşĺăŤĺ˛ăĺ˝ăŚăĺż
čŚăăăăžăăăăŽăăăŤăstrings.Builder ăŻĺĽăŽ n ăă¤ăăŽăăăŽăšăăźăšăäżč¨źăăăĄă˝ăă Grow(n int) ăćăŁăŚăăžăă
func concat(values []string) string {
total := 0
for i := 0; i < len(values); i++ {
total += len(values[i])
}
sb := strings.Builder{}
sb.Grow(total) (2)
for _, value := range values {
_, _ = sb.WriteString(value)
}
return sb.String()
}
ăăłăăăźăŻăĺŽčĄă㌠3 ă¤ăŽăăźă¸ă§ăłďź += ă使ç¨ăă V1 ăäşĺĺ˛ăĺ˝ăŚăŞăă§ strings.Builder{} ă使ç¨ăă V2 ăäşĺĺ˛ăĺ˝ăŚăă㎠strings.Builder{} ă使ç¨ăă V3 ďźăćŻčźăăŚăżăžăăăăĺ
ĽĺăšăŠă¤ăšăŤăŻ 1,000 ĺăŽćĺĺăĺŤăžăăŚăăăĺćĺĺăŤăŻ 1,000 ăă¤ăăĺŤăžăăŚăăžăă
BenchmarkConcatV1-4 16 72291485 ns/op
BenchmarkConcatV2-4 1188 878962 ns/op
BenchmarkConcatV3-4 5922 190340 ns/op
ă茧ăŽă¨ăăăćć°ăăźă¸ă§ăłăćăĺšççă§ăV1 ăă 99% ăV2 ăă 78% éŤéă§ăă
strings.Builder ăŻăćĺĺăŽăŞăšăăéŁçľăăăăăŽč§Łćąşçă¨ăăŚć¨ĺĽ¨ăăăžăăé常ăăăăŻăŤăźăĺ
ă§ä˝żç¨ăăĺż
čŚăăăăžăăăăă¤ăăŽćĺĺ ďźĺĺă¨ĺ§ăŞăŠďźăéŁçľăăă ăăŽĺ ´ĺă strings.Builder ăŽä˝żç¨ăŻă += ćźçŽĺă fmt.Sprintf ă¨ćŻăšăŚĺŻčŞć§ăä˝ăăŞăăăă§ăă
ă˝ăźăšăłăźă :simple-github:
çĄé§ăŞćĺĺĺ¤ć (#40)
???+ info "čŚç´"
`bytes` ăăăąăźă¸ăŻ `strings` ăăăąăźă¸ă¨ĺăćä˝ăćäžăăŚăăăăă¨ăčŚăăŚăăă¨ăä˝ĺăŞăă¤ăăťćĺĺĺ¤ćăéżăăăă¨ăă§ăăžăă
ćĺĺăžă㯠[]byte ăćąăăă¨ăé¸ćăăĺ ´ĺăăťă¨ăăŠăŽăăă°ăŠăăźăŻĺŠäžżć§ăŽăăăŤćĺĺă弽ăĺžĺăăăăžăăăăăăăťă¨ăăŠăŽ I/O ăŻĺŽéăŤăŻ []byte ă§čĄăăăžăăăă¨ăă°ăio.Readerăio.Writerăăăăł io.ReadAll ăŻćĺĺă§ăŻăŞă []byte ăĺŚçăăžăă
ćĺĺ㨠[]byte ăŽăŠăĄăăćąăăšăă迡ăŁăă¨ăă[]byte ăćąăćšăĺż
ăăăé˘ĺă ă¨ăăăăă§ăŻăŞăăă¨ăćăĺşăăŚăă ăăăstrings ăăăąăźă¸ăăă¨ăŻăšăăźăăăăăăšăŚăŽé˘ć°ăŤăŻăbytes ăăăąăźă¸ăŤäťŁćżćŠč˝ăăăăžăă SplităCountăContainsăIndex ăŞăŠă§ăăăăăăŁăŚăI/O ăĺŽčĄăăŚăăăăŠăăăŤé˘äżăŞăăćĺĺăŽäťŁăăăŤăă¤ăă使ç¨ăăŚăŻăźăŻăăăźĺ
¨ä˝ăĺŽčŁ
ă§ăăčż˝ĺ ăŽĺ¤ćăłăšăăĺéżă§ăăăăŠăăăćĺăŤç˘şčŞăăžăăăă
ă˝ăźăšăłăźă :simple-github:
é¨ĺćĺĺă¨ăĄă˘ăŞăŞăźăŻ (#41)
???+ info "čŚç´"
é¨ĺćĺĺăŽäťŁăăăŤăłăăźă使ç¨ăăă¨ăé¨ĺćĺĺćä˝ăŤăăŁăŚčżăăăćĺĺăĺăăă¤ăé
ĺăŤăăŁăŚăľăăźăăăăăăăăĄă˘ăŞăŞăźăŻăé˛ăăă¨ăă§ăăžăă
ăšăŠă¤ăšă¨ăĄă˘ăŞăŞăźăŻ (#26) ă§ăŻăăšăŠă¤ăšăžăăŻé ĺăŽăšăŠă¤ăšăăĄă˘ăŞăŞăźăŻăŽçśćłăĺźă辡ăăĺŻč˝ć§ăăăăă¨ă確čŞăăžăăăăăŽĺĺăŻăćĺĺăăăłé¨ĺćĺĺăŽćä˝ăŤăĺ˝ăŚăŻăžăăžăă
Goč¨čŞă§é¨ĺćĺĺćä˝ă使ç¨ăăă¨ăăŻă2 ă¤ăŽăă¨ăŤçćăăĺż
čŚăăăăžăăăžăăćäžăăăééăŻăŤăźăłć°ă§ăŻăŞăăăă¤ăć°ăŤĺşăĽăăŚăăžăă揥ăŤăçľćăŽé¨ĺćĺĺăćĺăŽćĺĺă¨ĺăăăăăłă°é
ĺăĺ
ąćăăăăăé¨ĺćĺĺćä˝ăŤăăăĄă˘ăŞăŞăźăŻăçşçăăĺŻč˝ć§ăăăăžăăăăăé˛ăćšćłăŻăćĺĺăŽăłăăźăćĺă§ĺŽčĄăăăăGo 1.18 ăăĺŽčŁ
ăăăŚăă strings.Clone ă使ç¨ăăăă¨ă§ăă
ă˝ăźăšăłăźă :simple-github:
é˘ć°ă¨ăĄă˝ăă
ăŠăŽĺăŽăŹăˇăźăăźă使ç¨ăăă°ăăăăăăŁăŚăăŞă (#42)
???+ info "čŚç´"
ĺ¤ăŹăˇăźăăźă¨ăă¤ăłăżăŹăˇăźăăźăŽăŠăĄăă使ç¨ăăăăŻăăŠăŽĺăŞăŽăăĺ¤ĺăăăĺż
čŚăăăăăŠăăăăłăăźă§ăăŞăăăŁăźăŤăăĺŤăžăăŚăăăăŠăăăăŞăă¸ă§ăŻăăŻăŠăăăă大ăăăŽăăăŞăŠăŽčŚç´ ăŤĺşăĽăăŚćąşĺŽăăĺż
čŚăăăăžăăĺăăăŞăĺ ´ĺăŻăăă¤ăłăżăŹăˇăźăă使ç¨ăăŚăă ăăă
ĺ¤ăŹăˇăźăăźă¨ăă¤ăłăżăŹăˇăźăăźăŽăŠăĄăăé¸ćăăăăŻăĺż ăăăç°Ąĺă§ăŻăăăžăăăé¸ćăŤĺ˝šçŤă¤ăăă¤ăăŽćĄäťśăŤă¤ăăŚčŞŹćăăžăăăă
ăă¤ăłăżăŹăˇăźăăźă§ăŞăăă°ăŞăăŞă ă¨ă
-
ăĄă˝ăăăăŹăˇăźăăźăĺ¤ĺăăăĺż čŚăăăĺ ´ĺăăăŽăŤăźăŤăŻăĺ俥ĺ´ăăšăŠă¤ăšă§ăăăăĄă˝ăăăčŚç´ ăčż˝ĺ ăăĺż čŚăăăĺ ´ĺăŤăćĺšă§ăă
type slice []int func (s *slice) add(element int) { *s = append(*s, element) } -
ăĄă˝ăăăŹăˇăźăăźăŤăłăăźă§ăăŞăăăŁăźăŤăăĺŤăžăăŚăăĺ ´ĺăsync ăăăąăźă¸ăŽĺé¨ĺăŻăăŽä¸äžăŤăŞăăžăďź sync ĺăŽăłăăź (#74) ăĺç §ďźă
ăă¤ăłăżăŹăˇăźăăźă§ăăăšă ă¨ă
- ăŹăˇăźăăźă大ăăŞăŞăă¸ă§ăŻăăŽĺ ´ĺăăă¤ăłăżă使ç¨ăăă¨ă大čŚć¨ĄăŞăłăăźăŽä˝ćăé˛ć˘ăăăăăăĺźăłĺşăăăăĺšççăŤăŞăăžăăăŠăăăăăŽĺ¤§ăăăŞăŽă確訟ăăŞăĺ ´ĺăŻăăăłăăăźăŻăč§ŁćąşçăŤăŞăĺŻč˝ć§ăăăăžăăĺ¤ăăŽčŚĺ ăŤäžĺăăăăăçšĺŽăŽăľă¤ăşăćĺŽăăăă¨ăŻăťă¨ăăŠä¸ĺŻč˝ă§ăă
ĺ¤ăŹăˇăźăăźă§ăŞăăă°ăŞăăŞă ă¨ă
- ăŹăˇăźăăźăŽä¸ĺ¤ć§ă埡ĺśăăĺż čŚăăăĺ ´ĺă
- ăŹăˇăźăăźăăăăăé˘ć°ăăăŁăăŤăŽĺ ´ĺăăă䝼ĺ¤ăŽĺ ´ĺăŻăłăłăă¤ăŤă¨ăŠăźăçşçăăžăă
ĺ¤ăŹăˇăźăăźă§ăăăšă ă¨ă
- ăŹăˇăźăăźăĺ¤ĺăăăĺż čŚăŽăŞăăšăŠă¤ăšăŽĺ ´ĺă
- ăŹăˇăźăăźăă
time.TimeăŞăŠăŽĺ°ăăŞé ĺăžăăŻć§é ä˝ă§ăĺŻĺ¤ăăŁăźăŤăăćăăŞăĺ¤ĺă§ăăĺ ´ĺă - ăŹăˇăźăăźă
intăfloat64ăăžăăŻstringăŞăŠăŽĺşćŹĺăŽĺ ´ĺă
ăăĄăăăçšćŽăŞăąăźăšăŻĺ¸¸ăŤĺĺ¨ăăăăăăăšăŚăçś˛çž ăăăă¨ăŻä¸ĺŻč˝ă§ăăăăăŽăťăŻăˇă§ăłăŽçŽć¨ăŻăăťă¨ăăŠăŽăąăźăšăăŤăăźăăăăăŽăŹă¤ăăłăšăćäžăăăă¨ă§ăăé常ăŻăăăăăŞăćŁĺ˝ăŞççąăăŞăéăăĺ¤ăŹăˇăźăăźă使ç¨ăăŚééăăăăžăăăĺăăăŞăĺ ´ĺăŻăăă¤ăłăżăŹăˇăźăă使ç¨ăăĺż čŚăăăăžăă
ă˝ăźăšăłăźă :simple-github:
ĺĺäťăçľćăăŠăĄăźăżăăžăŁăă使ç¨ăăŚăăŞă (#43)
???+ info "čŚç´"
ĺĺäťăçľćăăŠăĄăźăżăźăŽä˝żç¨ăŻăçšăŤč¤ć°ăŽçľćăăŠăĄăźăżăźăĺăĺăćă¤ĺ ´ĺăé˘ć°ăťăĄă˝ăăăŽčŞăżăăăăĺä¸ăăăĺšççăŞćšćłă§ăăĺ ´ĺăŤăăŁăŚăŻăĺĺäťăçľćăăŠăĄăźăżăŻăźăĺ¤ăŤĺćĺăăăăăăăăŽćšćłăäžżĺŠă§ăăăăăă¨ăăăăžăăăă ăć˝ĺ¨çăŞĺŻä˝ç¨ăŤăŻćł¨ćăăŚăă ăăă
é˘ć°ăžăăŻăĄă˝ăăă§ăăŠăĄăźăżăčżăă¨ăăăăăăŽăăŠăĄăźăżăŤĺĺăäťăăŚăé常ăŽĺ¤ć°ă¨ăăŚä˝żç¨ă§ăăžăăçľćăăŠăĄăźăżăźăŤĺĺăäťăăă¨ăé˘ć°ăťăĄă˝ăăăŽéĺ§ćăŤăăŽăăŠăĄăźăżăźăŻăźăĺ¤ăŤĺćĺăăăžăăĺĺäťăçľćăăŠăĄăźăżă使ç¨ăăă¨ă ăăĺşă㎠return ćďźĺźć°ăŞăďź ăĺźăłĺşăăă¨ăă§ăăžăăăăŽĺ ´ĺăçľćăăŠăĄăźăżăŽçžĺ¨ăŽĺ¤ăćťăĺ¤ă¨ăăŚä˝żç¨ăăăžăă
䝼ä¸ăŻăĺĺäťăçľćăăŠăĄăźăż b ăç¨ăăäžă§ăă
func f(a int) (b int) {
b = a
return
}
ăăŽäžă§ăŻăçľćăăŠăĄăźăżăŤĺĺ b ăäťăăŚăăžăăĺźć°ăŞăă§ return ăĺźăłĺşăă¨ăb ăŽçžĺ¨ăŽĺ¤ăčżăăăžăă
ĺ ´ĺăŤăăŁăŚăŻăĺĺäťăăŽçľćăăŠăĄăźăżăźăŤăăŁăŚĺŻčŞć§ăĺä¸ăăăă¨ăăăăžăăăă¨ăă°ă2 ă¤ăŽăăŠăĄăźăżăźăĺăĺă§ăăĺ ´ĺăŞăŠă§ăăăăŽäťăŤăăĺŠäžżć§ăŽăăăŤç¨ăăăă¨ăă§ăăžăăăăăŤăć確ăŞĺŠçšăăăĺ ´ĺăŻăć éăŤăŞăăŞăăăĺĺäťăçľćăăŠăĄăźăżă使ç¨ăăăšăă§ăă
ă˝ăźăšăłăźă :simple-github:
ĺĺäťăçľćăăŠăĄăźăżăŤăăäşćłĺ¤ăŽĺŻä˝ç¨ (#44)
???+ info "čŚç´"
[#43](#43) ăĺç
§ăăŚăă ăăă
ĺĺäťăçľćăăŠăĄăźăżăçśćłăŤăăŁăŚăŻĺ˝šçŤă¤ççąăŤă¤ăăŚčŞŹćăăžăăă ăă ăăăăăăŻăźăĺ¤ăŤĺćĺăăăăăăĺĺăŤćł¨ćăăŞăă¨ă蝽垎ăŞăă°ăçşçăăĺŻč˝ć§ăăăăžăăăă¨ăă°ăăăŽăłăźăăŻăŠăăééăŁăŚăăă§ăăăăă
func (l loc) getCoordinates(ctx context.Context, address string) (
lat, lng float32, err error) {
isValid := l.validateAddress(address) (1)
if !isValid {
return 0, 0, errors.New("invalid address")
}
if ctx.Err() != nil { (2)
return 0, 0, err
}
// ĺş§ć¨ăĺĺžăăŚčżă
}
ä¸çĽăăă ăă§ăŻă¨ăŠăźăŻćăăă§ăŻăŞăăăăăăžăăăif ctx.Err() != nil ăšăłăźăă§čżăăăă¨ăŠăźăŻ err ă§ăăăăăăerr ĺ¤ć°ăŤăŻĺ¤ăĺ˛ăĺ˝ăŚăŚăăžăăăerror ĺăŽăźăĺ¤ă nil ăŤĺ˛ăĺ˝ăŚăăăăžăžă§ăăăăăăŁăŚăăăŽăłăźăăŻĺ¸¸ăŤ nil ă¨ăŠăźăčżăăžăă
ĺĺäťăçľćăăŠăĄăźăżă使ç¨ăăĺ ´ĺăĺăăŠăĄăźăżăŻăźăĺ¤ăŤĺćĺăăăăă¨ăŤćł¨ćăăŚăă ăăăăăŽăťăŻăˇă§ăłă§čŞŹćăăăăăŤăăăăŤăăăčŚă¤ăăăŽăĺż ăăăç°Ąĺă§ăŻăŞă蝽垎ăŞăă°ăçşçăăĺŻč˝ć§ăăăăžăăăăăŤăć˝ĺ¨çăŞĺŻä˝ç¨ăéżăăăăăŤăĺĺäťăçľćăăŠăĄăźăżăźă使ç¨ăăă¨ăăŻćł¨ćăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
nil ăŹăˇăźăăźăčżă (#45)
???+ info "čŚç´"
ă¤ăłăżăă§ăźăšăčżăă¨ăăŻănil ăă¤ăłăżăčżăăŽă§ăŻăŞăăć示ç㪠nil ĺ¤ăčżăăăăŤćł¨ćăăŚăă ăăăăăăăŞăăă°ăćĺłăăŞăçľćăçşçăăĺźăłĺşăĺ
ă nil ă§ăŻăŞăĺ¤ăĺăĺăĺŻč˝ć§ăăăăžăă
ă˝ăźăšăłăźă :simple-github:
é˘ć°ĺ ĽĺăŤăăĄă¤ăŤĺă使ç¨ăăŚăă (#46)
???+ info "čŚç´"
ăăĄă¤ăŤĺăŽäťŁăă㍠`io.Reader` ĺăĺăĺăăăăŤé˘ć°ăč¨č¨ăăă¨ăé˘ć°ăŽĺĺŠç¨ć§ăĺä¸ăăăăšăă厚ćăŤăŞăăžăă
ăăĄă¤ăŤĺăăăĄă¤ăŤăăčŞăżĺăăăăŽé˘ć°ĺ
Ľĺă¨ăăŚĺăĺ
Ľăăăă¨ăŻăăťă¨ăăŠăŽĺ ´ĺăăăłăźăăŽčăăă¨ăżăŞăăăăšăă§ăďź os.Open ăŞăŠăŽçšĺŽăŽé˘ć°ăé¤ăďźăč¤ć°ăŽăăĄă¤ăŤăä˝ćăăăă¨ăŤăŤăŞăăăăăăăĺä˝ăăšăăăăč¤éăŤăŞăĺŻč˝ć§ăăăăăă§ăăăžăăé˘ć°ăŽĺĺŠç¨ć§ăä˝ä¸ăăžă ďźăă ăăăăšăŚăŽé˘ć°ăĺĺŠç¨ăăăăăă§ăŻăăăžăăďźă io.Reader ă¤ăłăżăă§ăźăšă使ç¨ăăă¨ăăăźăżă˝ăźăšăć˝čąĄĺăăăžăăĺ
ĽĺăăăĄă¤ăŤăćĺĺăHTTP ăŞăŻă¨ăšăăgRPC ăŞăŻă¨ăšăăŽăăăă§ăăăăŤé˘äżăŞăăĺŽčŁ
ăŻĺĺŠç¨ă§ăăç°ĄĺăŤăăšăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
defer ĺźć°ă¨ăŹăˇăźăăźăăŠăŽăăăŤčŠäžĄăăăăăçĽăăŞăďźĺźć°ăŽčŠäžĄăăă¤ăłăżăźăăăăłĺ¤ăŹăˇăźăăźďź (#47)
???+ info "čŚç´"
ăă¤ăłăżă `defer` é˘ć°ăŤć¸Ąăăă¨ă¨ăĺźăłĺşăăăŻăăźă¸ăŁĺ
ăŤăŠăăăăăă¨ăăĺźć°ă¨ăŹăˇăźăăźăŽĺłćčŠäžĄăĺ
ćăăăăăŤĺŽçžĺŻč˝ăŞč§Łćąşçă§ăă
defer é˘ć°ă§ăŻăĺźć°ăŻăä¸ä˝ăăăăŻăŽé˘ć°ăćťăŁăŚăăă§ăŻăŞăăăăăŤčŠäžĄăăăžăăăă¨ăă°ăăăŽăłăźăă§ăŻă常ăŤĺăăšăăźăżăšââ犺ăŽćĺĺââă§ notify 㨠incrementCounter ăĺźăłĺşăăžăă
const (
StatusSuccess = "success"
StatusErrorFoo = "error_foo"
StatusErrorBar = "error_bar"
)
func f() error {
var status string
defer notify(status)
defer incrementCounter(status)
if err := foo(); err != nil {
status = StatusErrorFoo
return err
}
if err := bar(); err != nil {
status = StatusErrorBar
return err
}
status = StatusSuccess
return nil
}
ăăăăŤănotify(status) 㨠incrementCounter(status) ă defer é˘ć°ă¨ăăŚĺźăłĺşăăŚăăžăăăăăăŁăŚăGoč¨čŞăŻădefer ă使ç¨ăă掾éă§ f ăăšăăźăżăšăŽçžĺ¨ăŽĺ¤ăčżăă¨ăăăăăŽĺźăłĺşăăŽĺŽčĄăé
ăăă犺ăŽćĺĺă渥ăăžăă
defer ă使ăçśăăăĺ ´ĺăŽä¸ťăŞćšćłăŻ 2 ă¤ăăăžăă
ćĺăŽč§ŁćąşçăŻćĺĺăă¤ăłăżă渥ăăă¨ă§ăă
func f() error {
var status string
defer notify(&status)
defer incrementCounter(&status)
// é˘ć°ăŽăă䝼ĺ¤ăŽé¨ĺăŻĺ¤ć´ăŞă
}
defer ă使ç¨ăăă¨ăĺźć°ďźăăă§ăŻăšăăźăżăšăŽă˘ăăŹăšďźăăăăŤčŠäžĄăăăžăăăšăăźăżăščŞä˝ăŻé˘ć°ĺ
¨ä˝ă§ĺ¤ć´ăăăžăăăăăŽă˘ăăŹăšăŻĺ˛ăĺ˝ăŚăŤé˘äżăŞăä¸ĺŽăŽăžăžă§ăăăăŁăŚănotify ăžă㯠incrementCounter ăćĺĺăă¤ăłăżăŤăăŁăŚĺç
§ăăăĺ¤ă使ç¨ăăĺ ´ĺăćĺž
ăŠăăăŤĺä˝ăăžăăăă ăăăăŽč§Łćąşçă§ăŻ 2 ă¤ăŽé˘ć°ăŽăˇă°ăăăŁăĺ¤ć´ăăĺż
čŚăăăăăăă常ăŤĺŻč˝ă§ăăă¨ăŻéăăžăăă
ĺĽăŽč§ŁćąşçăăăăžăââăŻăăźă¸ăŁďźćŹä˝ăŽĺ¤é¨ăăĺ¤ć°ăĺç
§ăăĺżĺé˘ć°ĺ¤ďźă defer ćă¨ăăŚĺźăłĺşăăă¨ă§ăă
func f() error {
var status string
defer func() {
notify(status)
incrementCounter(status)
}()
// é˘ć°ăŽăă䝼ĺ¤ăŽé¨ĺăŻĺ¤ć´ăŞă
}
ăăă§ăŻănotify 㨠incrementCounter ăŽä¸ĄćšăŽĺźăłĺşăăăŻăăźă¸ăŁĺ
ăŤăŠăăăăžăăăăŽăŻăăźă¸ăŁăŻăćŹä˝ăŽĺ¤é¨ăăăšăăźăżăšĺ¤ć°ăĺç
§ăăžăăăăăŤăstatus ăŻădefer ăĺźăłĺşăăă¨ăă§ăŻăŞăăăŻăăźă¸ăŁăĺŽčĄăăăă¨ăăŤčŠäžĄăăăžăăăăŽč§ŁćąşçăŻćŁăăćŠč˝ăăä¸ăŤăăˇă°ăăăŁăĺ¤ć´ăăăă㍠notify ă incrementCounter ăĺż
čŚă¨ăăžăăă
ăăŽĺä˝ăŻăĄă˝ăăăŹăˇăźăăźăŤăéŠç¨ăăăăă¨ăŤă注ćăăŚăă ăăăăŹăˇăźăăźăŻăăăŤčŠäžĄăăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¨ăŠăźĺŚç
ăăă㯠(#48)
???+ info "čŚç´"
`panic` ăŽä˝żç¨ăŻăGoč¨čŞă§ă¨ăŠăźăŤĺŻžĺŚăăăăăŽć掾ă§ăăăă ăăăăăŻĺ垊ä¸č˝ăŞçśćłă§ăŽăżä˝żç¨ăăăăăŤăăŚăă ăăăăă¨ăă°ăăăĽăźăăłă¨ăŠăźăéçĽăăĺ ´ĺăăĺż
é ăŽäžĺé˘äżăŽčŞăżčžźăżăŤĺ¤ąćăăĺ ´ĺăŞăŠă§ăă
Goč¨čŞă§ăŻăpanic ăŻé常ăŽćľăăĺć˘ăăçľăżčžźăżé˘ć°ă§ăă
func main() {
fmt.Println("a")
panic("foo")
fmt.Println("b")
}
ăăŽăłăźă㯠a ăĺşĺăăb ăĺşĺăăĺăŤĺć˘ăăžăă
a
panic: foo
goroutine 1 [running]:
main.main()
main.go:7 +0xb3
panic ăŽä˝żç¨ăŻć
éăŤăăšăă§ăă䝣襨çăŞăąăźăšă 2 ă¤ăăă1 ă¤ăŻăăĽăźăăłă¨ăŠăźăéçĽăăĺ ´ĺďźäž: sql.RegisterăăŠă¤ăăźă nil ăžăăŻć˘ăŤçťé˛ăăăŚăăĺ ´ĺ㍠panic ă辡ăăăžăďźăăă 1 ă¤ăŻă˘ăăŞăąăźăˇă§ăłăĺż
é ăŽäžĺé˘äżăŽçćăŤĺ¤ąćăăĺ ´ĺă§ăăçľćă¨ăăŚăäžĺ¤çăŤă˘ăăŞăąăźăˇă§ăłăĺć˘ăăžăăăă䝼ĺ¤ăŽăťă¨ăăŠăŽĺ ´ĺăŤăăăŚăŻăă¨ăŠăźĺŚçăŻăćĺžăŽćťăĺźć°ă¨ăăŚéŠĺăŞă¨ăŠăźĺăčżăé˘ć°ăéăăŚčĄăăšăă§ăă
ă˝ăźăšăłăźă :simple-github:
ă¨ăŠăźăăŠăăăăšăă¨ăăçĽăăŞă (#49)
???+ info "čŚç´"
ă¨ăŠăźăăŠăăăăă¨ăă¨ăŠăźăăăźăŻăăăăčż˝ĺ ăŽăłăłăăăšăăćäžăăăă§ăăžăăăă ăăă¨ăŠăźăŠăăăłă°ăŤăăăĺźăłĺşăĺ
ăă˝ăźăšă¨ăŠăźăĺŠç¨ă§ăăăăăŤăŞăăăăć˝ĺ¨çăŞçľĺăçşçăăžăăăăăéżăăăĺ ´ĺăŻăă¨ăŠăźăŠăăăłă°ă使ç¨ăăŞăă§ăă ăăă
Go 1.13 䝼éă%w ăăŁăŹăŻăăŁăă使ç¨ăăă°ç°ĄĺăŤă¨ăŠăźăăŠăăă§ăăăăăŤăŞăăžăăăă¨ăŠăźăŠăăăłă°ă¨ăŻăă˝ăźăšă¨ăŠăźă使ç¨ă§ăăăăăŤăăăŠăăăźăłăłăăĺ ă§ă¨ăŠăźăăŠăăăžăăŻăăăŻăăăă¨ă§ăăä¸čŹăŤăă¨ăŠăźăŠăăăłă°ăŽä¸ťăŞä˝żç¨äžăŻćŹĄăŽ 2 ă¤ă§ăă
- ă¨ăŠăźăŤăăăŤăłăłăăăšăăĺ ăă
- ă¨ăŠăźăçšĺŽăŽă¨ăŠăźă¨ăăŚăăźăŻăă
ă¨ăŠăźăĺŚçăăă¨ăăă¨ăŠăźăăŠăăăăăăŠăăăćąşĺŽă§ăăžăăăŠăăăłă°ă¨ăŻăă¨ăŠăźăŤăăăŤăłăłăăăšăăčż˝ĺ ăăăăă¨ăŠăźăçšĺŽăŽăżă¤ăă¨ăăŚăăźăŻăăăăăăă¨ă§ăăă¨ăŠăźăăăźăŻăăĺż čŚăăăĺ ´ĺăŻăçŹčŞăŽă¨ăŠăźĺăä˝ćăăĺż čŚăăăăžăăă§ăăăć°ăăŤăłăłăăăšăăĺ ăăăă ăăŽĺ ´ĺăŻăć°ăăă¨ăŠăźĺăä˝ćăăĺż čŚăăŞăăăă%w ăăŁăŹăŻăăŁăăćĺŽă㌠fmt.Errorf ă使ç¨ăăžăăăăăă ăăă¨ăŠăźăŠăăăłă°ăŤăăăĺźăłĺşăĺ ăă˝ăźăšă¨ăŠăźăĺŠç¨ă§ăăăăăŤăŞăăăăć˝ĺ¨çăŞçľĺăçăăžăăăăăéżăăăĺ ´ĺăŻăă¨ăŠăźăŽăŠăăăłă°ă§ăŻăŞăăă¨ăŠăźăŽĺ¤ćă使ç¨ăăĺż čŚăăăăžăăăă¨ăă°ă%v ăăŁăŹăŻăăŁăăćĺŽăă fmt.Errorf ă使ç¨ăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¨ăŠăźĺăŽä¸ćŁăŞćŻčź (#50)
???+ info "čŚç´"
Go 1.13 ăŽă¨ăŠăźăŠăăăłă°ă `%w` ăăŁăŹăŻăăŁă㨠`fmt.Errorf` ă§ä˝żç¨ăăĺ ´ĺăĺăŤĺŻžăăă¨ăŠăźăŽćŻčźăŻ `errors.As` ăéăăŚčĄăĺż
čŚăăăăžăăăăă§ăŞăăă°ăčżăăăă¨ăŠăźăăŠăăăăăŚăăĺ ´ĺăčŠäžĄăŤĺ¤ąćăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¨ăŠăźĺ¤ăŽä¸ćŁăŞćŻčź (#51)
???+ info "čŚç´"
Go 1.13 ăŽă¨ăŠăźăŠăăăłă°ă `%w` ăăŁăŹăŻăăŁă㨠`fmt.Errorf` ă§ä˝żç¨ăăĺ ´ĺăă¨ăŠăźă¨ĺ¤ăŽćŻčźăŻ `errors.As` ăéăăŚčĄăĺż
čŚăăăăžăăăăă§ăŞăăă°ăčżăăăă¨ăŠăźăăŠăăăăăŚăăĺ ´ĺăčŠäžĄăŤĺ¤ąćăăžăă
ăťăłăăăŤă¨ăŠăźăŻă°ăăźăăŤĺ¤ć°ă¨ăăŚĺŽçžŠăăăă¨ăŠăźăŽăă¨ă§ăă
import "errors"
var ErrFoo = errors.New("foo")
ä¸čŹăŤăć
Łäžă¨ă㌠Err ă§ĺ§ăăăăŽĺžăŤă¨ăŠăźĺăçśăăžăăăăă§ăŻ ErrFoo ă§ăăăťăłăăăŤă¨ăŠăźăŻăäşćăăă ă¨ăŠăźăă¤ăžăăŻăŠă¤ă˘ăłăă確čŞăăăă¨ăćĺž
ăăă¨ăŠăźăäźăăžăăä¸čŹçăŞăŹă¤ăăŠă¤ăłă¨ăăŚ
- äşćăăăă¨ăŠăźăŻă¨ăŠăźĺ¤ďźăťăłăăăŤă¨ăŠăźďźă¨ăăŚč¨č¨ăăĺż
čŚăăăăžăďź
var ErrFoo =errors.New("foo")ă - äşćăăŞăă¨ăŠăźăŻă¨ăŠăźĺă¨ăăŚč¨č¨ăăĺż
čŚăăăăžăďź
BarErrorăŻerroră¤ăłăżăă§ăźăšăĺŽčŁ ăăä¸ă§type BarError struct { ... }ă
ă˘ăăŞăąăźăˇă§ăłă§ %w ăăŁăŹăŻăăŁă㨠fmt.Errorf ă使ç¨ăăŚă¨ăŠăźăŠăăă使ç¨ăăĺ ´ĺăçšĺŽăŽĺ¤ăŤĺŻžăăă¨ăŠăźăŽăă§ăăŻăŻ == ăŽäťŁăă㍠errors.Is ă使ç¨ăăŚčĄăăžăăăăăăăŤăăŁăŚăăťăłăăăŤă¨ăŠăźăăŠăăăăăŚăăĺ ´ĺă§ăăerrors.Is ăŻăăăĺ帰çăŤă˘ăłăŠăăăăăă§ăźăłĺ
ăŽĺă¨ăŠăźăćäžăăăĺ¤ă¨ćŻčźă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¨ăŠăźăŽ 2 ĺĺŚç (#52)
???+ info "čŚç´"
ăťă¨ăăŠăŽĺ ´ĺăă¨ăŠăźăŻ 1 ĺă§ĺŚçăăăăšăă§ăăă¨ăŠăźăăă°ăŤč¨é˛ăăăă¨ăŻăă¨ăŠăźăĺŚçăăăă¨ă§ăăăăŞăăĄăăă°ăŤč¨é˛ăăăă¨ăŠăźăčżăăăé¸ćăăĺż
čŚăăăăžăăĺ¤ăăŽĺ ´ĺăă¨ăŠăźăŠăăăłă°ăŻăă¨ăŠăźăŤčż˝ĺ ăŽăłăłăăăšăăćäžăăă˝ăźăšă¨ăŠăźăčżăăă¨ăă§ăăăăăč§ŁćąşçăŤăŞăăžăă
ă¨ăŠăźăč¤ć°ĺĺŚçăăăă¨ăŻăçšăŤGoč¨čŞăŤéăăăéçşč ăé ťçšăŤăăŁăŚăăžăăăšă§ăăăăăŤăăăĺăă¨ăŠăźăč¤ć°ĺăă°ăŤč¨é˛ăăăăăăă°ăĺ°éŁăŤăŞăçśćłăçşçăăĺŻč˝ć§ăăăăžăă
ă¨ăŠăźĺŚç㯠1 庌ă§ć¸ăžăăšăă ă¨ăăăă¨ăčŚăăŚăăăžăăăăă¨ăŠăźăăă°ăŤč¨é˛ăăăă¨ăŻăă¨ăŠăźăĺŚçăăăă¨ă§ăăă¤ăžăăčĄăăšăăŻăăă°ăŤč¨é˛ăăăăă¨ăŠăźăčżăăăŽăŠăĄăăă ă¨ăăăă¨ă§ăăăăăŤăăăăłăźăăç°Ąç´ ĺăăăă¨ăŠăźăŽçśćłăŤă¤ăăŚăăéŠĺăŞć´ĺŻăĺžăăăžăăă¨ăŠăźăŠăăăłă°ăŻăă˝ăźăšă¨ăŠăźăäźăăă¨ăŠăźăŤăłăłăăăšăăčż˝ĺ ă§ăăăăăćă使ăĺćăŽčŻăć掾ăŤăŞăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¨ăŠăźĺŚçăăăŞă (#53)
???+ info "čŚç´"
é˘ć°ĺźăłĺşăä¸ă§ăăŁăŚăă`defer` é˘ć°ĺ
ă§ăăŁăŚăăă¨ăŠăźăçĄčŚăăă¨ăăŻăăăŠăłăŻčĺĽĺă使ç¨ăăŚć確ăŤčĄăăšăă§ăăăăăăŞăă¨ăĺ°ćĽăŽčŞăżćăăăăćĺłçă ăŁăăŽăăăăă¨ăăăšă ăŁăăŽăĺ°ćăăĺŻč˝ć§ăăăăžăă
ă˝ăźăšăłăźă :simple-github:
defer ă¨ăŠăźăĺŚçăăŞă (#54)
???+ info "čŚç´"
ĺ¤ăăŽĺ ´ĺă`defer` é˘ć°ăŤăăŁăŚčżăăăă¨ăŠăźăçĄčŚăăšăă§ăŻăăăžăăăçśćłăŤĺżăăŚăç´ćĽĺŚçăăăăĺźăłĺşăĺ
ăŤäźăăžăăăăăăăçĄčŚăăĺ ´ĺăŻăăăŠăłăŻčĺĽĺă使ç¨ăăŚăă ăăă
揥ăŽăłăźăăčăăŚăżăžăăăă
func f() {
// ...
notify() // ă¨ăŠăźĺŚçăŻççĽăăăŚăăžă
}
func notify() error {
// ...
}
äżĺŽć§ăŽčŚłçšăăăăăŽăłăźăăŻăăă¤ăăŽĺéĄăĺźă辡ăăĺŻč˝ć§ăăăăžăăăăäşşăăăăčŞăăă¨ăčăăŚăżăžăăčŞăżćăŻănotify ăă¨ăŠăźăčżăăŤăăăăăăăăăŽă¨ăŠăźă茪é˘ć°ăŤăăŁăŚĺŚçăăăŞăăă¨ăŤć°ăĽăăžăăă¨ăŠăźĺŚçăćĺłçă§ăăăăŠăăăćăăăŚć¨ć¸Źă§ăăă§ăăăăă䝼ĺăŽéçşč ăăăăĺŚçăăăŽăĺżăăăŽăăăăă¨ăćĺłçăŤĺŚçăăăŽăăçĽăăă¨ăă§ăăă§ăăăăă
ăăăăŽççąăŤăăăă¨ăŠăźăçĄčŚăăăĺ ´ĺăăăŠăłăŻčĺĽĺďź _ ďźă使ăăťăăăăžăăă
_ = notify
ăłăłăă¤ăŤă¨ĺŽčĄćéăŽçšă§ăŻăăăŽćšćłăŻćĺăŽăłăźăé¨ĺă¨ćŻăšăŚä˝ăĺ¤ăăăžăăăăăăăăăŽć°ăăăăźă¸ă§ăłă§ăŻăç§ăăĄăă¨ăŠăźăŤé˘ĺżăăŞăăă¨ăćăăăŤăăŚăăžăăăžăăă¨ăŠăźăçĄčŚăăăççąă示ăăłăĄăłăăčż˝ĺ ăăăă¨ăă§ăăžăă
// ć大ă§ă 1 ĺăŽäźé
// ăăăăăă¨ăŠăźăçşçăăĺ ´ĺăŤăăăăŽä¸é¨ă夹ăăăăă¨ăŻč¨ąĺŽšăăăžă
_ = notify()
ă˝ăźăšăłăźă :simple-github:
丌čĄĺŚçďźĺşç¤
丌čĄĺŚçă¨ä¸ŚĺĺŚçăŽćˇˇĺ (#55)
???+ info "čŚç´"
丌čĄĺŚçă¨ä¸ŚĺĺŚçăŽĺşćŹçăŞéăăçč§Łăăăă¨ăŻă Go éçşč
ăŤă¨ăŁăŚĺż
é ă§ăă丌čĄĺŚçăŻć§é ăŤé˘ăăăăŽă§ăăă丌ĺĺŚçăŻĺŽčĄăŤé˘ăăăăŽă§ăă
丌čĄĺŚçă¨ä¸ŚĺĺŚçăŻĺăă§ăŻăăăžăăă
- 丌čĄĺŚçăŻć§é ăŤé˘ăăăăŽă§ăăĺĽă ăŽä¸ŚčĄă´ăŤăźăăłăĺăçľăăă¨ăă§ăăăăžăăžăŞćŽľéăĺ°ĺ Ľăăăă¨ă§ăé揥ĺŚçă丌čĄĺŚçăŤĺ¤ć´ă§ăăžăă
- 丌ĺĺŚçăŻĺŽčĄăŤé˘ăăăăŽă§ăă丌ĺă´ăŤăźăăłăăăăŤčż˝ĺ ăăăă¨ă§ă掾éăŹăăŤă§ä¸ŚĺĺŚçă使ç¨ă§ăăžăă
ăžă¨ăăă¨ă丌čĄĺŚçăŻă丌ĺĺă§ăăé¨ĺăăă¤ĺéĄăč§ŁćąşăăăăăŽć§é ăćäžăăžăăăăŞăăĄă丌čĄĺŚçăŤăă丌ĺĺŚçăĺŻč˝ ăŤăŞăăžă ă
丌čĄĺŚçăŽăťăă常ăŤćŠăă¨čăăŚăă (#56)
???+ info "čŚç´"
ç硴ăăéçşč
ăŤăŞăăŤăŻă丌čĄĺŚçăĺż
ăăăéŤéă§ăăă¨ăŻéăăŞăăă¨ăčŞčăăĺż
čŚăăăăžăăćĺ°éăŽăŻăźăŻăăźăăŽä¸ŚĺĺŚçăäź´ăč§ŁćąşçăŻăĺż
ăăăé揥ĺŚçăăéŤéă§ăăă¨ăŻéăăžăăăé揥ĺŚçă¨ä¸ŚčĄĺŚçăŽăăłăăăźăŻăŻă䝎ĺŽăć¤č¨źăăćšćłă§ăăăšăă§ăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
ă˝ăźăšăłăźă :simple-github:
ăăŁăăŤăžăăŻăăĽăźăăăŻăšăăă¤ä˝żç¨ăăăšăăăŤă¤ăăŚć¸ćăŁăŚăă (#57)
???+ info "čŚç´"
ă´ăŤăźăăłăŽç¸äşä˝ç¨ăčŞčăăŚăăăă¨ăŻăăăŁăăŤă¨ăăĽăźăăăŻăšăŽăŠăĄăăé¸ćăăăăćąşĺŽăăă¨ăăŤă彚çŤăĄăžăăä¸čŹăŤă丌ĺă´ăŤăźăăłăŤăŻĺćăĺż
čŚă§ăăăăăăăŁăŚăăĽăźăăăŻăšăĺż
čŚă§ăăĺ寞ăŤă丌čĄă´ăŤăźăăłăŻé常ă調ć´ă¨ăŞăźăąăšăăŹăźăˇă§ăłăă¤ăžăăăŁăăŤăĺż
čŚă¨ăăžăă
丌čĄĺŚçăŽĺéĄăčć Žăăă¨ăăăŁăăŤăžăăŻăăĽăźăăăŻăšă使ç¨ăăč§ŁćąşçăĺŽčŁ ă§ăăăăŠăăăĺż ăăăć確ă§ăŻăŞăĺŻč˝ć§ăăăăžăăGoč¨čŞăŻé俥ăŤăăăĄă˘ăŞăŽĺ ąćăäżé˛ăăăăă辡ăăăăééăăŽăăĄăŽä¸ă¤ăŻăăŚăźăšăąăźăšăŤăăăăăăăăŁăăŤăŽä˝żç¨ă常ăŤĺźˇĺśăăăă¨ă§ăăăăăăŞăăă2 ă¤ăŽćšćłăŻčŁĺŽçăŞăăŽă§ăăă¨čŚăŞăăšăă§ăă
ăăŁăăŤăžăăŻăăĽăźăăăŻăšăŻăŠăŽăăăŞĺ ´ĺăŤä˝żç¨ăăĺż čŚăăăăŽă§ăăăăă揥ăŽĺłăŽäžăăăăŻăăźăłă¨ăăŚä˝żç¨ăăžăăăăŽäžăŤăŻăçšĺŽăŽé˘äżăć㤠3 ă¤ăŽç°ăŞăă´ăŤăźăăłăăăăžăă
- G1 㨠G2 ăŻä¸Śĺă´ăŤăźăăłă§ăăăăŁăăŤăăăĄăăťăźă¸ăĺ俥ăçśăăĺăé˘ć°ăĺŽčĄăă 2 ă¤ăŽă´ăŤăźăăłăăăăăŻĺă HTTP ăăłăăŠăĺćăŤĺŽčĄăă 2 ă¤ăŽă´ăŤăźăăłăăăăăžăăă
- G1 㨠G3 ăŻä¸ŚčĄă´ăŤăźăăłă§ăăăG2 㨠G3 ăĺć§ă§ăăăăšăŚăŽă´ăŤăźăăłăŻĺ ¨ä˝ăŽä¸ŚčĄć§é ăŽä¸é¨ă§ăăăG1 㨠G2 ăćĺăŽăšăăăăĺŽčĄăăG3 ă揥ăŽăšăăăăĺŽčĄăăžăă
ĺĺă¨ăăŚă丌ĺă´ăŤăźăăłăŻăăšăŠă¤ăšăŞăŠăŽĺ ąćăŞă˝ăźăšăŤă˘ăŻăťăšăăăĺ¤ć´ăăăăăĺż čŚăăăĺ ´ĺăŞăŠăŤă_ĺć_ăăĺż čŚăăăăžăăĺćăŻăăĽăźăăăŻăšă§ăŻĺźˇĺśăăăžăăăăŠăŽăăŁăăŤĺă§ă埡ĺśăăăžăăďźăăăăĄăăăăŁăăŤăé¤ăďźăăăăăŁăŚăä¸čŹăŤă丌ĺă´ăŤăźăăłéăŽĺćăŻăăĽăźăăăŻăšăäťăăŚéćăăăĺż čŚăăăăžăă
ä¸ćšăä¸čŹăŤă丌čĄă´ăŤăźăăłăŻ čŞżć´ăăăłăŞăźăąăšăăŹăźăˇă§ăł ăăăĺż čŚăăăăžăăăă¨ăă°ăG3 ă G1 㨠G2 ăŽä¸ĄćšăăăŽçľćăéç´ăăĺż čŚăăăĺ ´ĺăG1 㨠G2 ăŻć°ăăä¸éçľćăĺŠç¨ĺŻč˝ă§ăăăă¨ă G3 ăŤéçĽăăĺż čŚăăăăžăăăăŽčŞżć´ăŻăłăăĽăăąăźăˇă§ăłăŽçŻĺ˛ăă¤ăžăăăŁăăŤăŤčОĺ˝ăăžăă
丌čĄă´ăŤăźăăłăŤé˘ăăŚăŻăăŞă˝ăźăšăŽćć樊ăăăăšăăăďźG1 ăăăł G2ďźăăĺĽăŽăšăăăďźG3ďźăŤç§ťçŽĄăăăĺ ´ĺăăăăžăăăă¨ăă°ăG1 㨠G2 ăŤăăŁăŚĺ ąćăŞă˝ăźăšăčąăăŤăŞăŁăŚăăĺ ´ĺăăăćçšă§ăăŽă¸ă§ăăŻĺŽäşăăă¨čŚăŞăăăžăăăăă§ăŻăăăŁăăŤă使ç¨ăăŚăçšĺŽăŽăŞă˝ăźăšăŽćşĺăă§ăăŚăăăă¨ăéçĽăăćć樊ăŽç§ťčť˘ăĺŚçăăĺż čŚăăăăžăă
ăăĽăźăăăŻăšă¨ăăŁăăŤăŤăŻç°ăŞăăťăăłăăŁăŻăšăăăăžăăăšăăźăăĺ
ąćăăăă¨ăăăžăăŻĺ
ąćăŞă˝ăźăšăŤă˘ăŻăťăšăăăă¨ăăŻăăăĽăźăăăŻăšăŤăăŁăŚăăŽăŞă˝ăźăšă¸ăŽćäťçă˘ăŻăťăšăäżč¨źăăăžăăĺ寞ăŤăăăŁăăŤăŻăăźăżăŽćçĄďźchan struct{} ăŽćçĄďźăŤé˘äżăŞăăˇă°ăăŤăčĄăäťçľăżă§ăă調ć´ăćć樊ăŽç§ťčť˘ăŻăăŁăăŤăéăăŚčĄăĺż
čŚăăăăžăăă´ăŤăźăăłă丌ĺă丌čĄăăçĽăăă¨ăéčŚă§ăăä¸čŹăŤă丌ĺă´ăŤăźăăłăŤăŻăăĽăźăăăŻăšăĺż
čŚă§ă丌čĄă´ăŤăźăăłăŤăŻăăŁăăŤăĺż
čŚă§ăă
獜ĺĺéĄăçč§ŁăăŚăăŞăďźăăźăżçŤśĺă¨çŤśĺçść ăăăăŚGoč¨čŞăŽăĄă˘ăŞă˘ăăŤďź (#58)
???+ info "čŚç´"
丌čĄĺŚçăŤçéăăă¨ăăăă¨ăŻăăăźăżçŤśĺă¨çŤśĺçść
ăç°ăŞăćŚĺżľă§ăăăă¨ăçč§Łăăăă¨ăćĺłăăžăăăăźăżçŤśĺăŻăč¤ć°ăŽă´ăŤăźăăłăĺăăĄă˘ăŞä˝ç˝ŽăŤĺćăŤă˘ăŻăťăšăăăăŽăăĄăŽĺ°ăŞăă¨ă 1 ă¤ăć¸ăčžźăżăčĄăŁăŚăăĺ ´ĺăŤçşçăăžăăä¸ćšăăăźăżçŤśĺăăŞăăă¨ăĺż
ăăăćąşĺŽçĺŽčĄăćĺłăăăăă§ăŻăăăžăăăĺä˝ăĺśĺžĄă§ăăŞăă¤ăăłăăŽé ĺşăăżă¤ăăłă°ăŤäžĺăăŚăăĺ ´ĺăăăăŻçŤśĺçść
ă§ăă
獜ĺĺéĄăŻăăăă°ăŠăăźăç´é˘ăăĺŻč˝ć§ăŽăăăă°ăŽä¸ă§ćăĺ°éŁăă¤ćăć˝äźć§ăŽéŤăăă°ăŽ 1 ă¤ă¨ăŞăăžăăGo éçşč ă¨ăăŚăç§ăăĄăŻăăźăżçŤśĺă¨çŤśĺçść ăăăăăĺăźăăă役éżăăăăłăăăăĺéżăăćšćłăŞăŠăŽéčŚăŞĺ´é˘ăçč§Łăăĺż čŚăăăăžăă
ăăźăżçŤśĺ
ăăźăżçŤśĺăŻă2 ă¤äťĽä¸ăŽă´ăŤăźăăłăĺăăĄă˘ăŞä˝ç˝ŽăŤĺćăŤă˘ăŻăťăšăăĺ°ăŞăă¨ă 1 ă¤ăć¸ăčžźăżăčĄăŁăŚăăĺ ´ĺăŤçşçăăžăăăăŽĺ ´ĺăĺąéşăŞçľćăçăăĺŻč˝ć§ăăăăžăăăăăŤćŞăăă¨ăŤăçśćłăŤăăŁăŚăŻăăĄă˘ăŞä˝ç˝ŽăŤçĄćĺłăŞăăăăŽçľăżĺăăăĺŤăĺ¤ăäżćăăăŚăăžăĺŻč˝ć§ăăăăžăă
ăăžăăžăŞććłăé§ä˝żăăŚăăăźăżçŤśĺăŽçşçăé˛ăăă¨ăă§ăăžăăăă¨ăă°
sync/atomicăăăąăźă¸ă使ç¨ăă- 2 ă¤ăŽă´ăŤăźăăłăĺćăăéăŤăăĽăźăăăŻăšăŽăăăŞçšĺŽăŽçŽçăŽăăăŽăăźăżć§é ăĺŠç¨ăă
- ăăŁăăŤă使ç¨ă㌠2 ă¤ăŽă´ăŤăźăăłăé俥ăăĺ¤ć°ăä¸ĺşŚăŤ 1 ă¤ăŽă´ăŤăźăăłă ăăŤăăŁăŚć´ć°ăăăăăăŤăă
獜ĺçść
ĺŽčĄăăăćä˝ăŤĺżăăŚăăăźăżçŤśĺăŽăŞăă˘ăăŞăąăźăˇă§ăłăĺż ăăăćąşĺŽçăŞçľćăćĺłăăă§ăăăăăăăă¨ăŻăăăžăăă
獜ĺçść ăŻăĺä˝ăĺśĺžĄă§ăăŞăă¤ăăłăăŽăˇăźăąăłăšăžăăŻăżă¤ăăłă°ăŤäžĺăăĺ ´ĺăŤçşçăăžăăăăă§ăŻăă¤ăăłăăŽăżă¤ăăłă°ăă´ăŤăźăăłăŽĺŽčĄé ĺşă§ăă
ăžă¨ăăă¨ă丌čĄĺŚçăŽă˘ăăŞăąăźăˇă§ăłă§ä˝ćĽăăĺ ´ĺăăăźăżçŤśĺăŻçŤśĺçść ă¨ăŻç°ăŞăăă¨ăçč§Łăăăă¨ăä¸ĺŻćŹ ă§ăăăăźăżçŤśĺăŻăč¤ć°ăŽă´ăŤăźăăłăĺăăĄă˘ăŞä˝ç˝ŽăŤĺćăŤă˘ăŻăťăšăăăăŽăăĄăŽĺ°ăŞăă¨ă 1 ă¤ăć¸ăčžźăżăčĄăŁăŚăăĺ ´ĺăŤçşçăăžăăăăźăżçŤśĺă¨ăŻăäşćłĺ¤ăŽĺä˝ăćĺłăăžăăăă ăăăăźăżçŤśĺăŽăŞăă˘ăăŞăąăźăˇă§ăłăĺż ăăăćąşĺŽçăŞçľćăćĺłăăăăă§ăŻăăăžăăăăăźăżçŤśĺăăŞăăŚăăă˘ăăŞăąăźăˇă§ăłăŻĺśĺžĄăăăŚăăŞăă¤ăăłăďźă´ăŤăźăăłăŽĺŽčĄăăăŁăăŤă¸ăŽăĄăăťăźă¸ăŽçşäżĄé庌ăăăźăżăăźăšă¸ăŽĺźăłĺşăăŽçśçśćéăŞăŠďźăŤäžĺăăćĺăćă¤ăă¨ăăăăžăăăăŽĺ ´ĺăŻçŤśĺçść ă§ăă丌čĄĺŚçăŽă˘ăăŞăąăźăˇă§ăłăŽč¨č¨ăŤç硴ăăăŤăŻă严ćšăŽćŚĺżľăçč§Łăăăă¨ăččŚă§ăă
ă˝ăźăšăłăźă :simple-github:
ăŻăźăŻăăźăăżă¤ăăă¨ăŽä¸ŚčĄĺŚçăŽĺ˝ąéżăçč§ŁăăŚăăŞă (#59)
???+ info "čŚç´"
ä¸ĺŽć°ăŽă´ăŤăźăăłăä˝ćăăă¨ăăŻăăŻăźăŻăăźăăŽăżă¤ăăčć
ŽăăŚăă ăăăCPU ăăŚăłăăŽă´ăŤăźăăłăä˝ćăăă¨ăăăă¨ăŻăăăŽć°ă `GOMAXPROCS` ĺ¤ć°ďźăăăŠăŤăă§ăŻăăšăä¸ăŽ CPU ăłă˘ăŽć°ăŤĺşăĽăďźăŤčżăĽăăăă¨ăćĺłăăžăăI/O ăăŚăłăăŽă´ăŤăźăăłăŽä˝ćăŻăĺ¤é¨ăˇăšăă ăŞăŠăŽäťăŽčŚĺ ăŤäžĺăăžăă
ăăă°ăŠăăłă°ă§ăŻăăŻăźăŻăăźăăŽĺŽčĄćéăŻćŹĄăŽăăăăăŤăăŁăŚĺśéăăăžăă
- CPU ăŽé庌 - ăă¨ăă°ăăăźă¸ă˝ăźăă˘ăŤă´ăŞăşă ăŽĺŽčĄăăăăŤăăăăžăăăăŽăŻăźăŻăăźă㯠CPU ăăŚăłăă¨ĺźă°ăăžăă
- I/O ăŽé庌 - ăă¨ăă°ăREST ĺźăłĺşăăăăźăżăăźăšăŻă¨ăŞăŽĺŽčĄăăăăŤăăăăžăăăăŽăŻăźăŻăăźă㯠I/O ăăŚăłăă¨ĺźă°ăăžăă
- ĺŠç¨ĺŻč˝ăŞăĄă˘ăŞăŽé - ăăŽăŻăźăŻăăźăăŻăĄă˘ăŞăăŚăłăă¨ĺźă°ăăžăă
???+ note "čŁčśł"
ăăć°ĺĺš´ă§ăĄă˘ăŞăé常ăŤĺŽäžĄăŤăŞăŁăăă¨ăčć
Žăăă¨ă 3 ă¤çŽăŻçžĺ¨ă§ăŻćăăžăă§ăăăăăăŁăŚăăăŽăťăŻăˇă§ăłă§ăŻăćĺ㎠2 ă¤ăŽăŻăźăŻăăźăăżă¤ăăCPU ăăŚăłă㨠I/O ăăŚăłăăŤçŚçšăĺ˝ăŚăžăă
ăŻăźăŤăźăŤăăŁăŚĺŽčĄăăăăŻăźăŻăăźăă I/O ăăŚăłăă§ăăĺ ´ĺăĺ¤ăŻä¸ťăŤĺ¤é¨ăˇăšăă ăŤäžĺăăžăăéăŤăăŻăźăŻăăźăă CPU ăŤäžĺăăŚăăĺ ´ĺăă´ăŤăźăăłăŽćéŠăŞć°ăŻĺŠç¨ĺŻč˝ăŞ CPU ăłă˘ăŽć°ăŤčżăăŞăăžăďźăăšăăăŠăŻăăŁăšăŻ runtime.GOMAXPROCS ă使ç¨ăăăă¨ă§ăďźă丌čĄĺŚçăŽă˘ăăŞăąăźăˇă§ăłăč¨č¨ăăĺ ´ĺăăŻăźăŻăăźăăŽăżă¤ăďź I/O ăăă㯠CPU ďźăçĽăăă¨ăéčŚă§ăă
ă˝ăźăšăłăźă :simple-github:
Go Context ăŤĺŻžăă誤解 (#60)
???+ info "čŚç´"
Go Context ăŻăGoč¨čŞăŽä¸ŚčĄĺŚçăŽĺşç¤ăŽä¸é¨ă§ăăăăžăă Context ă使ç¨ăăă¨ăăăăăŠă¤ăłăăăźă¨ĺ¤ăŽăŞăšăăäżćă§ăăžăă
!!! quote "https://pkg.go.dev/context"
Context ăŻăăăăăŠă¤ăłăăăŁăłăťăŤăˇă°ăăŤăăăŽäťăŽĺ¤ă API ăŽĺ˘çăčśăăŚäźéăăžăă
ăăăăŠă¤ăł
ăăăăŠă¤ăłă¨ăŻă揥ăŽăăăăă§ćąşĺŽăăăçšĺŽăŽćçšăćăăžăă
- çžĺ¨ăăăŽ
time.Durationďźäžďź250 msďź time.Timeďźäžďź2023-02-07 00:00:00 UTCďź
ăăăăŠă¤ăłăŽăťăăłăăŁăŻăšăŻăăăăéăăĺ ´ĺăŻé˛čĄä¸ăŽă˘ăŻăăŁăăăŁăĺć˘ăăĺż čŚăăăăă¨ăäźăăžăăă˘ăŻăăŁăăăŁă¨ăŻăăă¨ăă°ăăăŁăăŤăăăŽăĄăăťăźă¸ăŽĺ俥ăĺž ćŠăăŚăă I/O ăŞăŻă¨ăšăăă´ăŤăźăăłă§ăă
ăăŁăłăťăŤăˇă°ăăŤ
Go Context ăŽăă 1 ă¤ăŽä˝żç¨äžăŻăăăŁăłăťăŤăˇă°ăăŤăäźéăăăă¨ă§ăăĺĽăŽă´ăŤăźăăłĺ
ă§ CreateFileWatcher(ctx context.Context, filename string) ăĺźăłĺşăă˘ăăŞăąăźăˇă§ăłăä˝ćăăăă¨ăćłĺăăŚăżăžăăăăăăŽé˘ć°ăŻăăăĄă¤ăŤăăčŞăżĺăăçśăăŚć´ć°ăăăŁăăăăçšĺŽăŽăăĄă¤ăŤăŚăŠăăăŁăźăä˝ćăăžăăćäžăăă Context ăćéĺăăŤăŞăăăăŁăłăťăŤăăăă¨ăăăŽé˘ć°ăŻăăăĺŚçăăŚăăĄă¤ăŤč¨čż°ĺăéăăžăă
Context Value
Go Context ăŽćĺžăŽä˝żç¨äžăŻăăăźă¨ĺ¤ăŽăŞăšăăéăśăă¨ă§ăă Context ăŤăăźă¨ĺ¤ăŽăŞăšăăĺŤăăćĺłăŻä˝ă§ăăăăăGo Context ăŻćąç¨çă§ăăăăă使ç¨äžăŻçĄéăŤăăăžăă
ăă¨ăă°ăăăŹăźăšă使ç¨ăăĺ ´ĺăç°ăŞăăľăé˘ć°ăŽéă§ĺăç¸é˘ ID ăĺ ąćăăăăă¨ăăăăăăăăžăăăä¸é¨ăŽéçşč ăŻăă㎠ID ăé˘ć°ăˇă°ăăăŁăŽä¸é¨ăŤăăăŤăŻăăžăăŤäžľçĽçă ă¨čăăăăăăăžăăăăăŽçšăŤé˘ăăŚăä¸ăăăă Context ăŽä¸é¨ă¨ăăŚăăăĺŤăăăă¨ăćąşĺŽăăăă¨ăă§ăăžăă
Context ăŽăăŁăłăťăŤăăăŁăăăă
context.Context ăżă¤ăăŻăĺ俥ĺ°ç¨ăŽéçĽăăŁă㍠<-chan struct{} ăčżă Done ăĄă˝ăăăă¨ăŻăšăăźăăăžăăăăŽăăŁăăŤăŻă Context ăŤé˘éŁäťăăăăä˝ćĽăăăŁăłăťăŤăăĺż
čŚăăăĺ ´ĺăŤéăăăăžăăăă¨ăă°
context.WithCancelă§ä˝ćăăă Context ăŤé˘éŁăă Done ăăŁăăŤăŻăcancelé˘ć°ăĺźăłĺşăăăă¨éăăăăžăăcontext.WithDeadlineă§ä˝ćăă Context ăŤé˘éŁăă Done ăăŁăăŤăŻăăăăăŠă¤ăłăéăăă¨éăăăăžăă
注ćăăšăçšăŽ 1 ă¤ăŻăĺ é¨ăăŁăăŤăŻăçšĺŽăŽĺ¤ăĺăĺăŁăă¨ăă§ăŻăŞăă Context ăăăŁăłăťăŤăăăă¨ăăăžăăŻăăăăŠă¤ăłăŤéăăă¨ăăŤéăăĺż čŚăăăă¨ăăăă¨ă§ăăăăŁăăŤăŽăŻăăźăşăŻăăăšăŚăŽćśč˛ťč ă´ăŤăźăăłăĺăĺăĺŻä¸ăŽăăŁăăŤă˘ăŻăˇă§ăłă§ăăăăă§ăăăăŽăăăŤăăŚă Context ăăăŁăłăťăŤăăăăăăăăăŠă¤ăłăŤéăăă¨ăăăšăŚăŽćśč˛ťč ăŤéçĽăĺąăăžăă
ăžă¨ăăă¨ăç硴ăă Go éçşč ăŤăŞăăŤăŻă Context ă¨ăăŽä˝żç¨ćšćłăŤă¤ăăŚçč§Łăăĺż čŚăăăăžăăĺĺă¨ăăŚăăŚăźăśăźăĺž ćŠăăăăăé˘ć°ăŻ Context ăĺĺžăăăšăă§ăăăăăŤăăăä¸ćľăŽĺźăłĺşăĺ ăăăŽé˘ć°ăăă¤ĺźăłĺşăăăćąşĺŽă§ăăăăăŤăŞăăăă§ăă
ă˝ăźăšăłăźă :simple-github:
丌čĄĺŚçďźĺŽčˇľ
ä¸éŠĺ㪠Context ăĺşăăŚăăžă (#61)
???+ info "čŚç´"
Context ăäźćăăéăŤăŻăContext ăăăŁăłăťăŤă§ăăćĄäťśăçč§Łăăăă¨ăéčŚă§ăăăă¨ăă°ăăŹăšăăłăšăé俥ăăăé㍠HTTP ăăłăăŠă Context ăăăŁăłăťăŤăăă¨ăăŞăŠă§ăă
ĺ¤ăăŽçśćłă§ăŻăGo Context ăäźćăăăă¨ăć¨ĺĽ¨ăăăžăăăă ăăContext ăŽäźćăŤăăŁăŚčť˝ĺžŽăŞăă°ăçşçăăăľăé˘ć°ăćŁăăĺŽčĄăăăŞăăŞăĺ ´ĺăăăăžăă
揥ăŽäžăčăăŚăżăžăăăăăăă¤ăăŽăżăšăŻăĺŽčĄăăŚăŹăšăăłăšăčżă HTTP ăăłăăŠăĺ
Źéăăžăăăă ăăăŹăšăăłăšăčżăç´ĺăŤăăăă Kafka ăăăăŻăŤé俥ăăăă¨ćăŁăŚăăžăăHTTP ăłăłăˇăĽăźăăŤăŹă¤ăăłăˇăŽçšă§ăăăŤăăŁă課ăăăăŞăăŽă§ăpublish ă˘ăŻăˇă§ăłăć°ăăă´ăŤăźăăłĺ
ă§éĺćăŤĺŚçăăăă¨čăăŚăăžăăăă¨ăă°ăContext ăăăŁăłăťăŤăăăĺ ´ĺăŤăĄăăťăźă¸ăŽ publish ă˘ăŻăˇă§ăłăä¸ćă§ăăăăăŤăContext ăĺăĺ
Ľăă publish é˘ć°ăčŞçąăŤä˝żăăă¨ăăžăăĺŻč˝ăŞĺŽčŁ
ăŻćŹĄăŽă¨ăăă§ăă
func handler(w http.ResponseWriter, r *http.Request) {
response, err := doSomeTask(r.Context(), r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
go func() {
err := publish(r.Context(), response)
// err ăŽĺŚçăăă
}()
writeResponse(response)
}
ăăŽăłăźăăŽä˝ăĺéĄăŞăŽă§ăăăăăHTTP ăŞăŻă¨ăšăăŤäťăăă Context ăŻăăăžăăžăŞçśćłă§ăăŁăłăťăŤăăăĺŻč˝ć§ăăăăă¨ăçĽăŁăŚăăĺż čŚăăăăžăă
- ăŻăŠă¤ă˘ăłăăŽćĽçśăçľäşăăă¨ă
- HTTP/2ăŞăŻă¨ăšăăŽĺ ´ĺăăŞăŻă¨ăšăăăăŁăłăťăŤăăăă¨ă
- ăŻăŠă¤ă˘ăłăăŤăŹăšăăłăšăć¸ăćťăăăă¨ă
ćĺ㎠2 ă¤ăŽăąăźăšă§ăŻăĺŚçăŻăăăăćŁăăčĄăăăžăăăă¨ăă°ădoSomeTask ăăăŹăšăăłăšăĺăĺăŁăăăŽăŽăăŻăŠă¤ă˘ăłăăćĽçśăéăăĺ ´ĺăăĄăăťăźă¸ă publish ăăăŞăăăăŤăContext ăć˘ăŤăăŁăłăťăŤăăăçść ă§ publish ăĺźăłĺşăăŚăĺéĄăŻăăăă辡ăăžăăăăăăăćĺžăŽăąăźăšăŻăŠăă§ăăăăă
ăŹăšăăłăšăăŻăŠă¤ă˘ăłăăŤć¸ăčžźăžăăă¨ăčŚćąăŤé˘éŁäťăăăă Context ăăăŁăłăťăŤăăăžăăăăăăŁăŚă獜ĺçść ăŤç´é˘ăăžăă
- ăŹăšăăłăšă Kafka ㎠publish ĺžăŤć¸ăăăĺ ´ĺăăŹăšăăłăšăčżăăăĄăăťăźă¸ăćŁĺ¸¸ăŤĺ Źéăăžăă
- ăă ăăKafka ㎠publish ĺăžă㯠publish ä¸ăŤăŹăšăăłăšăć¸ăăăĺ ´ĺăăĄăăťăźă¸ăŻ publish ăăăăšăă§ăŻăăăžăăă
ĺžč ăŽĺ ´ĺăHTTP ăŹăšăăłăšăăăăŤčżăăŽă§ăpublish ăĺźăłĺşăă¨ă¨ăŠăźăčżăăăžăă
???+ note "čŁčśł"
Go 1.21 ăăăŻăăăŁăłăťăŤăăăŤć°ăă Context ăä˝ćăăćšćłăčż˝ĺ ăăăžăăă [`context.WithoutCancel`](https://pkg.go.dev/context#WithoutCancel) ăŻă茪ăăăŁăłăťăŤăăăă¨ăăŤăăŁăłăťăŤăăăŚăăŞă茪ăŽăłăăźăčżăăžăă
ăžă¨ăăă¨ăContext ăŽäźćăŻć éăŤčĄăĺż čŚăăăăžăă
ă˝ăźăšăłăźă :simple-github:
ĺć˘ăăšăă¨ăăçĽăăăŤă´ăŤăźăăłăéĺ§ăăŚăăžă (#62)
???+ info "čŚç´"
ăŞăźăŻăéżăăăă¨ăŻăă´ăŤăźăăłăéĺ§ăăăăăłăŤăćçľçăŤĺć˘ăăĺż
čŚăăăăă¨ăćĺłăăžăă
ă´ăŤăźăăłăŻç°ĄĺăŤčĄăăă¨ăă§ăăžăăé常ăŤç°Ąĺă§ăăăăăć°ăăă´ăŤăźăăłăăă¤ĺć˘ăăăăŤă¤ăăŚăŽč¨çťăĺż ăăăçŤăŚăŚăăŞăĺŻč˝ć§ăăăăăŞăźăŻăŤă¤ăŞăăăă¨ăăăăžăăă´ăŤăźăăłăăă¤ĺć˘ăăă°ăăăăăăăŞăăŽăŻăGoč¨čŞă§ăăăăč¨č¨ä¸ăŽĺéĄă§ăăă丌čĄĺŚçăŤăăăăăšă§ăă
ĺ ˇä˝çăŞäžăŤă¤ăăŚčŞŹćăăžăăăăĺ¤é¨č¨ĺŽďźăăźăżăăźăšćĽçśăŞăŠă使ç¨ăăăăŽăŞăŠďźăçŁčŚăăĺż čŚăăăă˘ăăŞăąăźăˇă§ăłăč¨č¨ăăžăăăžăă揥ăŽăăăŞĺŽčŁ ăăăŚăżăžăă
func main() {
newWatcher()
// ă˘ăăŞăąăźăˇă§ăłăĺŽčĄăă
}
type watcher struct { /* ăăă¤ăăŽăŞă˝ăźăš */ }
func newWatcher() {
w := watcher{}
go w.watch() // ĺ¤é¨č¨ĺŽăçŁčŚăăă´ăŤăźăăłăä˝ćăă
}
ăăŽăłăźăăŽĺéĄăŻăăĄă¤ăłăŽă´ăŤăźăăłăçľäşăăă¨ďźăăăă OS ăˇă°ăăŤăžăăŻćéăŽăŻăźăŻăăźăăŽăăďźăă˘ăăŞăąăźăˇă§ăłăĺć˘ăăŚăăžăăă¨ă§ăăăăăăŁăŚăăŚăŠăăăŁăźăŤăăŁăŚä˝ćăăăăŞă˝ăźăšăŻćŁĺ¸¸ăŤéăăăăžăăăăăăé˛ăăŤăŻăŠăăăă°ăăă§ăăăăă
1 ă¤ăŽćšćłă¨ăăŚăŻămain ăćťăŁăă¨ăăŤăăŁăłăťăŤăăă Context ă newWatcher ăŤć¸Ąăăă¨ăćăăăăžăă
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
newWatcher(ctx)
// ă˘ăăŞăąăźăˇă§ăłăĺŽčĄăă
}
func newWatcher(ctx context.Context) {
w := watcher{}
go w.watch(ctx)
}
ä˝ćăă Context ă watch ăĄă˝ăăăŤäźćăăžăăContext ăăăŁăłăťăŤăăăă¨ăăŚăŠăăăŁăźć§é ä˝ăŻăăŽăŞă˝ăźăšăéăăžăăăăăăwatch ăăăăčĄăćéă確ĺŽăŤăăă¨ăŻăăăžăăăăăăŻč¨č¨ä¸ăŽćŹ éĽă§ăă
ĺéĄăŻăă´ăŤăźăăłăĺć˘ăăĺż čŚăăăăă¨ăäźăăăăăŤăˇă°ăăŤă使ç¨ăăăă¨ă§ăăăŞă˝ăźăšăéăăăăăžă§ă茪ăŽă´ăŤăźăăłăăăăăŻăăžăăă§ăăăăăăŞăăŞăăăăŤăăžăăăă
func main() {
w := newWatcher()
defer w.close()
// ă˘ăăŞăąăźăˇă§ăłăĺŽčĄăă
}
func newWatcher() watcher {
w := watcher{}
go w.watch()
return w
}
func (w watcher) close() {
// ăŞă˝ăźăšăéăă
}
ăŞă˝ăźăšăéăăćéăŤăŞăŁăăă¨ă watcher ăŤéçĽăă䝣ăăăŤă defer ă使ç¨ăăŚăăŽăclose ăĄă˝ăăăĺźăłĺşăăă˘ăăŞăąăźăˇă§ăłăçľäşăăĺăŤăŞă˝ăźăšă確ĺŽăŤéăăăăăăăŤăăžăă
ăžă¨ăăă¨ăă´ăŤăźăăłăŻäťăŽăŞă˝ăźăšă¨ĺć§ăăĄă˘ăŞăäťăŽăŞă˝ăźăšăč§ŁćžăăăăăŤćçľçăŤéăăĺż čŚăăăăă¨ăŤćł¨ćăăŚăă ăăăă´ăŤăźăăłăăă¤ĺć˘ăăăăçĽăăăŤéĺ§ăăăŽăŻč¨č¨ä¸ăŽĺéĄă§ăăă´ăŤăźăăłăéĺ§ăăăă¨ăăŻĺ¸¸ăŤăăă¤ĺć˘ăăăăŤă¤ăăŚć確ăŞč¨çťăçŤăŚăĺż čŚăăăăžăăćĺžăŤăŞăăžăăăăă´ăŤăźăăłăăŞă˝ăźăšăä˝ćăăăăŽćĺšćéăă˘ăăŞăąăźăˇă§ăłăŽĺçśćéăŤăă¤ăłăăăăŚăăĺ ´ĺăŻăă˘ăăŞăąăźăˇă§ăłăçľäşăăĺăŤăăŽă´ăŤăźăăłăĺŽäşăăăŽăĺž ăŁăćšăăăăă確ĺŽă§ăăăăăăăă¨ă§ăăŞă˝ăźăšăééăăŞăč§Łćžă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ă´ăŤăźăăłă¨ăŤăźăĺ¤ć°ăŤćł¨ćăăŞă (#63)
???+ warning "注ć"
ăăŽăăšăŻ Goă1.22 ăăăŻć°ăŤăăĺż
čŚăăăăžăăďź[芳細](https://go.dev/blog/loopvar-preview)ďźă
select ă¨ăăŁăăŤă使ç¨ăăŚćąşĺŽçĺä˝ăćĺž
ăă (#64)
???+ info "čŚç´"
č¤ć°ăŽăŞăăˇă§ăłăĺŻč˝ăŞĺ ´ĺăč¤ć°ăŽăăŁăăŤă§ `select` ăăă¨ăąăźăšăăŠăłăă ăŤé¸ćăăăăă¨ăçč§Łăăă¨ă丌čĄĺŚçăŤăăă蝽垎ăŞăă°ăŤă¤ăŞăăĺŻč˝ć§ăŽăă誤ăŁă䝎ĺŽăçŤăŚăăă¨ăăŞăăŞăăžăă
Go éçşč ăăăŁăăŤăćä˝ăăă¨ăăŤăăăăĄăŞééă㎠1 ă¤ăŻăselect ăč¤ć°ăŽăăŁăăŤă§ăŠăŽăăăŤĺä˝ăăăăŤă¤ăăŚčޤăŁăçč§Łăăăăă¨ă§ăă
ăă¨ăă°ă揥ăŽĺ ´ĺăčăăŚăżăžăăăďź disconnectCh ăŻăăăăĄăŞăăăŁăăŤă§ăďźă
go func() {
for i := 0; i < 10; i++ {
messageCh <- i
}
disconnectCh <- struct{}{}
}()
for {
select {
case v := <-messageCh:
fmt.Println(v)
case <-disconnectCh:
fmt.Println("disconnection, return")
return
}
}
ăăŽäžăč¤ć°ĺĺŽčĄăăĺ ´ĺăçľćăŻăŠăłăă ăŤăŞăăžăă
0
1
2
disconnection, return
0
disconnection, return
ăŠăăăăăă 10 éăŽăĄăăťăźă¸ăćśč˛ťăăăŽă§ăŻăŞăăăăŽăăĄăŽć°éă ăăĺ俥ăăžăăăăăăŻăč¤ć°ăŽăăŁăăŤă¨ä˝ľç¨ăăĺ ´ĺ㎠select ćăŽäťć§ăŤăăăăŽă§ăďźhttps:// go.dev/ref/specďźă
!!! quote
1 ă¤äťĽä¸ăŽé俥ăçśčĄă§ăăĺ ´ĺăĺä¸ăŽćŹäźźăŠăłăă é¸ćăŤăăŁăŚăçśčĄă§ăă 1 ă¤ăŽé俥ăé¸ćăăăžăă
ćĺăŤä¸č´ăăăąăźăšăĺŞĺ ăăă switch ćă¨ăŻç°ăŞăăselect ćăŻč¤ć°ăŽăŞăăˇă§ăłăĺŻč˝ăŞĺ ´ĺăŤăŠăłăă ăŤé¸ćăăžăă
ăăŽĺä˝ăŻćĺăŻĺĽĺŚăŤćăăăăăăăžăăăăăăăăăăŻăšăżăăźăˇă§ăłăé˛ăă¨ăăççąăăăŁăŚăŽăă¨ă§ăăćĺăŤé¸ćăăăé俥ăă˝ăźăšăŽé ĺşăŤĺşăĽăăŚăăă¨ăăžăăăăŽĺ ´ĺăé俥é庌ăéăăăăŤăăă¨ăă° 1 ă¤ăŽăăŁăăŤăăăăĺ俥ă§ăăŞăă¨ăăçśćłăŤéĽăĺŻč˝ć§ăăăăžăăăăăé˛ăăăăŤăGoč¨čŞăŽč¨č¨č ăŻăŠăłăă é¸ćă使ç¨ăăăă¨ăŤăăžăăă
č¤ć°ăŽăăŁăăŤă§ select ă使ç¨ăăĺ ´ĺăč¤ć°ăŽăŞăăˇă§ăłăăăăŞăăă˝ăźăšé ĺşăŽćĺăŽăąăźăšăčŞĺçăŤĺŞĺ
ăăăăăă§ăŻăŞăăă¨ăŤćł¨ćăăĺż
čŚăăăăžăă䝣ăăăŤăGoč¨čŞăŻăŠăłăă ăŤé¸ćăăăăăăŠăŽăŞăăˇă§ăłăé¸ćăăăăăŻäżč¨źăăăžăăăăăŽĺä˝ăĺ
ćăăăŤăŻăĺä¸ăŽççŁč
ă´ăŤăźăăłăŽĺ ´ĺăăăăăĄăŞăăŽăăŁăăŤăžăăŻĺä¸ăŽăăŁăăŤă使ç¨ăăăă¨ăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
éçĽăăŁăăŤă使ç¨ăăŚăăŞă (#65)
???+ info "čŚç´"
`chan struct{}` ĺă使ç¨ăăŚéçĽăé俥ăăžăăăă
ăăŁăăŤăŻăăˇă°ăăŤăäťăăŚă´ăŤăźăăłéă§é俥ăăăăăŽăĄăŤăăşă ă§ăăăˇă°ăăŤăŤăŻăăźăżăĺŤăžăăŚăăăăŠăăăŻé˘äżăăăžăăă
ĺ
ˇä˝çăŞäžăčŚăŚăżăžăăăăé俥ăŽĺćăçşçăăăăłăŤăăăéçĽăăăăŁăăŤăä˝ćăăžăă 1 ă¤ăŽćšćłă¨ăăŚăăăă chan bool ă¨ăăŚćąăăă¨ăćăăăăžăă
disconnectCh := make(chan bool)
ăăă§ăăăŽăăăŞăăŁăăŤăćäžăă API ă¨ĺŻžčŠąăăă¨ăăžăăăăăŻçĺ˝ĺ¤ăŽăăŁăăŤă§ăăăăătrue ăžă㯠false ăŽăĄăăťăźă¸ăĺ俥ă§ăăžăătrue ăä˝ăäźăăŚăăăăŻăăăăćăăă§ăăăăăăăă false ă¨ăŻä˝ăćĺłăăăŽă§ăăăăăé俥ăĺćăăăŚăăŞăă¨ăăăă¨ă§ăăăăăăăŽĺ ´ĺăăŠăăăăăŽé ťĺşŚă§ăăŽăăăŞăˇă°ăăŤăĺ俥ăăăŽă§ăăăăăăăăăŻĺćĽçśăăă¨ăăăă¨ă§ăăăăăăăăă false ăĺăĺăăă¨ăćĺž
ăăšăăŞăŽă§ăăăăăăăăă true ăĄăăťăźă¸ăĺăĺăăă¨ă ăăćĺž
ăăšăă§ăăăă
ăăŽĺ ´ĺăć
ĺ ąăäźăăăăăŤçšĺŽăŽĺ¤ăŻĺż
čŚăŞăăă¨ăćĺłăăăăźăżăŽ ăŞă ăăŁăăŤăĺż
čŚăŤăŞăăžăăăăăĺŚçăăć
Łç¨çăŞćšćłăŻă犺ăŽć§é ä˝ăŽăăŁăăŤââ chan struct{} ââă使ç¨ăăăă¨ă§ăă
nil ăăŁăăŤă使ç¨ăăŚăăŞă (#66)
???+ info "čŚç´"
nil ăăŁăăŤă使ç¨ăăăă¨ăŤăăŁăŚăăă¨ăă° `select` ćăăăąăźăšă _ĺé¤_ ă§ăăăăă丌čĄĺŚçăčĄăéăŽéĺ
ˇăŽä¸ă¤ă¨ăăŚä˝żăăăăăŤăŞăăšăă§ăă
揥ăŽăłăźăăŤăăŁăŚä˝ăčĄăăăă§ăăăăă
var ch chan int
<-ch
ch 㯠chan int ĺă§ăăăăŁăăŤăŽăźăĺ¤ăŻ nil ă§ăăăŽă§ă ch 㯠nil ă§ăăă´ăŤăźăăłăŻ panic ă辡ăăăžăăăăă ăăć°¸äš
ăŤăăăăŻăăžăă
nil ăăŁăăŤăŤăĄăăťăźă¸ăé俥ăăĺ ´ĺăĺçăŻĺăă§ăă䝼ä¸ăŽă´ăŤăźăăłăŻć°¸äš ăŤăăăăŻăăžăă
var ch chan int
ch <- 0
ă§ăŻăGoč¨čŞă nil ăăŁăăŤă¨ăŽéă§ăĄăăťăźă¸ăŽéĺ俥ă訹ĺŻăăçŽçăŻä˝ă§ăăăăăăă¨ăă°ă2 ă¤ăŽăăŁăăŤăăăźă¸ăăć Łç¨çăŞćšćłăĺŽčŁ ăăăŽăŤă nil ăăŁăăŤă使ç¨ăăăă¨ăă§ăăžăă
func merge(ch1, ch2 <-chan int) <-chan int {
ch := make(chan int, 1)
go func() {
for ch1 != nil || ch2 != nil { // ćä˝ă§ăä¸ă¤ăŽăăŁăăŤă nil ă§ăŞăăă°çśčĄăă
select {
case v, open := <-ch1:
if !open {
ch1 = nil // éăăă ch1 ă nil ăăŁăăŤăŤĺ˛ăĺ˝ăŚă
break
}
ch <- v
case v, open := <-ch2:
if !open {
ch2 = nil // éăăă ch2 ă nil ăăŁăăŤăŤĺ˛ăĺ˝ăŚă
break
}
ch <- v
}
}
close(ch)
}()
return ch
}
ăăŽć´çˇ´ăăăč§ŁćąşçăŻănil ăăŁăăŤăĺŠç¨ăăŚăä˝ăăăŽćšćłă§ select ćăă 1 ă¤ăŽăąăźăšă ĺé¤ ăăžăă
nil ăăŁăăŤăŻçśćłăŤăăŁăŚăŻäžżĺŠă§ăăăGo éçşč ăŻä¸ŚčĄĺŚçăćąăéăŤä˝żăăăŞăăăăăŤăŞăŁăŚăăăšăă§ăă
ă˝ăźăšăłăźă :simple-github:
ăăŁăăŤăŽĺŽšéăŤă¤ăăŚĺ°ćăăŚăă (#67)
???+ info "čŚç´"
ĺéĄăçşçăăĺ ´ĺăŻă使ç¨ăăăăŁăăŤăŽĺăć
éăŤćąşĺŽăăŚăă ăăăĺćă埡ĺăŤäżč¨źăăŚăăăăŽăŻăăăăĄăŞăăăŁăăŤăŽăżă§ăă
ăăăăĄăăăăŁăăŤäťĽĺ¤ăŽăăŁăăŤăŽĺŽšéăćĺŽăăăŤăŻćŁĺ˝ăŞççąăăăăšăă§ăă
ćĺĺăăŠăźăăăă§čľˇăăĺžăĺŻä˝ç¨ăĺżăăŚăăžăďź etcd ăăźăżçŤśĺăŽäžă¨ăăăăăăŻďź (#68)
???+ info "čŚç´"
ćĺĺăŽć¸ĺźč¨ĺŽăć˘ĺăŽé˘ć°ăĺźăłĺşăĺŻč˝ć§ăăăăă¨ăčŞčăăăă¨ăŻăăăăăăăŻăăăŽäťăŽăăźăżçŤśĺăŽĺŻč˝ć§ăŤćł¨ćăăăă¨ăćĺłăăžăă
ă˝ăźăšăłăźă :simple-github:
append ă§ăăźăżçŤśĺă辡ăăăŚăăžă (#69)
???+ info "čŚç´"
`append` ăŽĺźăłĺşăăŻĺż
ăăăăăźăżçŤśĺăăŞăăăă§ăŻăăăžăăăăăăŤăĺ
ąćăšăŠă¤ăšä¸ă§ĺćăŤä˝żç¨ăăŚăŻăăăžăăă
ă˝ăźăšăłăźă :simple-github:
ăšăŠă¤ăšă¨ăăăă§ăăĽăźăăăŻăšăćŁăă使ç¨ăăŚăăŞă (#70)
???+ info "čŚç´"
ăšăŠă¤ăšă¨ăăăăŻăă¤ăłăżă§ăăăă¨ăčŚăăŚăăă¨ăĺ
¸ĺçăŞăăźăżçŤśĺăé˛ăăă¨ăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
sync.WaitGroup ăćŁăă使ç¨ăăŚăăŞă (#71)
???+ info "čŚç´"
`sync.WaitGroup` ăćŁăă使ç¨ăăăŤăŻăă´ăŤăźăăłă辡ĺăăĺ㍠`Add` ăĄă˝ăăăĺźăłĺşăăžăăăă
ă˝ăźăšăłăźă :simple-github:
sync.Cond ăŤă¤ăăŚĺżăăŚăăžă (#72)
???+ info "čŚç´"
`sync.Cond` ă使ç¨ăăă¨ăč¤ć°ăŽă´ăŤăźăăłăŤçš°ăčżăéçĽăé俥ă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
errgroup ă使ç¨ăăŚăăŞă (#73)
???+ info "čŚç´"
`errgroup` ăăăąăźă¸ă使ç¨ăăŚăă´ăŤăźăăłăŽă°ăŤăźăăĺćăăă¨ăŠăźă¨ Context ăĺŚçă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
sync ĺăŽăłăăź (#74)
???+ info "čŚç´"
`sync` ĺăŻăłăăźăăăăšăă§ăŻăăăžăăă
ă˝ăźăšăłăźă :simple-github:
ć¨ćşăŠă¤ăăŠăŞ
ééăŁăćéăćĺŽăă (#75)
???+ info "čŚç´"
`time.Duration` ăĺăĺ
Ľăăé˘ć°ăŤăŻćł¨ćăćăŁăŚăă ăăăć´ć°ă渥ăăă¨ăŻč¨ąĺŻăăăŚăăžăăă桡䚹ăćăăŞăăă㍠time API ă使ç¨ăăăăĺŞăăŚăă ăăă
ć¨ćşăŠă¤ăăŠăŞăŽĺ¤ăăŽé˘ć°ăŻăint64 ĺăŽă¨ă¤ăŞă˘ăšă§ăă time.Duration ăĺăĺ
Ľăăžăăăă ăă1 ĺä˝ăŽ time.Duration ăŻăäťăŽăăă°ăŠăăłă°č¨čŞă§ä¸čŹçăŤčŚăăă 1 ăăŞç§ă§ăŻăŞăă1 ăăç§ă襨ăăžăăăăŽçľćătime.Duration API ă使ç¨ăă䝣ăăăŤć°ĺ¤ĺă渥ăă¨ăäşćłĺ¤ăŽĺä˝ăçşçăăĺŻč˝ć§ăăăăžăă
äťč¨čŞă使ç¨ăăăă¨ăŽăăéçşč
ăŽćšăŻă揥ăŽăłăźăăŤăăŁăŚ 1 ç§ĺ¨ćăŽć°ăă time.Ticker ăçćăăăă¨čăăăăăăăžăăă
ticker := time.NewTicker(1000)
for {
select {
case <-ticker.C:
// ĺŚçăăă
}
}
ăăăăŞăăă1,000 time.Duration = 1,000 ăăç§ă§ăăăăăćłĺŽăăăŚăă 1ç§ ă§ăŻăŞăă1,000 ăăç§ = 1 ăă¤ăŻăç§ăŽĺ¨ćăŤăŞăăžăă
桡䚹ăäşćłĺ¤ăŽĺä˝ăćăăŞăăăăăă¤ă time.Duration API ă使ç¨ăăăšăă§ăă
ticker = time.NewTicker(time.Microsecond)
// ăăăăŻ
ticker = time.NewTicker(1000 * time.Nanosecond)
ă˝ăźăšăłăźă :simple-github:
time.After ă¨ăĄă˘ăŞăŞăźăŻ (#76)
???+ info "čŚç´"
çš°ăčżăăăé˘ć°ďźăŤăźăă HTTP ăăłăăŠăŞăŠďźă§ `time.After` ăŽĺźăłĺşăăĺéżăăă¨ăăăźăŻćăŽăĄă˘ăŞćśč˛ťăĺéżă§ăăžăă`time.After` ăŤăăŁăŚçćăăăăŞă˝ăźăšăŻă timer ăçľäşăăă¨ăăŤăŽăżč§Łćžăăăžăă
ă˝ăźăšăłăźă :simple-github:
JSON ĺŚçă§ăăăăĄăŞééă (#77)
-
ĺăŽĺăčžźăżăŤăăäşćłĺ¤ăŽĺä˝
Go ć§é ä˝ă§ĺăčžźăżăăŁăźăŤăă使ç¨ăăĺ ´ĺăŻćł¨ćăăŚăă ăăă ăŞăăŞă
json.Marshaleră¤ăłăżăă§ăźăšăĺŽčŁ ăă time.Time ĺăčžźăżăăŁăźăŤăăŽăăăŞăăŁăăăŞăă°ăçşçăăŚăăăăŠăŤăăŽăăźăˇăŁăŞăłă°ĺä˝ăăŞăźăăźăŠă¤ăăăăĺŻč˝ć§ăăăăăă§ăă
ă˝ăźăšăłăźă :simple-github:
-
JSON 㨠monotonic clock
2 ă¤ăŽ
time.Timeć§é ä˝ăćŻčźăăĺ ´ĺătime.TimeăŤăŻ wall clock 㨠monotonic clock ăŽä¸ĄćšăĺŤăžăăŚăăă== ćźçŽĺă使ç¨ăăćŻčźăŻä¸ĄćšăŽ clock ăŤĺŻžăăŚčĄăăăăă¨ăćăĺşăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
-
anyăŽăăăJSON ăăźăżăŽă˘ăłăăźăˇăŁăŞăłă°ä¸ăŤăăăăćäžăăă¨ăăŤééăăéżăăăăăŤăć°ĺ¤ăŻăăăŠăŤăă§
float64ăŤĺ¤ćăăăăă¨ăŤćł¨ćăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
SQL ă§ăăăăĄăŞééă (#78)
-
sql.Openăĺż ăăăăăźăżăăźăšă¸ăŽćĽçśă確çŤăăăăă§ăŻăŞăăă¨ăĺżăăŚăăč¨ĺŽă芌ăăăăźăżăăźăšăŤă˘ăŻăťăšă§ăăăă¨ă確čŞăăĺż čŚăăăĺ ´ĺăŻă
PingăžăăŻPingContextăĄă˝ăăăĺźăłĺşăăžăăăă
ă˝ăźăšăłăźă :simple-github:
-
ăłăăŻăˇă§ăłăăźăŞăłă°ăŽăă¨ăĺżăă
ĺŽéç¨ć°´ćşăŽă˘ăăŞăąăźăˇă§ăłă§ăŻăăăźăżăăźăšćĽçśăăŠăĄăźăżăč¨ĺŽăăžăăăă
-
ăăŞăă˘ăăšăăźăăĄăłăă使ç¨ăăŚăăŞă
SQL ăŽăăŞăă˘ăăšăăźăăĄăłăă使ç¨ăăă¨ăăŻă¨ăŞăăăĺšççăă¤ç˘şĺŽăŤăŞăăžăă
ă˝ăźăšăłăźă :simple-github:
-
null ĺ¤ă誤ăŁăćšćłă§ĺŚçăăŚăă
ăăźăăŤĺ ㎠null ă訹厚ăăăŚăăĺăŻăăă¤ăłăżăžăăŻ
sql.NullXXXĺă使ç¨ăăŚĺŚçăăžăăăă
ă˝ăźăšăłăźă :simple-github:
-
čĄăŽĺ垊ĺŚçăŤăăă¨ăŠăźăĺŚçăăŞă
čĄăŽĺ垊ĺŚçăŽĺžăŤ
sql.RowsăŽErrăĄă˝ăăăĺźăłĺşăăŚă揥ăŽčĄăŽćşĺä¸ăŤă¨ăŠăźăčŚéăăŚăăŞăăă¨ă確čŞăăžăăăă
ă˝ăźăšăłăźă :simple-github:
ä¸ćçăŞăŞă˝ăźăšďź HTTP bodyăsql.Rowsăăăăł os.File ďźăéăăŚăăŞă (#79)
???+ info "čŚç´"
ăŞăźăŻăéżăăăăăŤă `io.Closer` ăĺŽčŁ
ăăŚăăăăšăŚăŽć§é ä˝ăćĺžăŤăŻéăăžăăăă
ă˝ăźăšăłăźă :simple-github:
HTTP ăŞăŻă¨ăšăăŤĺżçăăĺžăŽ return ćăĺżăăŚăăžă (#80)
???+ info "čŚç´"
HTTP ăăłăăŠăŽĺŽčŁ
ă§ăŽäşćłĺ¤ăŽĺä˝ăéżăăăăă`http.Error` ăŽĺžăŤăăłăăŠăĺć˘ăăăĺ ´ĺăŻă`return` ćăĺżăăŞăăăăŤăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
ć¨ćşăŽ HTTP ăŻăŠă¤ă˘ăłăă¨ăľăźăăźă使ç¨ăăŚăă (#81)
???+ info "čŚç´"
ĺŽéç¨ć°´ćşăŽă˘ăăŞăąăźăˇă§ăłăćąăăŚăăĺ ´ĺăŻăć¨ćşăŽ HTTP ăŻăŠă¤ă˘ăłăă¨ăľăźăăźăŽĺŽčŁ
ă使ç¨ăăŞăă§ăă ăăăăăăăŽĺŽčŁ
ăŤăŻăăżă¤ă ă˘ăŚăă稟ĺç°ĺ˘ă§ĺż
é ă§ăăăšăĺä˝ăćŹ č˝ăăŚăăžăă
ă˝ăźăšăłăźă :simple-github:
ăăšă
ăăšăăĺéĄăăŚăăŞăďźăăŤăăżă°ăç°ĺ˘ĺ¤ć°ăăˇă§ăźăă˘ăźăďź (#82)
???+ info "čŚç´"
ăăŤăăăŠă°ăç°ĺ˘ĺ¤ć°ăăžăăŻăˇă§ăźăă˘ăźăă使ç¨ăăŚăăšăăĺéĄăăă¨ăăăšăăăăťăšăăăĺšççăŤăŞăăžăăăăŤăăăŠă°ăžăăŻç°ĺ˘ĺ¤ć°ă使ç¨ăăŚăăšăăŤăă´ăŞďźăă¨ăă°ăĺä˝ăăšăă¨çľąĺăăšăďźăä˝ćăăçćéăŽăăšăă¨éˇćéăŽăăšăăĺşĺĽăăăă¨ă§ăĺŽčĄăăăăšăăŽç¨ŽéĄăćąşĺŽă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
-race ăăŠă°ăćĺšăŤăăŚăăŞă (#83)
???+ info "čŚç´"
丌čĄă˘ăăŞăąăźăˇă§ăłăä˝ćăăĺ ´ĺăŻă `-race` ăăŠă°ăćĺšăŤăăăă¨ă埡ăăĺ§ăăăžăăăăăăăă¨ă§ăă˝ăăăŚă§ă˘ăŽăă°ăŤă¤ăŞăăĺŻč˝ć§ăŽăăć˝ĺ¨çăŞăăźăżçŤśĺăçşčŚă§ăăăăăŤăŞăăžăă
ăăšăĺŽčĄă˘ăźăďź -parallel ăăăł -shuffle ďźă使ç¨ăăŚăăŞă (#84)
???+ info "čŚç´"
`-parallel` ăăŠă°ă使ç¨ăăăŽăŻăçšăŤéˇćéĺŽčĄăăăăăšăăéŤéĺăăăŽăŤĺšćçă§ăă `-shuffle` ăăŠă°ă使ç¨ăăă¨ăăăšăăšă¤ăźăăăă°ăé ăĺŻč˝ć§ăŽăăééăŁă䝎ĺŽăŤäžĺăăŞăăăăŤăăăă¨ăă§ăăžăă
ăăźăăŤé§ĺăăšăă使ç¨ăăŞă (#85)
???+ info "čŚç´"
ăăźăăŤé§ĺăăšăăŻăăłăźăăŽéč¤ăé˛ăăĺ°ćĽăŽć´ć°ăŽĺŚçă厚ćăŤăăăăăŤăä¸éŁăŽéĄäźźăăăăšăăă°ăŤăźăĺăăĺšççăŞćšćłă§ăă
ă˝ăźăšăłăźă :simple-github:
ĺä˝ăăšăă§ăŽăšăŞăźă (#86)
???+ info "čŚç´"
ăăšăăŽä¸ĺŽĺŽăăăŞăăăăăĺ
ç˘ăŤăăăăăŤăĺćă使ç¨ăăŚăšăŞăźăăĺéżăăžăăăăĺćăä¸ĺŻč˝ăŞĺ ´ĺăŻăăŞăăŠă¤ććłăć¤č¨ăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
time API ăĺšççăŤĺŚçă§ăăŚăăŞă (#87)
???+ info "čŚç´"
time API ă使ç¨ăăŚé˘ć°ăĺŚçăăćšćłăçč§Łăăăă¨ă§ăăăšăăŽä¸ĺŽĺŽăăčť˝ć¸ăăăă¨ăă§ăăžăăé ăăäžĺé˘äżăŽä¸é¨ă¨ă㌠time ăĺŚçăăăăăŻăŠă¤ă˘ăłă㍠time ăćäžăăăăăŤčŚćąăăăăăăŞăŠăć¨ćşçăŞć掾ăĺŠç¨ă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ăăšăăŤé˘ăăăŚăźăăŁăŞăăŁăăăąăźă¸ďź httptest ăăăł iotest ďźă使ç¨ăăŚăăŞă (#88)
httptestăăăąăźă¸ăŻăHTTP ă˘ăăŞăąăźăˇă§ăłăćąăăŽăŤĺ˝šçŤăĄăžăăăŻăŠă¤ă˘ăłăă¨ăľăźăăźăŽä¸ĄćšăăăšăăăăăăŽä¸éŁăŽăŚăźăăŁăŞăăŁăćäžăăžăă
ă˝ăźăšăłăźă :simple-github:
iotestăăăąăźă¸ăŻăio.Reader ăä˝ćăăă˘ăăŞăąăźăˇă§ăłăŽă¨ăŠăźčć§ăăăšăăăăŽăŤĺ˝šçŤăĄăžăă
ă˝ăźăšăłăźă :simple-github:
ä¸ćŁç˘şăŞăăłăăăźăŻăŽä˝ć (#89)
???+ info "čŚç´"
ăăłăăăźăŻăŤă¤ăăŚ
* ăăłăăăźăŻăŽç˛žĺşŚăçśćăăăŤăŻătime ăĄă˝ăăă使ç¨ăăžăăăă
* ăăłăăżă¤ă ăĺ˘ăăăăbenchstat ăŞăŠăŽăăźăŤă使ç¨ăăăă¨ă§ăăă¤ăŻăăăłăăăźăŻăćąăăăăăŞăăžăă
* ă˘ăăŞăąăźăˇă§ăłăćçľçăŤĺŽčĄăăăˇăšăă ăăă¤ăŻăăăłăăăźăŻăĺŽčĄăăăˇăšăă ă¨ç°ăŞăĺ ´ĺăŻăăă¤ăŻăăăłăăăźăŻăŽçľćăŤćł¨ćăăŚăă ăăă
* ăłăłăă¤ăŠăŽćéŠĺăŤăăŁăŚăăłăăăźăŻăŽçľćă誤éĺăăăŞăăăăăăšă寞蹥ăŽé˘ć°ăĺŻä˝ç¨ăĺźă辡ăăăăăŤăăŚăă ăăă
* ăŞăăśăźăăźĺšćăé˛ăăŤăŻăCPU ăŤäžĺăăé˘ć°ă使ç¨ăăăăźăżăăăłăăăźăŻăĺçćăăăă埡ĺśăăŚăă ăăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
ă˝ăźăšăłăźă :simple-github:
Goč¨čŞăŽăăšăćŠč˝ăăăšăŚčŠŚăăŚăăŞă (#90)
-
ăłăźăăŤăăŹăă¸
ăłăźăăŽăŠăŽé¨ĺăŤćł¨ćăĺż čŚăăăăăŤç˘şčŞăăăăăŤă
-coverprofileăăŠă°ăćĺŽăăŚăłăźăăŤăăŹăă¸ă使ç¨ăăžăăăă -
ĺĽăŽăăăąăźă¸ăăăŽăăšă
ĺ é¨ă§ăŻăŞăĺ Źéăăăĺä˝ăŤçŚçšăĺ˝ăŚăăăšăăŽä˝ćă埡ĺśăăăăăŤăĺä˝ăăšăăŻĺĽă ăŽăăăąăźă¸ăŤé 罎ăăžăăăă
ă˝ăźăšăłăźă :simple-github:
-
ăŚăźăăŁăŞăăŁé˘ć°
ĺžćĽăŽ
if err != nilăŽäťŁăăăŤ*testing.Tĺ¤ć°ă使ç¨ăăŚă¨ăŠăźăĺŚçăăă¨ăăłăźăăçăăčŞăżăăăăŞăăžăă
ă˝ăźăšăłăźă :simple-github:
-
setup 㨠teardown
setup ăăăł teardown ćŠč˝ăĺŠç¨ăăŚăçľąĺăăšăăŽĺ ´ĺăŞăŠăč¤éăŞç°ĺ˘ăć§ćă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ăăĄă¸ăłă°ă使ç¨ăăŚăăŞăďźcommunity mistakeďź
???+ info "čŚç´"
ăăĄă¸ăłă°ăŻăč¤éăŞé˘ć°ăăĄă˝ăăă¸ăŽăŠăłăă ăŞăäşćłĺ¤ăŽăăžăăŻä¸ćŁăŞĺ
Ľĺăć¤ĺşăăčĺźąć§ăăă°ăăăăŤăŻć˝ĺ¨çăŞăŻăŠăăˇăĽăçşčŚăăăŽăŤĺšççă§ăă
@jeromedoucet ăăăŽăĺĺăŤćčŹăăăăžăă
ćéŠĺ
CPU ăăŁăăˇăĽăçč§ŁăăŚăăŞă (#91)
-
CPU ă˘ăźăăăŻăăŁ
L1 ăăŁăăˇăĽăŻăĄă¤ăłăĄă˘ăŞăăăç´ 50 ď˝ 100 ĺéŤéă§ăăăăăCPU ăăŚăłăăŽă˘ăăŞăąăźăˇă§ăłăćéŠĺăăăŤăŻăCPU ăăŁăăˇăĽăŽä˝żç¨ćšćłăçč§Łăăăă¨ăéčŚă§ăă
-
ăăŁăăˇăĽăŠă¤ăł
ăăŁăăˇăĽăŠă¤ăłăŽćŚĺżľăćčăăăă¨ăŻăăăźăżéç´ĺă˘ăăŞăąăźăˇă§ăłă§ăăźăżăć´çăăćšćłăçč§ŁăăăŽăŤéčŚă§ăăCPU ăŻăĄă˘ăŞăăŻăźăăă¨ăŤăă§ăăăăžăăă䝣ăăăŤăé常ăŻăĄă˘ăŞăăăăŻă 64 ăă¤ăăŽăăŁăăˇăĽăŠă¤ăłăŤăłăăźăăžăăĺă ăŽăăŁăăˇăĽăŠă¤ăłăć大éăŤć´ťç¨ăăăŤăŻă犺éçĺąćć§ă埡ĺśăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
- ć§é ä˝ăŽăšăŠă¤ăšă¨ăšăŠă¤ăšăŽć§é ä˝
ă˝ăźăšăłăźă :simple-github:
-
äşć¸ŹĺŻč˝ć§
CPU ăŤă¨ăŁăŚäşć¸ŹĺŻč˝ăŞăłăźăăŤăăăă¨ăŻăçšĺŽăŽé˘ć°ăćéŠĺăăĺšççăŞćšćłă§ăăăăžăăăă¨ăă°ăăŚăăăăžăăŻĺŽć°ăšăăŠă¤ă㯠CPU ăŤă¨ăŁăŚäşć¸ŹĺŻč˝ă§ăăăéăŚăăăăšăăŠă¤ăďźéŁçľăŞăšăăŞăŠďźăŻäşć¸Źă§ăăžăăă
ă˝ăźăšăłăźă :simple-github:
-
ăăŁăăˇăĽé 罎ăăŞăˇăź
ăăŁăăˇăĽăăăźăăŁăˇă§ăłĺăăăŚăăăă¨ăčŞčăăăă¨ă§ăé大ăŞăšăăŠă¤ăăĺéżăăăăŁăăˇăĽăŽăăä¸é¨ăŽăżă使ç¨ăăăăăŤăăăă¨ăă§ăăžăă
誤ăŁăĺ ąćăĺźă辡ăă丌čĄĺŚç(#92)
???+ info "čŚç´"
ä¸ä˝ăŹăăŤăŽ CPU ăăŁăăˇăĽăăăšăŚăŽăłă˘ă§ĺ
ąćăăăăăă§ăŻăŞăăă¨ăçĽăŁăŚăăă¨ă丌čĄĺŚçăŤăăăăŽčޤăŁăĺ
ąćăŞăŠă§ăăăŠăźăăłăšăä˝ä¸ăăăŚăăžăăă¨ăĺéżă§ăăžăăăĄă˘ăŞăŽĺ
ąćăŻăăăăŞăăŽă§ăă
ă˝ăźăšăłăźă :simple-github:
ĺ˝äť¤ăŹăăŤăŽä¸Śĺć§ăčć ŽăăŞă (#93)
???+ info "čŚç´"
ĺ˝äť¤ăŹăăŤăŽä¸Śĺć§ďźILPďźă使ç¨ăăŚăłăźăăŽçšĺŽăŽé¨ĺăćéŠĺăăCPU ăă§ăăă ăĺ¤ăăŽĺ˝äť¤ă丌ĺĺŽčĄă§ăăăăăŤăăžăăăă丝ăŞćé ㎠1 ă¤ăŤăăźăżăăśăźăăŽçšĺŽăăăăžăă
ă˝ăźăšăłăźă :simple-github:
ăăźăżăŽé 罎ăćčăăŚăăŞă (#94)
???+ info "čŚç´"
Goč¨čŞă§ăŻăĺşćŹĺăŻĺă
ăŽăľă¤ăşăŤĺăăăŚé
罎ăăăăă¨ăčŚăăŚăăăă¨ă§ăăăăăĄăŞééăăéżăăăă¨ăă§ăăžăăăă¨ăă°ăć§é ä˝ăŽăăŁăźăŤăăăľă¤ăşă§éé ăŤĺ硨ćăăă¨ăć§é ä˝ăăăăłăłăăŻăăŤăŞăďźăĄă˘ăŞĺ˛ăĺ˝ăŚăĺ°ăŞăăŞăă犺éçĺąćć§ăĺä¸ăăďźĺŻč˝ć§ăăăăă¨ăŤçćăăŚăă ăăă
ă˝ăźăšăłăźă :simple-github:
ăăźăă¨ăšăżăăŻăŽéăăçč§ŁăăŚăăŞă (#95)
???+ info "čŚç´"
ăăźăă¨ăšăżăăŻăŽĺşćŹçăŞéăăçč§Łăăăă¨ăăGo ă˘ăăŞăąăźăˇă§ăłăćéŠĺăăéăŤăŻĺ¤§ĺă§ăăăšăżăăŻĺ˛ăĺ˝ăŚăŻĺŽšćăŞăŽăŤĺŻžăăŚăăăźăĺ˛ăĺ˝ăŚăŻé
ăăăĄă˘ăŞăŽăŻăŞăźăłă˘ăă㍠GC ăĺŠç¨ăăžăă
ă˝ăźăšăłăźă :simple-github:
ĺ˛ăĺ˝ăŚăć¸ăăćšćłăăăăŁăŚăăŞăďź API ăŽĺ¤ć´ăăłăłăă¤ăŠăŽćéŠĺăăăăł sync.Poolďź (#96)
???+ info "čŚç´"
ĺ˛ăĺ˝ăŚăć¸ăăăă¨ăăGo ă˘ăăŞăąăźăˇă§ăłăćéŠĺăăä¸ă§éčŚă§ăăăăăŻăĺ
ąćăé˛ăăă㍠API ăć
éăŤč¨č¨ăăăä¸čŹç㪠Go ăłăłăă¤ăŠăŽćéŠĺăçč§Łăăă`sync.Pool` ă使ç¨ăăăŞăŠăăăžăăžăŞćšćłă§čĄăăă¨ăă§ăăžăă
ă˝ăźăšăłăźă :simple-github:
ă¤ăłăŠă¤ăłĺąéăăăŚăăŞă (#97)
???+ info "čŚç´"
ăăĄăšăăăšăŽă¤ăłăŠă¤ăłĺććłă使ç¨ăăŚăé˘ć°ăŽĺźăłĺşăăŤăăăĺĺ´ćéăĺšççăŤĺć¸ăăžăăăă
Goč¨čŞăŽč¨şćăăźăŤăĺŠç¨ăăŚăăŞă (#98)
???+ info "čŚç´"
ăăăăĄă¤ăŞăłă°ă¨ĺŽčĄăăŹăźăľăĺŠç¨ăăŚăă˘ăăŞăąăźăˇă§ăłăŽăăăŠăźăăłăšă¨ćéŠĺăăšăé¨ĺăŤă¤ăăŚçč§Łăăžăăăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
GC ăŽäťçľăżăçč§ŁăăŚăăŞă (#99)
???+ info "čŚç´"
GC ăŽčŞżć´ćšćłăçč§Łăăă¨ăçŞçśăŽč˛ čˇăŽĺ˘ĺ ăăăĺšççăŤĺŚçă§ăăăŞăŠăăăžăăžăŞćŠćľăĺžăăăžăă
Docker 㨠Kubernetes ä¸ă§Goč¨čŞăĺŽčĄăăăă¨ăŽĺ˝ąéżăçč§ŁăăŚăăŞă (#100)
???+ info "čŚç´"
Docker 㨠Kubernetes ăŤăăăă¤ăăé㎠CPU ăšăăăăŞăłă°ăĺéżăăăŤăŻăGoč¨čŞă CFS 寞ĺżă§ăŻăŞăăă¨ăŤçćăăŚăă ăăă



