[Go] Context

context๋Š” ๊ณ ๋ฃจํ‹ด ๊ธฐ๋ฐ˜์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ณด์กฐ์ ์ธ ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•ด์•ผํ• ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ๋“ค์€ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€์ธ "context"์— ๋“ค์–ด์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปจํ…์ŠคํŠธ์˜ ์ƒ์„ฑ์€ ์ด๋Ÿฐ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค์Œ ์ฝ”๋“œ์˜ WithCancel์€ "์ทจ์†Œ" ๋ช…๋ น์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” context๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค.

์ด์™ธ์—๋„ ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” WithValeu, ํƒ€์ž„์•„์›ƒ ๊ธฐ๋ฐ˜์˜ WithTimeout ๋“ฑ์ด ์žˆ๋Š”๋ฐ, ๋ณธ ํฌ์ŠคํŠธ์—์„œ๋Š” Cancel๋งŒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋žต์ ์ธ ๊ตฌ์กฐ๋งŒ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์ผ๋‹จ ๊ณ ๋ฃจํ‹ด์œผ๋กœ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ๋‹ค.
context๋ฅผ ํ†ตํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ํ•จ์ˆ˜๋ผ๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ทธ context ์ œ์–ด ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š”๊ฒŒ ๊ธฐ๋ณธ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  context๋ฅผ ํ†ตํ•ด์„œ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์œผ๋ฉด ๊ทธ์— ๋”ฐ๋ฅธ ์•ก์…˜์„ ์ทจํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Cancel Context์˜ ๊ฒฝ์šฐ์—๋Š” cancel ์ด๋ฒคํŠธ๊ฐ€ ์ „์†ก๋˜์—ˆ์„ ๊ฒฝ์šฐ Err๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด์„œ ๊ณ ๋ฃจํ‹ด์˜ ์ค‘๋‹จ์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๊ณ 

ํ˜น์€ Done ํ•จ์ˆ˜์˜ ์ฑ„๋„์„ ํ†ตํ•ด์„œ ์ทจ์†Œ ์‹ ํ˜ธ ์ „๋‹ฌ ์—ฌ๋ถ€์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ฑ„๋„๊ณผ switch๋ฅผ ์‘์šฉํ•ด์„œ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ทจ์†Œ๋ฅผ ๋ณด๋‚ผ ์ฃผ์ฒด๊ฐ€ ๋˜๋Š” ๋ฉ”์ธ ๊ณ ๋ฃจํ‹ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ๋Œ๋ฆฌ๋ฉด

์ ๋‹น ์‹œ๊ฐ„ ๋Œ๋‹ค๊ฐ€ ์ฃฝ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋ฅธ context ํƒ€์ž…๋“ค๋„ ์‚ฌ์šฉํ˜•ํƒœ๋Š” ์—‡๋น„์Šทํ•˜๋‹ค.


์ฐธ์กฐ
https://pkg.go.dev/context