
é廿°æ¥éã®çµæãå
±æããããšæããŸããããã«ã¯ãããã€ãã®å€§èŠæš¡ãªGoãããžã§ã¯ãã®gitå±¥æŽã®åæãå«ãŸããŠããŸãã
èšäºã®ç¬¬2éšã§ã¯ã go-criticã®ããã€ãã®æ°ãã蚺æã«ã€ããŠæ€èšããŸããããã«ããããšã©ãŒãå«ãå¯èœæ§ãé«ãã³ãŒããèŠã€ããããšãã§ããŸãã
éå»ã®ã¢ã€ãã¢ãæ€çŽ¢
æ°ããã³ãŒãæ€æ»ã®ã¢ã€ãã¢ãèŠã€ããã«ã¯ãä»ã®ããã°ã©ãã³ã°èšèªã®éçã¢ãã©ã€ã¶ãŒãèŠãèŠããããªãŒãã³ãœãŒã¹ã³ãŒããæåã§èª¿ã¹ãŠãšã©ãŒã³ãŒããã³ãã¬ãŒããèŠã€ããããå±¥æŽã調ã¹ããããããšãã§ããŸãã
Go-Files
ãããžã§ã¯ãããã§ãã¯ããŠãããšããŸãã ãªã³ã¿ãŒïŒéçã¢ãã©ã€ã¶ãŒïŒãèµ·åããåŸãåé¡ã¯ãããŸãã;ãœãŒã¹ããã¹ãã®ç£æ»ã倧ããªçµæããããããŸããã§ããã æ¥ãã§Go-Files
çä»ããå¿
èŠããããŸããïŒ ããã§ããªãã
Go-Files
ãååšããéãããã€ãã®ç°¡åã«æ€åºå¯èœãªæ¬ é¥ããããŸããããçŸåšã¯æ¢ã«ä¿®æ£ãããŠããŸãã å¿
èŠãªã®ã¯ãgitãªããžããªã®å±¥æŽã®åæãéå§ããããšã§ãã

