Effective-go

  • effective go๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Formatting

  • Go์—์„œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ํฌ๋งทํŒ… ์ด์Šˆ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์ ‘๊ทผ๋ฒ•์„ ์ทจํ•œ๋‹ค.

  • gofmt์ด ๋“ค์—ฌ์“ฐ๊ธฐ, ์ˆ˜์ง ์ค„๋งž์ถค, ์ฃผ์„ ํฌ๋งทํŒ… ๋“ฑ์„ ํ‘œ์ค€ ์Šคํƒ€์ผ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

  • ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ํƒญ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ค„ ๊ธธ์ด์—๋Š” ์ œํ•œ์ด ์—†๋‹ค.

Commentary

  • godoc์€ ์ฝ”๋“œ๊ฐ€ ํฌํ•จํ•˜๋Š” ๋‚ด์šฉ์„ ๋ฌธ์„œํ™”ํ•˜์—ฌ ๋…ธ์ถœํ•ด์ค€๋‹ค. ์ด ๋•Œ ์ฃผ์„๋„ ์ถ”์ถœํ•˜์—ฌ ์„ค๋ช… ๋ฌธ์„œ๋กœ ์ œ๊ณตํ•ด์ค€๋‹ค.

  • ์„ ์–ธ๋ถ€ ์ด์ „์— ์ฃผ์„์„ ๋œ๋‹ค.

  • ๋ชจ๋“  ํŒจํ‚ค๋Š” ํŒจํ‚ค์ง€ ๊ตฌ๋ฌธ ์ด์ „์— "ํŒจํ‚ค์ง€ ์ฃผ์„"์„ ๊ฐ€์ง€๋Š” ๊ฒŒ ์ข‹๋‹ค.

    • ํŒจํ‚ค์ง€๊ฐ€ ๊ฐ„๋‹จํ•œ ๊ฒƒ์ด๋ฉด ํŒจํ‚ค์ง€ ์ฃผ์„๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

  • ์„ค๋ช…ํ•˜๋ ค๋Š” ์„ ์–ธ๋ถ€์˜ ์ด๋ฆ„์œผ๋กœ ์ฃผ์„์„ ์‹œ์ž‘ํ•ด๋ผ

    • ์˜ˆ์‹œ - func Compile() : //Compile parses a regular ..

Names

  • Go์—์„œ๋Š” ์ด๋ฆ„์˜ ์ฒซ ๊ธ€์ž๊ฐ€ ๋Œ€๋ฌธ์ž์ธ์ง€ ์†Œ๋ฌธ์ž์ธ์ง€์— ๋”ฐ๋ผ ํŒจํ‚ค์ง€ ๋ฐ–์—์„œ์˜ ๋…ธ์ถœ ์—ฌ๋ถ€๊ฐ€ ์ •ํ•ด์ง„๋‹ค.

  • ๊ด€๋ก€์ ์œผ๋กœ, ํŒจํ‚ค์ง€๋ช…์€ ์†Œ๋ฌธ์ž, ํ•œ ๋‹จ์–ด๋กœ๋งŒ ๋ถ€์—ฌํ•˜๋ฉฐ ์–ธ๋”๋ฐ”(_)๋‚˜ ๋Œ€์†Œ๋ฌธ์ž ํ˜ผ์šฉ์— ๋Œ€ํ•œ ํ•„์š”๊ฐ€ ์—†์–ด์•ผํ•œ๋‹ค.

  • ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ๋„ค์ด๋ฐ์— ํ™œ์šฉํ•˜๋ผ. ์˜ˆ๋ฅผ ๋“ค๋ฉด, bufio ํŒจํ‚ค์ง€์— ์žˆ๋Š” ๋ฒ„ํผ ๋ฆฌ๋”๋Š” BufReader๊ฐ€ ์•„๋‹Œ Reader๋กœ ๋ถˆ๋ฆฐ๋‹ค. bufio.Reader๊ฐ€ bufio.BufReader๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • getter ๋ฉ”์„œ๋“œ์— Get์€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, obj.GetOwner() ๋Œ€์‹  obj.Owner()๋ฅผ ์“ด๋‹ค.

  • ์–ธ๋”๋ฐ”๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  MixedCaps ํ˜น์€ mixedCaps๋กœ ์“ด๋‹ค.

Semicolons

  • Go์—์„œ๋Š” ๊ตฌ๋ฌธ๋ถ„์„๊ธฐ(lexer)๊ฐ€ ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฝ์ž…ํ•œ๋‹ค.

  • ๊ทœ์น™์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด, "๊ตฌ๋ฌธ์„ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š” ํ† ํฐ ๋’ค์— ์ƒˆ๋กœ์šด ๋ผ์ธ์ด ์˜ค๋ฉด, ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฝ์ž…ํ•˜๋ผ"์ด๋‹ค.

  • ์ฃผ์˜ํ•  ๊ฒƒ์€ ์ œ์–ด๋ฌธ์„ ์—ฌ๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ๋‹ค์Œ ๋ผ์ธ์— ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์“ฐ๋ฉด ์„ธ๋ฏธ์ฝœ๋ก ์ด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ณณ์— ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋‹ค.

Control Structures

  • go์–ธ์–ด์—๋Š” do๋‚˜ while์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ์ข€ ๋” ์ผ๋ฐ˜ํ™”๋œ for๋ฌธ๊ณผ ์œ ์—ฐํ•œ switch๋ฌธ์ด ์กด์žฌํ•œ๋‹ค.

  • For๋ฌธ์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • if else if else๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค switch๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” Go ์–ธ์–ด๋‹ต๋‹ค. ๋‹ค์Œ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€์ˆ˜์˜ ๋™์  ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๋•Œ switch๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Functions

  • Go ์–ธ์–ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ํ•จ์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋Š” ์ง€๊ทนํžˆ ์ผ๋ฐ˜์ ์ด๋‹ค.

  • ์ด๋ฆ„ ์žˆ๋Š” ๊ฒฐ๊ณผ (Named result parameters)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๊ฒฐ๊ณผ์— ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ์งง๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋ฉฐ, ๋ฌธ์„œํ™”๊ฐ€ ๋œ๋‹ค.

Last updated