109 KiB
| title | comments |
|---|---|
| Japanese Version | true |
Goč¨čŞă§ăăăăĄăŞééă
ăăŽăăźă¸ăŻă100 Go MistakesăăŽĺ 厚ăăžă¨ăăăăŽă§ăăä¸ćšă§ăăłăăĽăăăŁăŤéăăăăăźă¸ă§ăăăăžăăăăăăăĄăŞééăăăć°ăăŤčż˝ĺ ăăăăšăă ă¨ăčăă§ăăă community mistake issue ăä˝ćăăŚăă ăăă
???+ 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) { <1>
var options options <2>
for _, opt := range opts { <3>
err := opt(&options) <4>
if err != nil {
return nil, err
}
}
// ăăŽćŽľéă§ăăŞăăˇă§ăłć§é ä˝ăć§çŻăăăć§ćăĺŤăžăăžăă
// ăăăăŁăŚăăăźăč¨ĺŽăŤé˘éŁăăăă¸ăăŻăĺŽčŁ
ă§ăăžăă
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
ăŚăźăăŁăŞăăŁăăăąăźă¸ăŽä˝ć (#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:
ăšăŠă¤ăščż˝ĺ ăŽä˝żç¨ăŤăăäşćăăŹĺŻä˝ç¨ (#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 çŞçŽăŽăŤăźăłăŻăĺşĺă§ăŻ ĂŞ ă§ăŻăŞă Ă ăŤăŞăăžăă
- ä˝ç˝Ž 1 ăăä˝ç˝Ž 3 ăŤă¸ăŁăłăăăžăăăä˝ç˝Ž 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 <5>
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 "čŁčśł"
ăăć°ĺĺš´ă§ăĄă˘ăŞăé常ăŤĺŽäžĄăŤăŞăŁăăă¨ăčć
Žăăă¨ăĺžč
ăŻçžĺ¨ă§ăŻćăăžăă§ăăăăăăŁăŚăăăŽăťăŻăˇă§ăłă§ăŻăćĺ㎠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 ăćéĺăăŤăŞăăăăŁăłăťăŤăăăă¨ăăăŽé˘ć°ăŻăăăĺŚçăăŚăăĄă¤ăŤč¨čż°ĺăéăăžăă
ăłăłăăăšăĺ¤
Go Context ăŽćĺžăŽä˝żç¨äžăŻăăăźă¨ĺ¤ăŽăŞăšăăéăśăă¨ă§ăă Context ăŤăăźă¨ĺ¤ăŽăŞăšăăĺŤăăćĺłăŻä˝ă§ăăăăăGo Context ăŻćąç¨çă§ăăăăă使ç¨äžăŻçĄéăŤăăăžăă
ăă¨ăă°ăăăŹăźăšă使ç¨ăăĺ ´ĺăç°ăŞăĺŻćŹĄćŠč˝éă§ĺăç¸é˘ ID ăĺ ąćăăăăă¨ăăăăăăăăžăăăä¸é¨ăŽéçşč ăŻăă㎠ID ăé˘ć°ăˇă°ăăăŁăŽä¸é¨ăŤăăăŤăŻăăžăăŤäžľçĽçă ă¨čăăăăăăăžăăăăăŽçšăŤé˘ăăŚăä¸ăăăă Context ăŽä¸é¨ă¨ăăŚăăăĺŤăăăă¨ăćąşĺŽăăăă¨ăă§ăăžăă
Context ăŽăăŁăłăťăŤăăăŁăăăă
context.Context ăżă¤ăăŻăĺ俥ĺ°ç¨ăŽéçĽăăŁă㍠<-chan struct{} ăčżă Done ăĄă˝ăăăă¨ăŻăšăăźăăăžăăăăŽăăŁăăŤăŻă Context ăŤé˘éŁäťăăăăä˝ćĽăăăŁăłăťăŤăăĺż
čŚăăăĺ ´ĺăŤéăăăăžăăăă¨ăă°
context.WithCancelă§ä˝ćăăă Context ăŤé˘éŁăăDoneăăŁăăŤăŻăcancelé˘ć°ăĺźăłĺşăăăă¨éăăăăžăăcontext.WithDeadlineă§ä˝ćăă Context ăŤé˘éŁăăDoneăăŁăăŤăŻădeadline ăéăăă¨éăăăăžăă
注ćăăšăçšăŽ 1 ă¤ăŻăĺ é¨ăăŁăăŤăŻăçšĺŽăŽĺ¤ăĺăĺăŁăă¨ăă§ăŻăŞăă Context ăăăŁăłăťăŤăăăă¨ăăăžăăŻăăăăŠă¤ăłăŤéăăă¨ăăŤéăăĺż čŚăăăă¨ăăăă¨ă§ăăăăŁăăŤăŽăŻăăźăşăŻăăăšăŚăŽćśč˛ťč ă´ăŤăźăăłăĺăĺăĺŻä¸ăŽăăŁăăŤă˘ăŻăˇă§ăłă§ăăăăă§ăăăăŽăăăŤăăŚă Context ăăăŁăłăťăŤăăăăăăăăăŠă¤ăłăŤéăăă¨ăăăšăŚăŽćśč˛ťč ăŤéçĽăĺąăăžăă
ăžă¨ăăă¨ăç硴ăă Go éçşč ăŤăŞăăŤăŻă Context ă¨ăăŽä˝żç¨ćšćłăŤă¤ăăŚçč§Łăăĺż čŚăăăăžăăĺĺă¨ăăŚăăŚăźăśăźăĺž ćŠăăăăăé˘ć°ăŻ Context ăĺĺžăăăšăă§ăăăăăŤăăăä¸ćľăŽĺźăłĺşăĺ ăăăŽé˘ć°ăăă¤ĺźăłĺşăăăćąşĺŽă§ăăăăăŤăŞăăăă§ăă
ă˝ăźăšăłăźă :simple-github:
sync ĺăŽăłăăź (#74)
???+ info "čŚç´"
`sync` ĺăŻăłăăźăăăăšăă§ăŻăăăžăăă
ă˝ăźăšăłăźă :simple-github:
ă¤ăłăŠă¤ăłĺąéăăăŚăăŞă (#97)
???+ info "čŚç´"
ăăĄăšăăăšăŽă¤ăłăŠă¤ăłĺććłă使ç¨ăăŚăé˘ć°ăŽĺźăłĺşăăŤăăăĺĺ´ćéăĺšççăŤĺć¸ăăžăă
Goč¨čŞăŽč¨şćăăźăŤăĺŠç¨ăăŚăăŞă (#98)
???+ info "čŚç´"
ăăăăĄă¤ăŞăłă°ă¨ĺŽčĄăăŹăźăľăĺŠç¨ăăŚăă˘ăăŞăąăźăˇă§ăłăŽăăăŠăźăăłăšă¨ćéŠĺăăšăé¨ĺăŤă¤ăăŚçč§Łăăžăăăă
ăťăŻăˇă§ăłĺ ¨ćăŻăăĄăă
GC ăŽäťçľăżăçč§ŁăăŚăăŞă (#99)
???+ info "čŚç´"
GC ăŽčŞżć´ćšćłăçč§Łăăă¨ăçŞçśăŽč˛ čˇăŽĺ˘ĺ ăăăĺšççăŤĺŚçă§ăăăŞăŠăăăžăăžăŞćŠćľăĺžăăăžăă
Docker 㨠Kubernetes ä¸ă§Goč¨čŞăĺŽčĄăăăă¨ăŽĺ˝ąéżăçč§ŁăăŚăăŞă (#100)
???+ info "čŚç´"
Docker 㨠Kubernetes ăŤăăăă¤ăăéăŽCPUăšăăăăŞăłă°ăĺéżăăăŤăŻăGoč¨čŞăCFS寞ĺżă§ăŻăŞăăă¨ăŤçćăăŚăă ăăă