ãã°ã¯è¿ãã®ã©ããã«ãããŸãã
èå³ã®ããã³ãããã¡ã³ãã®ã³ã¬ã¯ã·ã§ã³
åé¡ã¯æ¬¡ã®ãšããã§ãã
- ããããã®ã³ããããããå¯èœæ§ããããŸã
- åãæ¹èšçã§ã¯ãç©äºã¯äºãã«ç¡é¢ä¿ã§ããå ŽåããããŸã
- ã³ãããã«é¢ããã³ã¡ã³ããå®éã®å€æŽãšå®å
šã«äžèŽããªãå ŽåããããŸãã
- è¯ãã³ãããã¡ãã»ãŒãžã®äœ¿çšãéå°è©äŸ¡ããŠãã人ãããŸãïŒæããããŸããïŒ
ãŸããèªååããã«åŠçããå¿
èŠãããæ
å ±ã®éãæžãããããšæããŸãã åœé°æ§ã®å¿çã®åé¡ã¯ããµã³ãã«ãµã€ãºãå¢ããããšã§è§£æ±ºã§ããŸãïŒGoã°ã«ãŒããããã«å¶åŸ¡ã°ã«ãŒãã«ããŠã³ããŒãããŸãïŒã
ããŸããŸãªæ¹æ³ã§åæã§ããŸããã³ãããã¡ãã»ãŒãžã®å
容ã«å¿ããŠã³ãããã®ã¹ã³ã¢ãé倧è©äŸ¡ããã³éå°è©äŸ¡ããŠãäžé£ã®ãã³ãã¬ãŒãã«å¯ŸããŠgit log --grep
ãgit log --grep
ãŸããã ã³ãããã倧ããããå Žåãããã«ç Žæ£ããããšãã§ããŸãããªããªããããã«äœãèµ·ããããèªæã§ã¯ãªãããã§ãã
ä¿®æ£ããšã©ãŒã®çºèŠã®æ¬¡ã«ãéåžžã«æ¥œèгçã§ãªããæåçã§ã¯ãªããããã®èª¬æãé »ç¹ã«ããããšãä»ãå ããŸãã
- "We check length later, but we assumed it was always 1 bytes long. Not always the case. I'm a little depressed that this bug was there" - "Really fixed the bug now" - "WTF, the changes that actually fixed the bug for the accesspattern wasn't actually committed" - "how do i pronounce this damn project" ( traefic) - "damnit travis" - "one f*cking dot" (./.. => ./... .travis.yml)
æã圹ã«ç«ããªãããã°ä¿®æ£ãã¯ãæ§æã®ç·šéãããããžã§ã¯ããgo build
ã§ã³ã³ãã€ã«ããgo build
ããã§ããªããã®ä»ã®åé¡ã§ãã ãã¹ãŠã®ãããžã§ã¯ããCIãŸãã¯pre-commit hookã䜿çšããããã§ã¯ãªãããããã®ãããªå£ãããªããžã§ã³ããã¹ã¿ãŒãã©ã³ãã«å°éããããšããããŸãã
å±¥æŽãšã©ãŒ
gitãã°ã®è£ã§èŠã€ãã£ãæãè峿·±ããšã©ãŒãããã€ãèŠãŠã¿ãŸãããã
å®éã®çµæã®ä»£ããã«nilãè¿ã
gin-gonic / ginïŒãã°ãä¿®æ£ããboolã®ãã€ã³ãã«å€±æãããšerrãè¿ããŸã ïŒ
if err == nil { field.SetBool(boolVal) } - return nil + return err }
go-pg / pgïŒAppendParamã®ãã°ä¿®æ£ ïŒ
return method.AppendValue(b, m.strct.Addr(), 1), true } - return nil, false + return b, false }
é«éãã¹ã§ã®æ»ãã®æ¬ åŠ
gonum / gonumïŒdswapé«éãã¹ã®ãã°ãä¿®æ£ ïŒ
for i := 0; i < n; i++ { x[i], y[i] = y[i], x[i] } + return }
wg.Addãªãã§ãŽã«ãŒãã³ãå®è¡ããïŒ1ïŒ
btcsuite / btcdïŒRPCãµãŒããŒã®ã·ã£ããããŠã³ã«é¢ããããã€ãã®ãã°ãä¿®æ£ããŸã ã
+s.wg.Add(1) go s.walletListenerDuplicator()
ç¡å¹ãªè«çæ¡ä»¶
gorgonia / gorgoniaïŒããã€ãã®ãã°ãä¿®æ£ããŸãã ïŒ
-for i := 0; i > start; i++ { +for i := 0; i < start; i++ { retVal[i] = 0 }
src-d / go-gitïŒplumbing / idxfileïŒMemoryIndexã®æ€çŽ¢ãã°ãä¿®æ£ ïŒ
-if low < high { +if low > high { break }
go-xorm / xormïŒsumã®ãã°ãä¿®æ£ ïŒ
-if !strings.Contains(colName, " ") && strings.Contains(colName, "(") { +if !strings.Contains(colName, " ") && !strings.Contains(colName, "(") {
btcsuite / btcdïŒãµãŒããŒïŒfilteraddã§ãã¢ãåæãããã°ãä¿®æ£ ïŒ
-if sp.filter.IsLoaded() { +if !sp.filter.IsLoaded() {
btcsuite / btcdïŒæå€§æäœåŠçã§éãã¹ãã®ãã°ãä¿®æ£ ïŒ
-if pop.opcode.value < OP_16 { +if pop.opcode.value > OP_16 { s.numOps++
å€ã«ãã£ãŠæž¡ãããã¬ã·ãŒããŒïŒthis / selfïŒã®æŽæ°
ã¯ã©ã·ã㯠ãªããžã§ã¯ãã®ã³ããŒã¯ã¡ãœããå
ã§å€æŽãããŸãããã®ãããåŒã³åºãå
ã«ã¯æåŸ
ãããçµæã衚瀺ãããŸããã
ã¹ã¿ãã¯/ãã¥ãŒ/ããã¯ã®ãã°ãä¿®æ£ïŒãã€ã³ã¿ãŒã¬ã·ãŒããŒïŒ ïŒ
-func (s Stack) Push(x interface{}) { - s = append(s, x) +func (s *Stack) Push(x interface{}) { + *s = append(*s, x) }
ã«ãŒãå
ã®ãªããžã§ã¯ãã®ã³ããŒãæŽæ°ãã
containous / traefikïŒãã£ã«ã¿ãŒãããã¿ã¹ã¯ãã¹ã©ã€ã¹ã«å«ãŸããã¢ããªã«å²ãåœãŠãŸã ïŒ
-for _, app := range filteredApps { - app.Tasks = fun.Filter(func(task *marathon.Task) bool { +for i, app := range filteredApps { + filteredApps[i].Tasks = fun.Filter(func(task *marathon.Task) bool { return p.taskFilter(*task, app) }, app.Tasks).([]*marathon.Task)
containous / traefikïŒããã±ãŒãžã»ãŒãã®ããã®ãŠããããã¹ãã远å ïŒ
-for _, routine := range p.routines { +for i := range p.routines { p.waitGroup.Add(1) - routine.stop = make(chan bool, 1) + p.routines[i].stop = make(chan bool, 1) Go(func() { - routine.goroutine(routine.stop) + p.routines[i].goroutine(p.routines[i].stop) p.waitGroup.Done() }) }
ã©ããã³ã°é¢æ°ã®çµæã¯äœ¿çšãããŸããã
gorgonia / gorgoniaïŒGradïŒïŒã®éèŠã§ãªããã°ãä¿®æ£ ïŒ
if !n.isInput() { - errors.Wrapf(err, ...) - // return + err = errors.Wrapf(err, ...) + return nil, err }
makeã®èª€ã£ãåäœ
è¥ãããªããºãã¯ãã make([]T, count)
ãã«ç¶ããŠã«ãŒãå
ã«append
ããããŸãã ããã§ã®æ£ãããªãã·ã§ã³ã¯ã make([]T, 0, count)
ãã§ãã
HouzuoGuo / tiedotïŒã³ã¬ã¯ã·ã§ã³ã¹ãã£ã³ã®ãã°ãä¿®æ£ ïŒ
-ids := make([]uint64, benchSize) +ids := make([]uint64, 0)
äžèšã®ä¿®æ£ã¯å
ã®ãšã©ãŒãä¿®æ£ããŸãããæ¬¡ã®ããããã®ã³ãããã§ä¿®æ£ããã1ã€ã®æ¬ é¥ããããŸãã
-ids := make([]uint64, 0) +ids := make([]uint64, 0, benchSize)
ãã ãã copy
ãScanSlice
ãªã©ã®äžéšã®æäœã§ã¯ããæ£ãããé·ããå¿
èŠã«ãªãå ŽåããããŸãã
go-xorm / xormïŒSumsIntã空ã®ã¹ã©ã€ã¹ãè¿ããã°ã®ä¿®æ£ ïŒ
-var res = make([]int64, 0, len(columnNames)) +var res = make([]int64, len(columnNames), len(columnNames)) if session.IsAutoCommit { err = session.DB().QueryRow(sqlStr, args...).ScanSlice(&res) } else {
ããã«go-criticã¯ãã®ã¯ã©ã¹ã®ãšã©ãŒãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã
ãã®ä»ã®ãšã©ãŒ
åæã¯ããªãé¢åã§ããããšã倿ããæ®ãã¯ãã¿ãã¬ã®äžã«æã¡åºããŸãã ãã®éšåã¯ãªãã·ã§ã³ã§ãããããåŸã§äœ¿çšããã倧èã«å
ã«é²ãããšãã§ããŸãã
ãã£ã𿬲ããïŒ
次ã®ãã©ã°ã¡ã³ãã¯ããšã©ãŒãä¿®æ£ãããšããäºå®ã«ãããããããå埩å¯èœãªããŒã®ååãå埩å¯èœãªå€ã«äœ¿çšãããã®ãšåãååã«ãªã£ãŠãããšããç¹ã§è峿·±ããã®ã§ãã æ°ããã³ãŒãã¯æ£ããèŠãããæ¬¡ã®ããã°ã©ããæ··ä¹±ãããå¯èœæ§ããããŸãã
gonum / gonumïŒãµãã»ãã颿°ã®ãã°ãä¿®æ£ ïŒ
-for _, el := range *s1 { +for el := range *s1 { if _, ok := (*s2)[el]; !ok { return false }
ååä»ãã®çµæã¯ã»ãšãã©åãéåžžã®å€æ°ãªã®ã§ãåãã«ãŒã«ã«åŸã£ãŠåæåãããŸãã ãã€ã³ã¿ãŒã®å€ã¯nil
ãªããŸãããã®ãªããžã§ã¯ãã䜿çšããå Žåã¯ããã®ãã€ã³ã¿ãŒãæç€ºçã«åæåããå¿
èŠããããŸãïŒããšãã°ã new
ïŒã
dgraph-io / dgraphïŒserver / main.goã®nilãã€ã³ã¿ãŒåç
§ãã°ãä¿®æ£ ïŒ
func (s *server) Query(ctx context.Context, - req *graph.Request) (resp *graph.Response, err error) { + req *graph.Request) (*graph.Response, error) { + resp := new(graph.Response)
ãšã©ãŒãåŠçããéã«æãé »ç¹ã«ããããŠã»ãšãã©ã®ã·ã£ããŠã€ã³ã°ãã€ãã
btcsuite / btcdïŒãããã¯ãã§ãŒã³/ã€ã³ãã¯ãµãŒïŒã€ã³ãã¯ãµãŒåç·šæã®ãã°ãä¿®æ£ ïŒ
-block, err := btcutil.NewBlockFromBytes(blockBytes) +block, err = btcutil.NewBlockFromBytes(blockBytes) if err != nil { return err }
go-xorm / xormïŒæ¿å
¥ãšã©ãŒã®ãã°ãä¿®æ£ ïŒ
-err = session.Rollback() +err1 := session.Rollback() +if err1 == nil { + return lastId, err +} +err = err1
gin-gonic / ginïŒRun *颿°ã§ã®debugPrintã®æ¹è¡ã®åé¡ãä¿®æ£ ïŒ
-debugPrint("Listening and serving HTTP on %s", addr) +debugPrint("Listening and serving HTTP on %s\n", addr)
以äžã®äŸã®ãã¥ãŒããã¯ã¹ã®å®è£
ã¯ãæ§é ã®ã¡ã³ããŒãšããŠ*sync.Mutex
ã®äœ¿çšãå ±åãããã§ãã¯ãæžããšããã¢ã€ãã¢ã«*sync.Mutex
ãŸããã Dave Cheneyã¯ã åžžã«mutexå€ãžã®ãã€ã³ã¿ã§ã¯ãªãã mutexå€ã䜿çšããããšããå§ãããŸãã
tealeg / xlsxïŒã¹ãã¬ããã·ãŒãã®ããŒãæã®ãã°ãä¿®æ£ ïŒ
styleCache map[int]*Style `-` + lock *sync.RWMutex }
çãããã³ãŒãã«å¯Ÿããååè»
badCond
badCond
ãã§ãã¯ã¯ãæœåšçã«äžæ£ãªè«çåŒãæ€åºããŸãã
çãããè«çåŒã®äŸïŒ
- çµæã¯åžžã«
true
ãŸãã¯false
- ãã®è¡šçŸã¯ã誀ãã®ãããã®ãšäºå®äžåºå¥ã§ããªã圢åŒã§æžãããŠããŸã
ãã®ãã§ãã¯ã¯ãã x == nil && x == y
ãã®ãããªæäœã§ãæ©èœããŸãã 1ã€ã®ç°¡åãªè§£æ±ºçã¯ãã x == nil && y == nil
ãã«æžãæããããšã§ãã ã³ãŒãã®å¯èªæ§ã¯äœäžããŸãããããªã³ã¿ãŒã¯ãã®ã³ãŒãã§çããããã®ãèŠãããšã¯ãããŸããã
badCond
ã§çºèŠã§ãããã°ä¿®æ£ã®äŸã次ã«ç€ºãbadCond
ã
-if err1 := f(); err != nil && err == nil { +if err1 := f(); err1 != nil && err == nil { err = err1 }
ãããã£ãŒïŒ
weakCond
weakCond
ã¯weakCond
ãšäŒŒãŠããŸãããã¢ã©ãŒãã®ä¿¡é Œã¬ãã«ã¯ãããã«äœããªããŸãã
åŒ±ãæ¡ä»¶ã¯ãå
¥åããŒã¿ãå®å
šã«ã¯ã«ããŒããªãæ¡ä»¶ã§ãã
匱ãïŒäžååãªïŒç¶æ
ã®è¯ãäŸã¯ãã¹ã©ã€ã¹ã®nil
ããã§ãã¯ããæåã®èŠçŽ ã䜿çšããããšã§ãã ããã§ã¯ãæ¡ä»¶ã s != nil
ãã§ã¯äžååã§ãã æ£ããæ¡ä»¶ã¯ãã len(s) != 0
ããŸãã¯åçã®ãã®ã§ãã
func addRequiredHeadersToRedirectedRequests( req *http.Request, via []*http.Request) error { - if via != nil && via[0] != nil { + if len(via) != 0 && via[0] != nil {
ãããã£ãŒïŒ
dupArg
äžéšã®é¢æ°ã§ã¯ãåãå€ïŒãŸãã¯å€æ°ïŒãè€æ°ã®åŒæ°ãšããŠæž¡ãããšã¯ããŸãæå³ããããŸããã å€ãã®å Žåãããã¯ã³ããŒ/貌ãä»ããšã©ãŒãéç¥ããŸãã
ãã®ãããªé¢æ°ã®äŸã¯copy
ã§ãã åŒã®copy(xs, xs)
ã¯æå³ããããŸããã
-if !bytes.Equal(i2.Value, i2.Value) { +if !bytes.Equal(i1.Value, i2.Value) { return fmt.Errorf("tries differ at key %x", i1.Key) }
ãããã£ãŒïŒ
dupCase
Goã§ã¯ã switch
å
ã§éè€ããcase
å€ã䜿çšã§ããªãããšããåç¥ã§ãããã
以äžã®äŸã¯ã³ã³ãã€ã«ããŸãã ïŒ
switch x := 0; x { case 1: fmt.Println("first") case 1: fmt.Println("second") }
ã³ã³ãã€ã«ãšã©ãŒïŒã¹ã€ããã§ã±ãŒã¹1ãéè€ããŠããŸãã
ãããããã£ãšè峿·±ãäŸãåãäžãããšã©ããªããŸããã
one := 1 switch x := 1; x { case one: fmt.Println("first") case one: fmt.Println("second") }
倿°ãéããŠéè€ããå€ãèš±å¯ãããŸãã ããã«ã switch true
ããšã©ãŒã®äœå°ãããã«åºãããŸãã
switch x := 0; true { case x == 1: fmt.Println("first") case x == 1: fmt.Println("second") }
ãããŠãå®éã®ãšã©ãŒãä¿®æ£ããäŸã次ã«ç€ºããŸãã
switch { case m < n: // Upper triangular matrix. // . case m == n: // Diagonal matrix. // . -case m < n: // Lower triangular matrix. +case m > n: // Lower triangular matrix. // . }
ãããã£ãŒïŒ
dupBranchBody
if/else
ãswitch
ãªã©ã®æ¡ä»¶ã¹ããŒãã¡ã³ãã«ã¯ãå®è¡ããããã£ããããŸãã æ¡ä»¶ãæºãããããšãå¶åŸ¡ã¯é¢é£ããæäœåäœã«è»¢éãããŸãã ä»ã®èšºæã§ã¯ãããã®ãããã¯ã®æ¡ä»¶ãç°ãªãããšã確èªããŸããã dupBranchBody
ã¯å®è¡å¯èœãããã¯èªäœãå®å
šã«åäžã§ã¯ãªãããšã確èªããŸãã
æ¡ä»¶ã¹ããŒãã¡ã³ãå
ã®éè€ããã£ã®ååšã¯ã type switch
ã§ãªãéããå°ãªããšãçãããã§ãã
-if s, err := r.ReceivePack(context.Background(), req); err != nil { - return s, err -} else { - return s, err -} +return r.ReceivePack(context.Background(), req)
以äžã®ã³ãŒãã®æ£ç¢ºãã®çšåºŠã«é¢ãã倿ã¯èªè
ã«ä»»ãããŠããŸãã
if field.IsMessage() || p.IsGroup(field) {
ã if field.IsString()
ãå
ã®ããã£ãšé¢é£ããã else
ãã¯åäžã§ãã
ãããã£ãŒïŒ
caseOrder
type switch
å
ã®ãã¹ãŠã®ã¿ã€ãtype switch
ãæåã®äºææ§ã®ãããã®ã«é çªã«ãœãŒããããŸãã ã¿ã°å€ã®ã¿ã€ãã*T
ã§ã I
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããcase *T
ãã case I
ãã®ã©ãã«ã®åã« ã case *T
ãã®ã©ãã«ãä»ããå¿
èŠããããŸããããã§ãªãcase I
ã *T
I
*T
äºææ§ãããããããã®éã§ã¯ãããŸããïŒã
case string: res = append(res, NewTargetExpr(v).toExpr().(*expr)) -case Expr: - res = append(res, v.toExpr().(*expr)) case *expr: res = append(res, v) +case Expr: + res = append(res, v.toExpr().(*expr))
ãããã£ãŒïŒ
offBy1
ãŠãããããšã®ãšã©ãŒã¯éåžžã«äººæ°ããããããç¬èªã®ãŠã£ãããã£ã¢ããŒãžããããŸã ã
if len(optArgs) > 1 { return nil, ErrTooManyOptArgs } -node = optArgs[1] +node = optArgs[0]
-last := xs[len(xs)] +last := xs[len(xs) - 1]
go-critic
ã¯ããã®ãããªãšã©ãŒãèŠã€ããããã®éžæè¢ãéãããŠããŸããããããŸã§ã®ãšãããå
¬éãªããžããªã«ä¿®æ£ã¯éä¿¡ãããŠããŸããã ã¹ããŒãªãŒã®è¡šç€ºäžã«èŠã€ãã£ãä¿®æ£ã次ã«ç€ºããŸãã
æåŸã«å°ãã®ææ
go vet
ã¯ãã x != a || x != b
ããªã©ã®åŒã®é©åãªãã§ãã¯ããããŸãã 人ã
ã¯gometalinter
ç¥ããªãããã«èŠãããããããŸãããã go vet
ã¯ã»ãŒå
šå¡ãå®è¡ããŸãããïŒ
gogrepãŠãŒãã£ãªãã£ã䜿çšããŠãããã€ãã®ãããžã§ã¯ãã®ãã¹ã¿ãŒãã©ã³ãã«ãŸã ããé¡äŒŒããåŒã®å°ããªãªã¹ãããŸãšããŸããã
忢ãªç«ã®ããã«
ãã®ãªã¹ããæ€èšãããã«ãªã¯ãšã¹ããéä¿¡ããããšãææ¡ããŸãã
cloud.google.com/go/trace/trace_test.go:943:7: expectTraceOption != ((o2&1) != 0) || expectTraceOption != ((o3&1) != 0) github.com/Shopify/sarama/mocks/sync_producer_test.go:36:5: offset != 1 || offset != msg.Offset github.com/Shopify/sarama/mocks/sync_producer_test.go:44:5: offset != 2 || offset != msg.Offset github.com/docker/libnetwork/api/api_test.go:376:5: id1 != i2e(i2).ID || id1 != i2e(i3).ID github.com/docker/libnetwork/api/api_test.go:408:5: "sh" != epList[0].Network || "sh" != epList[1].Network github.com/docker/libnetwork/api/api_test.go:1196:5: ep0.ID() != ep1.ID() || ep0.ID() != ep2.ID() github.com/docker/libnetwork/api/api_test.go:1467:5: ep0.ID() != ep1.ID() || ep0.ID() != ep2.ID() github.com/docker/libnetwork/ipam/allocator_test.go:1261:5: len(indices) != len(allocated) || len(indices) != num github.com/esimov/caire/grayscale_test.go:27:7: r != g || r != b github.com/gogo/protobuf/test/bug_test.go:99:5: protoSize != mSize || protoSize != lenData github.com/gogo/protobuf/test/combos/both/bug_test.go:99:5: protoSize != mSize || protoSize != lenData github.com/gogo/protobuf/test/combos/marshaler/bug_test.go:99:5: protoSize != mSize || protoSize != lenData github.com/gogo/protobuf/test/combos/unmarshaler/bug_test.go:99:5: protoSize != mSize || protoSize != lenData github.com/gonum/floats/floats.go:65:5: len(dst) != len(s) || len(dst) != len(y) github.com/gonum/lapack/testlapack/dhseqr.go:139:7: wr[i] != h.Data[i*h.Stride+i] || wr[i] != h.Data[(i+1)*h.Stride+i+1] github.com/gonum/stat/stat.go:1053:5: len(x) != len(labels) || len(x) != len(weights) github.com/hashicorp/go-sockaddr/ipv4addr_test.go:659:27: sockaddr.IPPort(p) != test.z16_portInt || sockaddr.IPPort(p) != test.z16_portInt github.com/hashicorp/go-sockaddr/ipv6addr_test.go:430:27: sockaddr.IPPort(p) != test.z16_portInt || sockaddr.IPPort(p) != test.z16_portInt github.com/nats-io/gnatsd/server/monitor_test.go:1863:6: v.ID != c.ID || v.ID != r.ID github.com/nbutton23/zxcvbn-go/adjacency/adjcmartix.go:85:7: char != "" || char != " " github.com/openshift/origin/pkg/oc/cli/admin/migrate/migrator_test.go:85:7: expectedInfos != writes || expectedInfos != saves github.com/openshift/origin/test/integration/project_request_test.go:120:62: added != deleted || added != 1 github.com/openshift/origin/test/integration/project_request_test.go:126:64: added != deleted || added != 4 github.com/openshift/origin/test/integration/project_request_test.go:132:62: added != deleted || added != 1 gonum.org/v1/gonum/floats/floats.go:60:5: len(dst) != len(s) || len(dst) != len(y) gonum.org/v1/gonum/lapack/testlapack/dhseqr.go:139:7: wr[i] != h.Data[i*h.Stride+i] || wr[i] != h.Data[(i+1)*h.Stride+i+1] gonum.org/v1/gonum/stat/stat.go:1146:5: len(x) != len(labels) || len(x) != len(weights)
ä»äººã®éã¡ããåŠã¶

ããããæåŸã®éšåã§ãæ©æ¢°åŠç¿ã«ã€ããŠã¯äœããããŸããã
ããããããã§æžãããŠããã®ã¯golangci-lintã«é¢ãããã®ã§ãææ°ãªãªãŒã¹ã®1ã€ã«go-criticãçµ±åãããŠããŸãã golangci-lint
ã¯golangci-lint
ã®é¡äŒŒç©ã§ããããšãã°ã ãGoã®éçåæïŒã³ãŒãããã§ãã¯ãããšãã®æéãç¯çŽããæ¹æ³ããšããèšäºã§ããã®å©ç¹ã«ã€ããŠèªãããšãã§ããŸã ã
go-critic
ã¯ãæè¿lintpackã䜿çšããŠæžãçŽãããŸãã ã 詳现ã«ã€ããŠã¯ã Go lintpackïŒa composable linter managerãåç
§ããŠãã ãã ã
ãŸã ããŒã«ãç©æ¥µçã«äœ¿çšããŠãããã°ã©ã ã®æœåšçãªãšã©ãŒãæäœçããã³è«ççã«åæãå§ããŠããªãå Žåã¯ã仿¥ãååãšãè¶ã飲ã¿ãªããããªãã®è¡åã«ã€ããŠããäžåºŠèããããšããå§ãããŸãã ããªãã¯æåããŸãã
ãã¹ãŠã«è¯ãã