Backend/๐ฉต Go(7)
-
[Go] Ellipsis ์ ํ์ฉ๊ณผ ์ฃผ์์ฌํญ
Go ์์ ... ์ Ellipsis (์ค์ํ) ์ฐ์ฐ์๋ผ๊ณ ๋ถ๋ฅธ๋ค. JS ์์๋ ์ด๋ฐ ๋ฌธ๋ฒ์ด ์๋ ๊ฑธ๋ก ๊ธฐ์ตํ๋ค. Ellipsis ์ฐ์ฐ์์ ์ฃผ์ ์ฉ๋๋ ๋๊ฐ์ง ์ธ๋ฐ 1) ๊ฐ๋ณ์ธ์ ๋งค๊ฐ๋ณ์, 2) ์ฌ๋ผ์ด์ค ํ์ฅ ์ ๋๋ก ์ ์ํ ์ ์๋ค. 1. ๊ฐ๋ณ์ธ์ (Variadic Parameters)๊ฐ๋ณ ์ธ์๋ ํจ์๊ฐ ์์์ ๊ฐ์์ ์ธ์๋ฅผ ๋ฐ์ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฅผ ๋ค์ด int ํ ์ธ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ผ ํ ๋ ํ๊ฐ๋ฅผ ๋๊ธฐ๊ฑฐ๋, ๊ทธ ์ด์์ ์๋ฅผ ๋๊ฒจ์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. ์ธ์์ ์๊ฐ ๋ณํ๋ ๊ฒฝ์ฐ, ๋ณดํต ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์์ผ ํ๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง ellipsis ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ผ๋ฏธํฐ์ ํ์ ์ ๊ตณ์ด ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค. ์๋ ์์๋ฅผ ์ดํด๋ณด์. sum() ํจ์๋ ์ธ์๋ก int ํ ellipsis ..
2025.01.22 -
[Go] Pointer ์ฝ๊ฒ ์ดํดํด๋ณด์
๋ชฉ์ฐจ- Pointer ๊ธฐ๋ณธ ๊ฐ๋ ์ก๊ธฐ- Pointer ๋ฅผ ์ฌ์ฉํ๋ ์ด์ - Go ๋ ์ ๊ตณ์ด ํฌ์ธํฐ๋ฅผ ๋์ ํ์๊น?- ๋ฒ์ธ) ์๋ฐ์ ํฌ์ธํฐ๋? Pointer ๊ธฐ๋ณธ ๊ฐ๋ ์ก๊ธฐ๊ทธ๋์ ํฌ์ธํฐ๊ฐ ๋ฌด์์ผ๊น? ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํน๋ณํ ๋ณ์๋ฅผ ์๋ฏธํ๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฃผ์?? ์ง๊ด์ ์ผ๋ก ์ดํด๋์ง ์๋ ๋ฌธ์์ ์ซ์ ๊ฐ์ ๋ ์ฌ๋ ธ๋ค๋ฉด ์ ๋ต์ด๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ์ปดํจํฐ์ RAM(Random Access Memory)์์ ํน์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ณ ์ ํ ์์น๋ฅผ ๋ํ๋ด๋ ์ซ์๊ฐ์ ์๋ฏธํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ด๋ค ๋ณ์๋ฅผ ์ ์ธํ์ฌ ๊ฐ์ ํ ๋นํ๋ฉด, ๋ณ์ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ์์น์ ํ ๋น๋ ๊ฐ์ ์ ์ฅ๋๋ค. ์ฆ ํด๋น ๋ณ์๋ ํน์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ํ ๋น๋ฐ์ ๊ฐ์ ์ ์ฅํ๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ ์์น, ์ฆ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด ๋ฐ๋ก ํฌ์ธํฐ๋ค! ์ฝ๋๋ก ์ด..
2025.01.05 -
ํ ํฌ ๋ธ๋ก๊ทธ ๋ชจ์๋ณด๊ธฐ ๊ฐ๋ฐ ๊ธฐ๋ก (2) : Go ์ธ์ด์ ์๋ฒ๋ฆฌ์ค ํ๋ ์์ํฌ
์๋ก ์ด ๊ธ์ Golang ์ดํ๋ฆฌ์ผ์ด์ ์ Serverless framework ๋ฅผ ์ด์ฉํด AWS Lambda ์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋ค๋ฃฌ๋ค.ํ์ฌ ์ด์์ค์ธ ์ฌ์ด๋ ํ๋ก์ ํธ(๐ ํ ํฌ ๋ธ๋ก๊ทธ ๋ชจ์๋ณด๊ธฐ) ๋ Go ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก AWS Lambda(์ดํ ๋๋ค)์ ๋ฐฐํฌ๋์ด ์๋ค. ์ฒ์ ๋๋ค๋ฅผ ๋ฐฐ์ธ ๋ AWS Console ์์ ์ผ์ผ์ด API Gateway ๋ฅผ ์ค์ ํ๊ณ Lambda ํจ์์ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ ๊ธฐ์ต์ด ๋๋๋ฐ, ๋น์๋ง ํด๋ ๊ฐ๋จํ ํ์ด์ฌ ํจ์๋ฅผ ํธ์ถํ๋ ์ ๋๋ผ AWS Console ์ ์ฝ๋๋ฅผ ๋ณต๋ถํ๋ ์ ๋๋ก ๋๋ค๋ฅผ ๋ง๋ณด๊ธฐ ํ๋ค. ํ์ง๋ง ์ค์ ๋ก ์ด์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๋จ์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋๋ค์ ๋ฐฐํฌํ ์ ์์๋ค. ํ์ผ ์๋ ๋ง์ ๋ฟ๋๋ฌ ๋งค๋ฒ ๋ฐฐํฌํ ๋ ๋ง๋ค ๊ทธ๋ฐ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ..
2024.10.22 -
[Go] goroutine ๊ณผ channel ๋ก API ์คํ ์๊ฐ ๊ฐ์ ํ๊ธฐ
๋ชฉ์ฐจ- ์๋ก - ๋๊ธฐ์ ํธ์ถ- ๋น๋๊ธฐ ํธ์ถ : Goroutine ํ์ฉ- ๋น๋๊ธฐ ํธ์ถ ๊ฐ์ : Channel ํ์ฉ- ๊ฒฐ๋ก ์๋ก ์ฌ๋ฌ ํ ํฌ ๊ธฐ์ ์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ธฐ ์ข์ํฉ๋๋ค. ๋ค๋ง ๋งค๋ฒ ์ฌ๋ฌ ๋ธ๋ก๊ทธ ํํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๋ค ๋ณด๋ ์์ฃผ ๊ฐ๋ ๋ธ๋ก๊ทธ๋ ๋ฐ๋ก ๋ชจ์์ ์ฝ๊ณ ์ถ์ ์๊ฐ์ด ๋ค๋๋ผ๊ณ ์. ์ด๋ฅผ ์ํด Go๋ฅผ ํ์ฉํ ํ ํฌ ๋ธ๋ก๊ทธ ์คํฌ๋ํผ๋ฅผ ๊ฐ๋ฐํ๊ธฐ๋ก ํ์ต๋๋ค. ์ด๋ฏธ ๊ทธ๋ฐ ์๋น์ค๋ ๋ง์ง ์๋๊ณ ์? ๋ง์ต๋๋ค. ๊ทธ๋๋ ํ๋ฒ ์ง์ ํด๋ณด๊ณ ์ถ์์ต๋๋ค๐.๊ธฐ์ ์ ๋ธ๋ก๊ทธ๋ค์ ๋ค์ํ ํ๋ซํผ์ ํ์ฉํฉ๋๋ค. Medium ๋ถํฐ ์์ฒด ๋ธ๋ก๊ทธ๋ฅผ ์ด์ํ๋ ๊ณณ๊น์ง, ๋ค์ํ ๋ฐฉ์์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ๊ธฐ ๋ค๋ฅธ ํํ์ ํ๋ซํผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ง๋ ์คํฌ๋ํ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ ๋ ๋ธ๋ก๊ทธ ํ๋ซํผ์ ๋ง๋ ์คํฌ๋ํ ๊ตฌํ์ฒด๋ฅผ ๋ง..
2024.09.13 -
[Go] panic: runtime error: invalid memory address or nil pointer dereference ์๋ฌ ํด๊ฒฐ
๊ฐ์fiber ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์์ผ ์ฑํ ์๋ฒ๋ฅผ ๊ฐ๋ฐ ์ค http ์์ websocket ์ผ๋ก ํ๋กํ ์ฝ์ ์ ๊ทธ๋ ์ด๋ ํ๋ ๊ณผ์ ์์ ๋ฐ์ํ ๋ฌธ์ . ์๋ฌ ๋ฐ์์ฃผ์์ ๋ฌ์๋์ ๊ฒ ์ฒ๋ผ websocket handler ๋ด๋ถ์์ fiber.Ctx ์ ์ ๊ทผํ์๋ง์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ด๊ฑฐ๋ nil pointer ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋๋ฐ, ServeHttp() ๋ฉ์๋ ์ง์ ์์ ์์ c ๋ฅผ ๋ก๊ทธ๋ก ํ์ธํ์ ๋ ์ ์ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.์ฆ websocker ํธ๋ค๋ฌ ๋ด๋ถ์์ fiber.Ctx ๋ฅผ ์ ๊ทผํ์ง ๋ชปํ๋ ๊ฒ์ด ์์ธ์ด๋ผ ์๊ฐํ๋ค.func (r *Room) ServeHTTP(c *fiber.Ctx) error { if r == nil { return fiber.NewError(fiber.St..
2024.08.06 -
์์๋ฅผ ํตํ Go ๊ฐ์ฒด ์์ฑ ์ดํดํ๊ธฐ
๋ชฉํ Go์ struct ์ดํด struct์ method ์ดํด method ์ function ์ ์ฐจ์ด ์ดํด ๊ตฌ์กฐ์ฒด(Struct ) ๋? Go ์ธ์ด์ struct๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฃํ ์ ๋๋ค. struct๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ํ๋๋ฅผ ๋ฌถ์ด ํ๋์ ๋ ์ฝ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ด๋ จ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํํ๊ณ ๊ตฌ์กฐํํ ์ ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด ์ ์ ๊ตฌ์กฐ์ฒด(struct)๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค. type ํ์ ๋ช struct { ํ๋๋ช ํ์ ... ํ๋๋ช ํ์ } ์ด๊ธฐํ ์๋ ์์์ฝ๋๋ Account ๊ตฌ์กฐ์ฒด๋ฅผ Owner(๊ณ์ข์ฃผ)์ Balance(์์ก) ํ๋์ ํจ๊ป ์ ์ํ์ต๋๋ค. ๊ตฌ์กฐ์ฒด๋ก ๋ณ์๋ฅผ ์์ฑํ ๋ ํ๋ ์์๋ก ์ด๊ธฐ๊ฐ์ ๋์ ํ๊ฑฐ๋, ํ๋๋ช ์ ์ง์ ํ์ฌ ์ด๊ธฐํ ํ ์..
2024.01.25 -
[Golang] new, make, pointer ํ๊ตฌ
๋ชฉ์ฐจ 1. new ํค์๋ 2. ํ์ ํฌ์ธํฐ ์ค๋ช 3. ํค์๋ 4. ์์ฝ Go ์ธ์ด์ new ์ make ๋ ์๋ก์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค๋ ๊ณตํต์ ์ด ์์ง๋ง ์ ์ฉํ ์ํฉ๊ณผ ๋์์ด ๋ค๋ฅธ๋ค. ๋์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ๋น๊ตํ์ฌ ์ด๋ ์ํฉ์ ์ ํฉํ๊ฒ ์ฌ์ฉํ ์ ์๋์ง ์์๋ณด๊ณ , ๋๋ถ์ด ์๊ฒ๋ ํฌ์ธํฐ ์ง์๋ ๊ฐ์ด ์ ๋ฆฌํด๋ณธ๋ค. new ํค์๋ ์ฌ์ฉ ๋ชฉ์ new ๋ ์ฃผ๋ก ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ (์์ ํ์ )์ ํฌ์ธํฐ๋ฅผ ํ ๋นํ ๋ ์ฌ์ฉ๋๋ค. ์ฆ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ํ ๋นํ๊ณ ํด๋น ์ธ์คํด์ค์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค. new ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ ์ ๋ก๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ฉฐ, new ๋ก ์์ฑ๋ ๊ฐ์ 0 ๋๋ nil ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๋ค. var k *int k = new(int) fmt.Println("k: ", k, " *k: ", *..
2024.01.07