ïŒããã«é¢ããæ¢åã®åé¡ãèŠã€ãããªãã£ãã®ã§ããããéè€ããŠããŠèŠéããå Žåã¯éããŠãã ãããïŒ
ç§ã¯è£žã®ãªã¿ãŒã³ãåãé€ãããšãææ¡ããŸãã ååä»ãã®æ»ãå€ã¯çŽ æŽãããã§ããããããä¿æããŠãã ããã ãã¢ãªã¿ãŒã³ã¯äŸ¡å€ããããããåä»ã§ããããããæé€ããŸãã
ããã€ãã®çç±ã§ãç§ã¯ãã®å€æŽã«å察ããŸãã
1ïŒããã¯æ¯èŒçéèŠãªæ§æäžã®å€æŽã§ãã ããã¯éçºè ãšã®æ··ä¹±ãåŒãèµ·ãããPythonãçµéšããã®ãšåãæ··ä¹±ã«Goãå°ãããšã«è²¢ç®ããå¯èœæ§ããããŸãã
2ïŒåœ¹ã«ç«ããªããšæããŸããããªã圌ãã¯äŸ¡å€ããããããåä»ãªã®ã§ããïŒ ããããšããã«ããreturn nil
ã¯å°ãåé·ã§ãããïŒ
@awnumar for 2ããã¯ïŒ21182ãšããŸããã¢ã«ãªããŸã
ããããšããã«ãããªã¿ãŒã³ãã«ã¯å°ãåé·ã§ãããã
ã·ã³ãã«ãã¯åé·æ§ãæã¡è² ãããŸãã return nil
ã®æã¯ãå€æ°ã®ææ°ã®å€ã远跡ãããããïŒæå³çã«ãŸãã¯ã«ãã£ãŠïŒã·ã£ããŠãããŠããªãããšã確èªããå¿
èŠãããreturn
æãããã¯ããã«ç解ããããã§ããééããïŒ
ãã€ããããªã¿ãŒã³ã䜿çšãããšãä»ã®æ¹æ³ã§ã¯éæã§ããªã1ã€ã®ããšãå®è¡ã§ããããšã«æ³šæããŠãã ãããããã¯ãdeferã§æ»ãå€ãå€æŽããããšã§ãã ã³ãŒãã¬ãã¥ãŒã³ã¡ã³ããŠã£ããåŒçš
æåŸã«ãå Žåã«ãã£ãŠã¯ãé 延ã¯ããŒãžã£ã§å€æŽããããã«çµæãã©ã¡ãŒã¿ã«ååãä»ããå¿ èŠããããŸãã ããã¯ãã€ã§ã倧äžå€«ã§ãã
ãã€ããããªã¿ãŒã³ãæé€ããããã®å®å šãªææ¡ã§ã¯ã代ããã«ãã®ãããªäœ¿çšæ³ãã©ã®ããã«æžãã¹ããããããŠãªã代æ¿åœ¢åŒãæãŸããïŒãŸãã¯å°ãªããšãåãå ¥ããããïŒã®ãã説æããå¿ èŠããããŸãã æãããªæžãçŽãã¯ãå€ãã®å®åæãšç¹°ãè¿ãã䌎ãåŸåããããéåžžã¯ãšã©ãŒåŠçã䌎ããŸãããã¡ã«ããºã ã¯äžè¬çã§ãã
ç§ã¯ããã¯ãªããšæããŸã
func oops() (string, *int, string, error) {
...
return "", nil, "", &SomeError{err}
}
ããèªã¿ããã
func oops() (rs1 string, ri *int, rs2 string, e error) {
...
e = &SomeError{err}
return
}
ããããã
OTOH-ã¯ããã·ã£ããŠã€ã³ã°ã¯ææªã§ãã ãããå®å šã«éåæ³åããããšã¯æå³ããããŸããïŒçæãããã³ãŒããæãæµ®ãã³ãŸãïŒããå°ãªããšãæ»ãå€ã®ååã®ã·ã£ããŠã€ã³ã°ã®çŠæ¢ã«åãã§æ祚ããŸãã ããããããŠã³ã³ãã€ã©ã«ä»ã®ãã¹ãŠã®å Žåã«ããã€ãã®èšºæãçæãããã®ãããã§ããã:)
ç·šéïŒã©ãããããã«ã€ããŠè©±ããŠããïŒ377ããããŸã
@josharianç§ã¯ãæ®ã眮ãé¢æ°ããŸã æ»ãå€æ°ãå€æŽã§ãããšæã£ãŠããŸããã ãã®ã»ãã³ãã£ã¯ã¹ã¯ãreturnã¹ããŒãã¡ã³ãã®æ§æãšã»ãŒçŽäº€ããŠããããã«èŠããŸãã
@joshariané 延é¢æ°ã§ããããå€æŽã§ããããã«ããã«ã¯ãååä»ãã®æ»ããã©ã¡ãŒã¿ãŒãå¿ èŠã§ãã ãã®ããã«ãã€ããããªã¿ãŒã³ã䜿çšããå¿ èŠã¯ãããŸããã æ瀺çãªå€ãæå®ããŠè¿ããšãé 延é¢æ°ãå®è¡ãããåã«ãå€ãååä»ãã®æ»ãå€ã«ã³ããŒãããŸãã
@bcmills @dominikhãããã°ãããç§ã 粟ç¥ç倱å¹; ç§ããŸã£ããã«ããŠãããŠããããšãã
æ»ãå€ã®ãªãé¢æ°ã¯ã return
ããããåºããã«ããããšãã§ããã¯ãã§ãïŒ
func noReturn() {
if !someCondition() {
return // bail out
}
// Happy path
}
ç§ã¯1.5åãããŠGoæšæºã©ã€ãã©ãªïŒ 4幎åã®/ cc @bradfitzïŒã«ãã次ã®Goã³ãŒããèŠãŠãæªããã°ãããã®ã§ã¯ãªãããšä¿¡ããŠããŸããã§ããã
å ·äœçã«ã¯ããã®éšåïŒ
tc, err := ln.AcceptTCP()
if err != nil {
return
}
äžèŠãããšãããæåã®è¡ã§ãæ°ããå€æ°tc
ãšerr
ããååä»ãã®err error
returnãšã¯ç°ãªãçãå€æ°å®£èšæ§æã䜿çšããŠå®£èšãããŠããããã«èŠããŸãããå€æ°ã ãã®åŸãããã¯è£žã®ãªã¿ãŒã³ãå¹æçã«æ»ã£ãããã«ç§ã«ã¯èŠããnil, nil
ã§ã¯ãªããããnil, err
ãããããŠããã¯ãã§ããšã
ããã«ã€ããŠéåžžã«ç±å¿ã«èããçŽ90ç§åŸãç§ã¯ãããå®éã«æ£ããã³ãŒãã§ããããšã«æ°ã¥ããŸããã ååä»ãerr error
æ»ãå€ã¯é¢æ°æ¬äœãšåããããã¯ã«ãããããçãå€æ°å®£èštc, err := ...
ã¯ã tc
ãæ°ããå€æ°ãšããŠå®£èšããã ãã§ãæ°ããerr
宣èšããŸããã err error
æ»ãå€æ°ã¯ln.AcceptTCP()
ã®åŒã³åºãã«ãã£ãŠèšå®ãããŠããããã裞ã®return
å®éã«ã¯nil以å€ã®ãšã©ãŒãè¿ããŸããããã»ããããã
ïŒæ°ãããããã¯ã«ããå Žåãå®éã«ã¯ããšã©ãŒã¯ãªã¿ãŒã³äžã«ã·ã£ããŠãããŸãããšããã³ã³ãã€ã«ãšã©ãŒã«ãªããŸãããã ãããïŒ
ããã¯ãã£ãšæ確ã§èªã¿ãããã³ãŒãã ã£ããšæããŸãã
tc, err := ln.AcceptTCP()
if err != nil {
return nil, err
}
ãã®è©±ãå ±æãããã£ãã®ã¯ãããã°ã©ããŒã®æéãç¡é§ã«ãããã¢ãªã¿ãŒã³ã®è¯ãäŸã ãšæãããã§ãã ç§ã®æèŠã§ã¯ããã¢ãªã¿ãŒã³ã¯ãããã«èšè¿°ããããã§ããïŒæ°åã®ããŒã¹ãããŒã¯ãç¯çŽããã ãã§ãïŒããã«ãªã¿ãŒã³ã䜿çšããåçã®ã³ãŒãïŒãã¢ä»¥å€ïŒãšæ¯èŒããŠãã³ãŒããèªã¿ã«ãããªãããšããããããŸãã Goã¯éåžžãèªã¿åããæé©åããæ£ããããšãè¡ããŸããããã¯ãæžã蟌ã¿ãããã¯ããã«é »ç¹ã«ïŒããå€ãã®äººãïŒè¡ãããã§ãã ãã¢ãªã¿ãŒã³æ©èœã¯èªã¿ããããäœäžããåŸåãããããã«æããããããGo2ã§åé€ãããšèšèªãæ¹åãããå ŽåããããŸãã
å 責äºé ïŒç§ãæãé »ç¹ã«æžãããèªãã ãããGoã³ãŒãã§ã¯ãïŒèªã¿ã«ãããšæãã®ã§ïŒãã¢ãªã¿ãŒã³ãé¿ããåŸåããããŸãã ããããããã¯ç§ããã¢ãªã¿ãŒã³ãèªãã ãç解ãããããçµéšãå°ãªãããšãæå³ããããã¯ããããèªãã ã解æãããããç§ã®èœåã«æªåœ±é¿ãäžãããããããŸããã ããã¯ã¡ãã£ãšãããã£ãã22ã§ãã
@shurcooL ãç§ãtc
ãšc
ããããšããäºå®c
ãããã¯ãã§ãtc
ã ãã®ã³ãŒããäœãããã®ããç解ããã®ã«ã»ãŒåãæéãããããŸããã
ããã¯ããããé¢é£ããŠããŸãïŒ
https://blog.minio.io/golang-internals-part-2-nice-benefits-of-named-return-values-1e95305c8687
ãããŠé¢é£ããè°è«ïŒ
èšäºããïŒ
GolangãæäŸãããã€ããããªã¿ãŒã³ãæ°ã«å ¥ããªãããŸãã¯å¥œãŸãªãå Žåã¯ã次ã®ããã«åãã¡ãªããã享åããªãã
return oi
ã䜿çšã§ããŸãã
ååä»ãã®æ»ãå€ã¯çŽ æŽãããã§ãïŒ ååä»ãæ»ãå€ã®ãã¢ãªã¿ãŒã³ãåé¡ã§ãã :-)
@awnumar ãããã¯é¢ä¿ãããŸããã Hacker Newsã«é¢ããç§ã®ã³ã¡ã³ããåç §ããŠãã ããïŒ https ïŒ
ããããåé€ããããšã¯ãæ瀺çãªãšã©ãŒåŠçã®ã¢ãããŒãã«åŸããšæããŸãã ç§ã¯ãããã䜿çšããŸããã
ãã¢ãªã¿ãŒã³ã®ããgolang-nutsã«ã€ããŠã¬ãã¥ãŒããã³ãŒãã¯ç解ããã®ãé£ããããšã§ã¯ãããŸããããå€æ°ã¹ã³ãŒãã®è§£æã¯èªè ã«ãšã£ãŠäžå¿ èŠãªè¿œå ã®äœæ¥ã§ãã
ç¹ã«é¢æ°ã«è€æ°ã®ãªã¿ãŒã³ãããå Žåãç§ã¯ãã¢ãªã¿ãŒã³ã倧奜ãã§ãã ã³ãŒããããã¯ãªãŒã³ã«ããã ãã§ãã æ倧ã®çç±ã¯ãgoã§äœæ¥ããããšãéžæããããšã§ãã
Go tool vet shadowã¯ãæœåšçãªã·ã£ããŠå€æ°ãæ€åºã§ããŸãã ãã¡ã³ã¯ã®åŸªç°çè€é床ãäœãå Žåãããã³ããã€ãã®ãã¹ãã±ãŒã¹ã ãã©ãã«ã«ãªããšã¯æããŸããã§ããã ç§ã¯ééã£ãŠããå¯èœæ§ããããŸãããããåºãã®ãªã¿ãŒã³ãããã«æªããã瀺ãããã«ããã€ãã®äŸãèŠãããšæããŸãã
ããåºãã®ãªã¿ãŒã³ãããã«æªããã瀺ãããã€ãã®äŸãèŠãããšæããŸãã
@kelwangäžèšã®7ã€ã®ã³ã¡ã³ãããln.AcceptTCP()
ã«ã€ããŠã®ç§ã®äŸãèŠãŸãããïŒ
ããã«ã¡ã¯ã @ shurcooL ãthx
ãããããªãã¯çŽ æŽããããã€ã³ããäœã£ããšæããŸãã
ããããããªããèšã£ãããã«ãããã¯4幎ã«ãªããŸãã ãã§ã«æ
£ããŠããã®ã§ã¯ãªãããšæããŸãã
ããåºãã®è¿åã®åé¡ã§ã¯ãªããšæããŸãã ããããè€æ°ã®å€æ°ã®åæåã§æ··ä¹±ãçããŸãã
ç§ã«ãšã£ãŠãã·ã£ããŠç£å»ããŒã«ã¯éåžžéåžžã«ããŸãæ©èœããŸãã ç§ã¯ããã«ã€ããŠæ¬åœã«å¿é
ããããšã¯ãããŸããã
ãã¶ãããã®ãããªæ··ä¹±ãé¿ããããã«ãgolinterã§ãã±ãããèšå
¥ããå¿
èŠããããŸãã ãšã©ãŒã®ååãå€æŽããããæåã«tcãäžã«å®£èšãããã ãªã³ã¿ãŒã®ææ¡ã§ååã ãšæããŸãã
@kelwangç§ã®æèŠã§ã¯ãé¢æ°ãreturnã¹ããŒãã¡ã³ããéããªããã€ã³ãã«è€æ°ã®ãªã¿ãŒã³ãããå Žåãæ§é äœ/æ§é äœãžã®ãã€ã³ã¿ãŒã¯ããã¢ãªã¿ãŒã³ã§ã¯ãªãè¿ãããå¿ èŠããããŸãã
ïŒ377ãèšåãããŠããã®ã§ã ln.AcceptTCP
äŸã§ã®æ··ä¹±ã®åå ã¯ããã¢ãªã¿ãŒã³èªäœã§ã¯ãªãã :=
èåŸã«ããéæ³ã«é¢ãããã®ã§ãããšäž»åŒµããŸãã
ln.AcceptTCP
å Žåã¯ãããæ瀺çãªåœ¢åŒã®çã宣èšïŒåç
§ãããŠããåé¡ã§
func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) {
:tc, err = ln.AcceptTCP()
if err != nil {
return
}
// ...
}
å€å€æ°:=
ãèŠãã ãã§ã¯ãã©ã®å€æ°ã宣èšãããŠãããããããŸããããããç¥ãã«ã¯ããããã¯ã®åã®éšåããã¹ãŠèæ
®ããå¿
èŠããããŸãã
ãããã¯å¢çãã©ãã«ãããã«ã€ããŠã®èŠèœãšãããããŠããªãã¯èŠã€ãã«ãããã°ã«çµãããããããŸããã
ãŸããå€å€æ°:=
ãä¿®æ£ããŠãå¿
èŠãªãã®ãæ£ç¢ºã«å®£èšããããšã¯ã§ããŸããã çã宣èšããããããããã³ãŒããåç·šæããå¿
èŠããããŸãã
ããã®ç¹å®ã®çµæã«å¯ŸåŠããããšããå€ãã®ææ¡ãèŠãŠããŸããããåé¡ã®æ ¹æ¬ã¯:=
ã®æ瀺æ§ã®æ¬ åŠã«ãããšæããŸãïŒã·ã£ããŠã€ã³ã°ãèœãšãç©ŽãšèŠãªããããšãã¯ãã€ã§ããããã¯å®éã«ã¯å€å€æ°:=
ã®ããã§ãïŒã
ãã¢ãªã¿ãŒã³ãå¿ ããã䟡å€ããããšèšã£ãŠããã®ã§ã¯ãªããç§ãã¡ãèŠãŠããã®ã¯è€åçãªåé¡ã ãšèšã£ãŠããã ãã§ãã
èªã¿ãããã®è°è«ã«é¢ä¿ãªãããã¢ãªã¿ãŒã³ã¯è«ççã«äžè²«æ§ããªããšã¬ã¬ã³ãã§ã¯ãªããšæããŸãã ããã¯ã©ããããããäžå®å®ãªèŠæ¹ã§ãã ãã ããããã§äž»èŠ³çãªã®ã¯æããã«ç§ã ãã§ã¯ãããŸããã
@tandrå°ããªæ§é äœãªããžã§ã¯ããè¿ãããšã¯ã3ã€ä»¥äžã®æ»ãå€ãæã€ãããã¯ããã«æ確ã ãšæããŸãã
ïŒ19642ãæ¯æããŠïŒ21182ã§è°è«ããæŸæ£ãããããçŽç²ã«è£žã®ãªã¿ãŒã³ã®ä»£æ¿ïŒ
func f() (e error) {
return ... // ellipsis trigram
}
Go2ã§åé€ããããšã«è³æã§ããã gofmt
ä»ããŠGo1ã§ïŒåºæ¬çã«ïŒåé€ããããã«ïŒ28160ãäœæããŸããã 人ã
ã®ã³ã¡ã³ããããã ããã°å¹žãã§ãïŒ ð
DBã¬ã€ã€ãŒã§ã¯ããã€ããããªã¿ãŒã³ãé©ãã»ã©åœ¹ç«ã€ããšãããããŸããã
ããã¯å®éã«ç·šéããã補åã³ãŒãã§ã-
func (p *PostgresStore) GetSt() (st St, err error) {
var tx *sql.Tx
var rows *sql.Rows
tx, err = p.handle.Begin()
if err != nil {
return
}
defer func() {
if err != nil {
tx.Rollback()
} else {
tx.Commit()
}
rows.Close()
}()
rows, err = tx.Query(`...`)
if err != nil {
return
}
// handle rows
for rows.Next() {
var all Call
err = rows.Scan(&all.Email, &all.Count)
if err != nil {
return
}
st.Today = append(st.Today, &all)
}
rows.Close()
rows, err = tx.Query(`...`)
if err != nil {
return
}
// handle rows
for rows.Next() {
var all Call
err = rows.Scan(&all.Email, &all.Count)
if err != nil {
return
}
st.Books = append(st.Books, &all)
}
return
}
ããã«ã¯6ã€ã®returnã¹ããŒãã¡ã³ãããããŸãã ïŒå®éã«ã¯ããã«2ã€ãããŸãããç°¡æœã«ããããã«ã³ãŒããçãããŸããïŒã ããããç§ã®ãã€ã³ãã¯ããšã©ãŒãçºçããå ŽåãåŒã³åºãå
ã¯err
å€æ°ã®ã¿ãæ€æ»ãããšããããšã§ãã return err
ãæžã蟌ãå¿
èŠãããå Žåã§ãåé¡ã¯ãããŸããããæ»ã眲åãšäžèŽãããã«ã¯ã return st, err
ãäœåºŠãæžã蟌ãå¿
èŠããããŸãã ãããŠãè¿ãå€æ°ããã£ãšããå Žåãããã¯çŽç·çã«å¢å ããŸãã ããªãã®returnã¹ããŒãã¡ã³ãã¯ã©ãã©ã倧ãããªã£ãŠããŸãã
äžæ¹ãååä»ãã®return paramsãããå Žåã¯ãreturnãåŒã³åºãã ãã§ããããã¯ãä»ã®å€æ°ãã©ã®ãããªç¶æ ã§ãã£ãŠãè¿ãããããšãç¥ã£ãŠããŸãã ããã¯ç§ã幞ãã«ããããã¯çŽ æŽãããæ©èœã ãšæããŸãã
@agnivadeã¯ããããç·šéããããããã©ããã¯
@agnivade 6ã€ã®ãªã¿ãŒã³ã®ãã¡5ã€ã¯ã次ã®Go2ãšã©ãŒåŠçã¹ããŒã ã®äžã§èžçºããã¯ãã§ã:-)
ãã£ãŒãããã¯ãŠã£ãã®è©³çŽ°ã
@ nhooyr-ãã芪æãªã..ä»æ¥ã¯è£œåããã·ã¥ãããŠããããã§ã..ïŒman_facepalming ïŒïŒ sweat_smileïŒ
@ networkimprov-ãã®éãã§ãã ç§ã¯æ°ãããšã©ãŒåŠçã«ã€ããŠèããŠããŸããã§ããã å人çã«ã¯ããã®æ°ãããšã©ãŒåŠçãéå§ããããšãã¯åé¡ãããŸããã ããããããã§ããããã¯ããªã倧ããªå€æŽã§ãããå€ãã®ã³ãŒãããŒã¹ãå£ãããšã«ãªããŸãã ééããªããèªåããŒã«ã§ãããä¿®æ£ã§ããŸãã ããããGo 2ã§ã¯ããããã®äž»èŠãªå€æŽãããã€è¡ãå¿ èŠãããã®ã§ããããã
Go2ã«ã¯ãGo1ãšã®äžäœäºææ§ããªããšããã©ã€ã»ã³ã¹ãäžããããŠããŸããã
Go2ã§ã®ãã®å€æŽãšäºææ§ãããããã«ãæ¢åã®Go1ã³ãŒããã¢ããã°ã¬ãŒãããããã®ããŒã«ãäœæã§ããããšã«åæããŸãã
Go2ã«ã¯ãGo1ãšã®äžäœäºææ§ããªããšããã©ã€ã»ã³ã¹ãäžããããŠããŸããã
äžèšã®ã©ã€ã»ã³ã¹ã䜿çšããªãããšã¯ã»ãŒç¢ºå®ã§ãã äžäœäºææ§ãç Žãããšã¯ããšã³ã·ã¹ãã ã«é¢ããŠéåžžã«å°é£ã§ãªã¹ã¯ããããŸãã
é倧ãªå€æŽãçŸåšèšç»ãããŠããªãå Žåããã®ææ¡ã¯äžæãåŒãèµ·ãã䟡å€ããªãããšã«åæããŸãã é倧ãªå€æŽãèšç»ãããŠããå Žåã¯ãææ¡ãæ€èšããŠãã ããã ãã®ææ¡ã«å¯Ÿå¿ããããã«go fix
ãæŽæ°ããã®
Go2ãšã©ãŒåŠçã®ããã®æ°ããããŒã¯ãŒããããŒãã«ã«ãããããã¯ããã€ãã®ã³ãŒããå£ãã§ãããã
Go 2ã®å Žåã䟡å€ããããšãã«ã³ãŒãã解èªã§ããŸãããã³ã¹ããããããŸãã æ°ããããŒã¯ãŒãã®ã³ã¹ãã¯ã蚺æãšä¿®æ£ãç°¡åã§ãããšããç¹ã§ãèšèªæ©èœãåé€ããã³ãŒããããå°ãªããªããŸãã æ°ããããŒã¯ãŒãã®å©ç¹ã¯ãããŒã¯ãŒããšåãèå¥åã䜿çšããã³ãŒãããããã«æžãçŽããªããã°ãªããªãã³ã¹ããè¶ ãããšæ³åããããšãã§ããŸãã
ãã®ã±ãŒã¹ã¯ãæ°ããããŒã¯ãŒããããæžãçŽãã®ãé£ããã§ãããå®è¡å¯èœã§ãã æãéèŠãªè³ªåã¯ã裞ã®ãªã¿ãŒã³ãæžããšãã«ãããäœãæå³ããã®ãã人ã ã誀解ããŠããã®ããšããããšã ãšæããŸãã ãã€ããããªã¿ãŒã³ã®äœ¿çšã«ããããã°ã©ã ã®æ¬åœã®ãã°ã¯ãããŸããïŒ å®éã®ãã°ããªããŠããã³ãŒããæžããŠãããšãã«ããã€ããããªã¿ãŒã³ã誀ã£ãŠäœ¿çšããŠééããç¯ããŠããŸãããïŒ
ãã€ããããªã¿ãŒã³ã®äœ¿çšã«ããããã°ã©ã ã®æ¬åœã®ãã°ã¯ãããŸããïŒ
ãããæ¬çªç°å¢ã®ãã°ãåŒãèµ·ãããã©ããã¯ããããŸããããç§ã«ãšã£ãŠã¯ã裞ã®ãªã¿ãŒã³ãèŠããšãéåžžãäœãèµ·ãã£ãŠããã®ããç解ããããšäžæåæ¢ããŸãã ã·ã£ããŠãããerr
äºæããªãæ¹æ³ã§æ©èœããããšã«åå·çã«ãªããŸããããã¯ãã·ã£ããŠããã
ãšã¯ãããäžäœäºææ§ããããgofmtã«ã¯ãã§ã«ããã€ãã®å°ããªå€æŽãå ããããŠãããããïŒ28160ã®æ¹ãããããããè¯ãä¿®æ£ã ãšæããŸãã
ã·ã£ããŠãšã©ãŒãäºæããªãæ¹æ³ã§æ©èœããŠããããšã«åå·çã«ãªããŸã
ç§ã¯æè¿ãå°ãªããšããã°ãåŒãèµ·ãããšããç¹ã§ã¯ãç§ãæã£ãŠããã»ã©ã·ã£ããŠã€ã³ã°ã«ã€ããŠå¿é
ããå¿
èŠããªãããšreturn
ãçºçããæç¹ã§æ»ãå€æ°ã®ãããããã·ã£ããŠãããŠããå Žåããã¢ãªã¿ãŒã³ã䜿çšããã®ã¯å®éã«ã¯ã³ã³ãã€ã«æãšã©ãŒã§ãã
ãããŠã誰ããäœããèšãåã«ããããç§ã¯ãã®äŸã«ã¯ä»ã«ãããããã®åé¡ãããããšãç¥ã£ãŠããŸãã ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ããã«äœããäžç·ã«æããŠããŸããã
ããŠããã®çš®ã®å€æŽã¯ãã©ã®ããã«ã¢ãããŒãããŠããGo1ã§ã¯æ±ºããŠèµ·ãããŸããã§ããã
ãã¶ãããã¶ããåé¡ã¯:=
ã«ããããããåé€ããææ¡ãå¿
èŠã§ãã
ããã¯ã·ã£ããŠã€ã³ã°ã ãã§ã¯ãããŸããã ããã¯ãèªè ã«å¿ èŠä»¥äžã®æèãæãããããšã§ãã
ããã§ã®ã³ãŒãäŸã®äœ¿çšïŒ https ïŒ
æåã®äŸã§ã¯ãèªè
ã¯err
å€ããã¬ãŒã¹ããã ãã§ãäœãè¿ãããããæ£ç¢ºã«ææ¡ã§ããŸãã
2çªç®ã®äŸã§ã¯ããªãŒããŒã¯3ã€ã®è¿œå å€æ°ã®å€ããã¬ãŒã¹ããå¿ èŠããããŸãã
å¥ã®èšãæ¹ãããã°
if err != nil {
return err
}
...
return err
vs
if err != nil {
return err
}
...
return nil
ïŒå€ãnilã®å€æ°ãè¿ãå Žåãšnilãè¿ãå ŽåïŒ
ã©ã£ã¡ãããïŒ
ç§ã¯åŸè ã®æ¹ã奜ãã§ãããªããªããããã¯æ確ã§äžèŠç解ããããããã§ãã ãã¢ãªã¿ãŒã³ãåé€ãããšãæšå®ããå¿ èŠã®ãããªã¿ãŒã³å€ã奚å±ããã®ã§ã¯ãªããæ瀺çãªãªã¿ãŒã³å€ã奚å±ããŸãã
èªç¥çè² æ
ã®ãã1ã€ã®äŸã¯ããã¢ãªã¿ãŒã³ãèŠããšãvoidé¢æ°ïŒ func(arg T)
ïŒãšévoidé¢æ°ïŒ func(arg T) ret R
ïŒãåºå¥ã§ããªãããšã§ãã é¢æ°ã«æ»ãå€ããªãããè¿ãããååä»ãã®å€ãããå¯èœæ§ããããŸãã æ»ãå€ãå®éã«äœãæå³ããããç¥ãã«ã¯ãé¢æ°ã®ã·ã°ããã£ãèŠããŠããå¿
èŠããããŸãã 確ãã«å€§ããªåé¡ã§ã¯ãããŸããããé ã«å
¥ããŠãããªããã°ãªããªãããšããã1ã€ãããŸãã
ãã¢ãªã¿ãŒã³ã¹ããŒãã¡ã³ãã¯ãå Žåã«ãã£ãŠã¯æ··ä¹±ãæãå¯èœæ§ããããŸãã ãããããããã圹ç«ã€ç¹å®ã®ã±ãŒã¹ããããŸãã ãããŠãã¡ããããããã¯ä»æ¥æ©èœããŸããããã¯ãããããç¶æããããã®åŒ·åãªè°è«ã§ãã
ããã§ã®æåã®è§£æ±ºçã¯ãèšèªã§ãã¢ãªã¿ãŒã³ãç¶æããå¯èœæ§ããããŸãããã·ã£ããŠã€ã³ã°ãçºçããè€éãªã±ãŒã¹ã§ãããã䜿çšããããšãèŠåãããªã³ããã§ãã¯ãè¿œå ããããšãæ€èšããŠãã ããã
ããã¯ãGoã³ãŒãããŒã¹ãèªã¿å§ãããšãã®ç§ã®æ£ç¢ºãªèãã§ãã
çãããŒãžã§ã³ã¯ãã³ãŒããé«éåãããã¡ãã¡ã§æ§æãã ãŸããŠã被害è
ã®ã³ã³ãã¥ãŒã¿ãŒãæ¯æ®ºãããããã«ãŒã«é©ããŠããã¯ãã§ãã
ãããããšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã®èŠ³ç¹ããã¯ãããŒã¹ãããŒã¯ãå°ãç¯çŽããã ãã§ãæ€åºã«æ°çŸäžã®ã³ã¹ãããããå¯èœæ§ããããŸã
ç·šéïŒç§ã®ææ¡ã¯ãå€ãè¿ãé¢æ°ã®ãã¢ãªã¿ãŒã³ãç¡å¹ã«ããvoidé¢æ°ã®ãã¢ãªã¿ãŒã³ããã®ãŸãŸã«ããããšã§ããããšãæ確ã«ããããšæããŸãã
ãã®ããã2017幎ãããŸã£ãããªã¿ãŒã³ã®ãªããµã³ãã«ã³ãŒãã«ééããŸãããgo1.12.5ïŒwindows / amd64ïŒã§ã¯ãããã¯goãã«ãã§ãªã¿ãŒã³ããªããšãããã©ã°ãç«ãŠãããŸãã ããã¯åãåé¡ã§ããïŒ éå»ã«æé»ã®è¿åãèš±å¯ãããŠããŸããããçŸåšã¯ç¡å¹ã§ããïŒ ãã¢ãªã¿ãŒã³ã§ã¯çŽããŸããã§ããã ã¿ã€ãã¯uintptrã ã£ãã®ã§ã0ãè¿ããŸããïŒnillã¯lintããŸããïŒã
@datatribe ããããå€ãããããªå€åã¯èããããŸããã è¿åãéãã®ã¯ééãã§ããã 詳现ãèšèŒããæ°ãããã°ãå ±åããŸããïŒ
@datatribe ããããå€ãããããªå€åã¯èããããŸããã è¿åãéãã®ã¯ééãã§ããã 詳现ãèšèŒããæ°ãããã°ãå ±åããŸããïŒ
ãµã³ãã«ã³ãŒããè¯ããªãã£ãå¯èœæ§ã¯ååã«ãããŸãã ããããšã@bradfitz
ãããæ¬çªç°å¢ã®ãã°ãåŒãèµ·ãããã©ããã¯ããããŸããããç§ã«ãšã£ãŠã¯ã裞ã®ãªã¿ãŒã³ãèŠããšãéåžžãäœãèµ·ãã£ãŠããã®ããç解ããããšäžæåæ¢ããŸãã ã·ã£ããŠããã
err
äºæããªãæ¹æ³ã§æ©èœããããšã«åå·çã«ãªããŸããããã¯ãã·ã£ããŠããã
ç§ã¯ããã«ã€ããŠããªãã«åæããŸãã ååä»ããã©ã¡ãŒã¿ãŒå€æ°ã«å²ãåœãŠãããŠããå€ãç解ããããšãããšãäžæåæ¢ããŸãã 裞ã®ãªã¿ãŒã³ã§ã®ç§ã®äžå¿«ãªèªæžïŒç¹ã«é·ãïŒé¢æ°ã¯ãå®éã«è¿ããããã®ãç°¡åã«è¿œè·¡ã§ããªãããšã§ãã åãã€ããããªã¿ãŒã³ã¯ãå®éã«ã¯ååä»ããã©ã¡ãŒã¿ãŒã®return p1, p2, ..., pn
ãæå³ããŸãããäžéšã®ãã©ã¡ãŒã¿ãŒã®å€ã¯ã return nil, nil
ã return nil, err
ã return "", err
ã return p, nil
ããã«æããã«ãªãã©ã«ã§ããå ŽåããããŸãã return p, err
return p, nil
ã§ã¯ãªãreturn p, err
ã return nil, err
ãšæžããå Žåã err
ãŸã nil
å€ã§ããå¯èœæ§ããããŸãããæåã®æ»ãå€ãnil
ããšã¯æããã§ãã ãã€ããããªã¿ãŒã³ãèš±å¯ãããŠããªãå Žåãå¯èœã§ããã°ãã©ã€ã¿ãŒã¯returnã¹ããŒãã¡ã³ãã«ãªãã©ã«å€ãæžã蟌ãå¯èœæ§ãé«ããªããŸãã å®éãã³ãŒãã®ã¬ãã¥ãŒäžã«è£žã®ãªã¿ãŒã³ãé¿ããããã«äŸé Œãããšãããããã¯ãã¹ãŠãªãã©ã«å€ã䜿çšããŠããŸããã
äœå®¶ã裞ã®ãªã¿ãŒã³ã§æžããšãã圌ãã¯äœãè¿ããããã«ã€ããŠèããªãåŸåããããŸãã ç§ã圌ãã«è£žã®ãªã¿ãŒã³ãé¿ããããã«é Œãã ãšãã圌ãã¯åœŒããè¿ãããå®éã®å€ã«ã€ããŠèããéšåçã«æ§ç¯ãããå€ã®ãããªééã£ãå€ãè¿ããŠããããšã«æ°ã¥ããŸããã æé»çãããæ瀺çã®æ¹ãåªããŠããã®ã§ã¯ãªãã§ããïŒ
ãšã©ãŒãããŒãã€ã³ãã³ãããããšããå§ãããŸãããå®éã«ã¯ãã¹ãŠã®äººããã®ãã¿ãŒã³ã«åŸãããã§ã¯ãããŸãããç¹ã«ãå€ãã®è£žã®ãªã¿ãŒã³ãæã€é·ãé¢æ°ãäœæããã®ã奜ããªäººã¯ããã§ãã å€ãã®è£žã®ãªã¿ãŒã³ãèŠãŠãããããšã©ãŒãããŒã«ãããã©ãããç¥ãã®ã¯é£ããå ŽåããããŸãã ç§ã¯ã³ãŒãã泚ææ·±ãèªã¿ãããã泚ææ·±ããã³ãŒãããããã€ãã®ãªãã©ã«å€ã䜿çšããŠãã€ããããªã¿ãŒã³ãéãã€ãããã«å€æããŸããããããã°ãã¯ããã«èªã¿ããããªããŸãã ïŒã³ãŒããè€éãªå Žåããªãã©ã«å€ãææ¡ã§ããªãå ŽåããããŸãïŒ
ããã¥ã¡ã³ãã®ã³ã¡ã³ããããã¯ã«ã¯ãããã€ãã®æå³ã®ããæ¡ä»¶ã«å¯ŸããŠäœãè¿ãããããèšèŒãããŠããããšã¯ç¥ã£ãŠããŸããããã¹ãŠã®äººãããããŠããããã§ã¯ãããŸããã ããã€ãã®ãªãã©ã«å€ãå«ãreturnã¹ããŒãã¡ã³ãã䜿çšãããšãã³ãŒãã確èªããããšã§ç°¡åã«ããã«åŸãããšãã§ããŸãã
ååä»ããã©ã¡ãŒã¿ãŒãšè£žã§ãªããªã¿ãŒã³ãäžç·ã«äœ¿çšã§ããããšã¯ç¥ã£ãŠããŸããã誰ãããããç¥ã£ãŠããããã§ã¯ãããŸããã ç§ã¯ãã次ã®ãããªãã®ãç®ã«ããŸããã return io.EOF
æ¹ãè¯ããšæããŸãã
err = io.EOF
return
ãšã¯ãããäžäœäºææ§ããããgofmtã«ã¯ãã§ã«ããã€ãã®å°ããªå€æŽãå ããããŠãããããïŒ28160ã®æ¹ãããããããè¯ãä¿®æ£ã ãšæããŸãã
gofmt
ã®ä»äºã§ãã£ãŠãã gofmt
ãããããå
ã«æ»ãã¹ãã§ãããšããä»ã®ææ¡ã«ã¯åæããŸããã ããã¯ã return p1, ..., pn
æ©æ¢°çã«é
眮ããã ãã§ã¯ãã³ãŒããç解ãããããªããªãããã§ãã
lintããŒã«ãããããã§ãã¯ã§ããå¯èœæ§ã¯ãããŸããïŒ nakedret
ã¯ãããè¡ããŸãïŒãIMOããã€ããããªã¿ãŒã³ã¯ã¡ãªããããã害ããããŸãã ãŸãããã€ããããªã¿ãŒã³ãåé€ããã¡ãªããã¯ãäºææ§ãæãªã害ãããå°ããå¯èœæ§ãããããšã«ãåæããŸãã ããããæ©æ¢°çãªgo fix
ã³ãŒããèªã¿ããããªããªãå Žåã§ãã go fix
ã§ç°¡åã«ä¿®æ£ã§ãããšæããŸãã
ç§ã®æèŠã§ã¯ãGoã¯éåžžã«æ確ã§èªã¿ãããèšèªã§ãã ãããŠããã€ããããªã¿ãŒã³ã¯èšèªã®ããäžéšã§ãããã³ãŒããç解ããã®ãé£ãããªããŸãã
å€æŽhttps://golang.org/cl/189778ã¯ãã®åé¡ã«èšåããŠããŸãïŒ cmd/go/internal/get: propagate parse errors in parseMetaGoImports
ç§ã¯å°æ°æŽŸãããããŸããããå®éã«ã¯å察ã®ããšãææ¡ããããšæããŸãã ååä»ããªã¿ãŒã³ãæã€é¢æ°ã¯ãåžžã«ãã¢ãªã¿ãŒã³ã䜿çšããå¿ èŠããããŸãã ãã以å€ã®å Žåã¯ãã³ãŒããåãã€ããŠããããã«èŠããŸãã å€ãå²ãåœãŠãŠãããæ»ã£ããšãã«ãµã€ã¬ã³ãã«äžæžãããå¯èœæ§ããããŸãã ããã¯ç§ãäœãæå³ãããã説æããããã®æªãã³ãŒãã§ãã
func hello() (n, m int) {
n = 2
m = 3
return m, n
}
ããã§ãã¢ãªã¿ãŒã³ã䜿çšããã ãã®å Žåãã³ãŒãã¯åã³æå³ããªããŸãã
@millerlogicç§ã¯ãããããŸãã«ãæ»æçã ãšæããŸãã ããšãã°ã次ã®ãããªã³ãŒãã«ã¯äœã®åé¡ããããŸããã
func documentedReturns() (foo, bar string, _ error) {
[...]
if err != nil {
return "", "", fmt.Errorf(...)
}
}
ãŸããçŸåšã®ææ¡ãæèµ·ããŠãããã®ãšã¯å察ã®ããšãææ¡ããŠããã®ã§ãããªãã®äž»åŒµã¯å¥ã®å察ææ¡ãšããŠæãããåœãŠã¯ãŸããšæããŸãã
@mvdanè¯ãç¹ã§ãããæªéåã䌎ããªãäžéç¹ããããšæããŸãã 以åã«æ»ãå€æ°ã«å²ãåœãŠãå Žåãå€ãæ瀺çã«è¿ããªããšãã次ã®ãããªèããèªãã ãšæããŸãã ã©ããã«å®è£ ãããŠãããããããŸããããç§ã¯ããããããããããšã¯ãããŸããã ã€ãŸããç§ã®helloã®äŸã¯ããã€ããããªã¿ãŒã³ãªãã§ãšã©ãŒã«ãªããfooãŸãã¯barãå²ãåœãŠãããŠããªããããäŸã¯æåããŸãã
ãããã¯goã®ãã¢ãŒããåé€ããå¿ èŠããããšæããŸããããããã°ãæ°ããgoéçºè ã¯ãããã䜿çšããããšãæšå¥šãããŸããã å®éã«ã¯ããããã¯åãªãèªç¥çšã§ãã ç§ãèŠãããã€ãã®äººã¯ãã€ãç§ã®è³ã«ãäœãåŸ ã€ã®ïŒïŒ...ããããã裞ã®ãªã¿ãŒã³ãšååä»ãã®ãªã¿ãŒã³å€ããšèšãå¿ èŠããããŸããã ã
æãåèã«ãªãã³ã¡ã³ã
ã·ã³ãã«ãã¯åé·æ§ãæã¡è² ãããŸãã
return nil
ã®æã¯ãå€æ°ã®ææ°ã®å€ã远跡ãããããïŒæå³çã«ãŸãã¯ã«ãã£ãŠïŒã·ã£ããŠãããŠããªãããšã確èªããå¿ èŠãããreturn
æãããã¯ããã«ç解ããããã§ããééããïŒ