Go (by notepad) - HiroSung/Study GitHub Wiki

[Go Programming]
7/2. 804ํ˜ธ / ๊น€๋ณ‘์ง„.์—๋“€์•คํƒ ๊ฐ•์‚ฌ

. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ก .
- ไธญ ์ •์ ์–ธ์–ด์ธ Go
- cf ) python : ๋™์ ์–ธ์–ด. H/W๊ฐ€ ์ข‹๊ธฐ๋•Œ๋ฌธ์— ํ•„์š” ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์ด ๋นจ๋ผ์ง.

I. Go ์–ธ์–ด ์†Œ๊ฐœ ๋ฐ ํ™˜๊ฒฝ
- https://golang.org/doc/
- Go ํŠน์„ฑ
. ์ปดํŒŒ์ผ ์–ธ์–ด > ์ปดํŒŒ์ผ(๋ฌธ๋ฒ•๊ฒ€์‚ฌ์™€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ „ ๋‹จ๊ณ„๊นŒ์ง€ ๋งŒ๋“ค์–ด์ฃผ๋Š”) ํ”„๋กœ๊ทธ๋žจ์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•จ. ์ปดํŒŒ์ผ ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์ˆ˜ํ–‰.
. ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ
. C++, Java, Python์˜ ์žฅ์ .
. GC ๊ธฐ๋Šฅ ์ œ๊ณต
. 25๊ฐœ ํ‚ค์›Œ๋“œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ.
. * CSP ์Šคํƒ€์ผ์˜ Concurrent ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›โ€ฆ Thread ์ฒ˜๋ฆฌ. ์ฒ˜๋ฆฌ๋ฐ์ดํ„ฐ ๊ณต์œ 
- Go ์„ค์น˜ ๋ฐ ์‹คํ–‰
. https://golang.org/dl/
. 1.10.3 : why? ์ฒซ๋ฒˆ์งธ๋Š” ์ฃผ๋ฒ„์ „.์„œ๋ธŒ๋ฒ„์ ผ(๊ธฐ๋Šฅ์ถ”๊ฐ€).๋นŒ๋“œ๋ฒ„์ ผ(ํˆด.์ปดํŒŒ์ผ๋Ÿฌ๋กœ์†Œ์Šค์— ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์˜ฌ๋ฆผ)
. โ€ฆmsi๋กœ ์„ค์น˜ํ•˜๋ฉด ์ข‹์ง€๋งŒ ์ž‘์—…ํด๋”๋„ ๋งŒ๋“ค๊ณ  ATOM ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Œ.
. ATOM ์„ค์น˜ : https://atom.io/ (๋˜๋Š” Visual Studio Code๋„ ๊ฐ€๋Šฅ)
https://git-scm.com/downloads ์—์„œ git์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•˜๋ฉด
workspace ๋ฅผ C:\goApp๋กœ ์ง€์ •ํ•จ
Go Programming์— ์—ฐ๊ฒฐ๋ ์‹œ github๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์šฉ์ดํ•จ.
cf) ATOM ์‚ฌ์šฉ๋ฐฉ๋ฒ• : https://seoulrain.net/2016/12/05/atomeditor/

. ์ˆ˜ํ–‰๋ฐฉ๋ฒ•
# go run test.go > ์ปดํŒŒ์ผ
# go build test.go > ๋นŒ๋“œ
. Workspace ํด๋”
. C:\GoApp ํด๋”๋กœ ์ •ํ–ˆ๋‹ค๋ฉด bin, src , pkg ํด๋”๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.
- ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ €์žฅ์†Œ์™€ ์ด๋ฆ„
. ๋ณ€์ˆ˜
. GO๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
. ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ด๋ฆ„ : ๋ณ€์ˆ˜
. var๋กœ ์„ ์–ธ
var a int
var f float32 = 11.
. ์ƒ์ˆ˜
. ํ•œ๋ฒˆ ์ €์žฅํ•˜๋ฉด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
. const ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ
const C int = 10
const S string = โ€œHiโ€
. Go ํ‚ค์›Œ๋“œ(์˜ˆ์•ฝ์–ด) โ€“ ๊ต์žฌ P51 ์ฐธ๊ณ 

II. ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋ฌธ๋ฒ•
# Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…
- ์ •์ PGM์˜ ํ˜•์‹์˜ ์ด์ƒํ˜•!
. ์ •์ˆ˜
. ์†Œ์ˆ˜์ 
. ๋ฌธ
- ํƒ€์ž…(ํ˜•์‹)
. ์ฐธ/๊ฑฐ์ง“(Boolean) : bool (๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ˆซ์ž๋กœ ์ฒ˜๋ฆฌ)
. ๋ฌธ์ž์—ด : string
. ์ •์ˆ˜ํ˜• ํƒ€์ž… : ์ˆซ์ž โ€“ int int8 int16 int32 int64 uintโ€ฆ
. ์‹ค์ˆ˜ํ˜• : ์†Œ์ˆ˜์  โ€“ float32 float64 complex64 complex128
. ๊ธฐํƒ€ : byte (uint8๊ณผ ๋™์ผ. ๋ฐ์ดํ„ฐ ์ฃผ๊ณ  ๋ฐ›๊ณ  ํŒŒ์ผ ์ž…์ถœ๋ ฅ์‹œ ์‚ฌ์šฉ), rune (int32์™€ ๋™์ผ)
# ๋ฌธ์ž์—ด
- ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด
. ์‹ค์ œ๋ฐ์ดํ„ฐ
. Black Quote : โ€™โ€™ โ€“ Raw String ๊ทธ๋Œ€๋กœ์ด ๊ฐ’
. Double Quote : "" โ€“ ๋ณต์ˆ˜ ๋ผ์ธ์— ๊ฑธ์ณ ์“ธ ์ˆ˜ ์—†์Œ. ์ธ์šฉ๋ถ€ํ˜ธ ์•ˆ์ด Escape ๋ฌธ์ž์—ด ๋“ค์€ ํŠน๋ณ„ํ•œ ์ด๋ฏธ๋กœ ํ•ด์„. ๋ฌธ์ž์—ด์— \n์ด ์žˆ์œผ๋ฉด New Line์œผ๋กœ ์ธ์‹
# ํ˜•๋ณ€ํ™˜
- ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๋ณ€ํ™˜
- ํ˜•์˜๋ณ€ํ™ฉ/ํ˜•์‹œ๋ณ€ํ™˜
- ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” T(v)์™€ ๊ฐ™์ด ํ‘œํ˜„
. T๋Š” ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ํƒ€์ž…์„ ํ‘œ์‹œํ•˜๊ณ , v๋Š” ๋ณ€ํ™˜๋  ๊ฐ’์„ ์ง€์ •ํ•œ ๊ฒƒ.
. Go์—์„œ ํƒ€์ž…๊ฐ„ ๋ณ€ํ™˜์€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ • *
. ๋ช…์‹œ์  ์ง€์ •์ด ์—†์ด ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
# ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ฐ์‚ฐ์ž
- ๋ฐ์ดํ„ฐ์˜ ์ •์ œ ์ž‘์—… : ์—ฐ์‚ฐ
- ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž
- ๊ด€๊ณ„์—ฐ์‚ฐ์ž
- ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž
- Bitwise์—ฐ์‚ฐ์ž
. ๋น„ํŠธ๋‹จ์œ„ ์—ฐ์‚ฐ์„ ์œ„ํ•ด ์‚ฌ์šฉ. ๋ฐ”์ด๋„ˆ๋ฆฌ AND, OR, XOR์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์ž
. & , | , ! , << , >>
- ํ• ๋‹น ์—ฐ์‚ฐ์ž
. ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” = ์—ฐ์‚ฐ์ž ์™ธ์— ์‚ฌ์น™์—ฐ์‚ฐ, ๋น„ํŠธ์—ฌ๋‚œ์„ ์ถ•์•ฝํ•œ =, &=, <<= ๊ฐ™์€ ์—ฐ์‚ฐ์ž
- ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž (ํ•จ์ˆ˜ ํ• ๋•Œ ์‚ฌ์šฉ)
. C
+์™€ ๊ฐ™์ด & ํ˜น์€ * ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์–ป์–ด๋‚ด๊ฑฐ๋‚˜ ์ด๋ฅผ ๋ฐ˜๋Œ€๋กœ Dereferenceํ•  ๋•Œ ์‚ฌ์šฉ
. ํฌ์ธํ„ฐ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ ์‚ฐ์ถœ ์ฆ‰ ํฌ์ธํ„ฐ์— ๋”ํ•˜๊ณ  ๋นผ๋Š” ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ.
# ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด โ€“ ์กฐ๊ฑด๋ฌธ
- ๊ฐœ๋ฐœ์ž ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์ œ์–ด
- if
. ๋ฐ˜๋“œ์‹œ ์กฐ๊ฑด ๋ธ”๋Ÿญ ์‹œ์ž‘ ๋ธŒ๋ ˆ์ด์Šค({)๋ฅผ if ๋ฌธ๊ณผ ๊ฐ™์€ ๋ผ์ธ
. ์กฐ๊ฑด์‹์€ ๋ฐ˜๋“œ์‹œ Boolean ์‹์œผ๋กœ ํ‘œํ˜„
- switch
. ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
. ๋‹ค์ˆ˜์˜ ์กฐ๊ฑด์‹์„ ์ฒดํฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
. switch๋ฌธ ๋’ค์— ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜(ํ˜น์€ Expression)๋ฅผ ์ง€์ •
. case ๋ฌธ์— ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ, ๊ฐ ๊ฒฝ์šฐ์— ๋‹ค๋ฅธ ๋ฌธ์žฅ ๋ธ”๋Ÿญ๋“ค์„ ์ง€์ •.
. switch ์šฉ๋ฒ•
- switch ๋’ค์— Expression์ด ์—†์„ ์ˆ˜ ์žˆ์Œ.
- case๋ฌธ์— Expression์„ ์“ธ ์ˆ˜ ์žˆ์Œ.
- No default fall through
- Type switch
# ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด โ€“ ๋ฐ˜๋ณต๋ฌธ
- ํŠน์ • ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•  ๊ฒฝ์šฐ
. for ๊ตฌ๋ฌธ์ด ์ผ๋ฐ˜์ 
. Go๋Š” for ๊ตฌ๋ฌธ ํ•˜๋‚˜๋งŒ ์กด์žฌ
. โ€œfor ์ดˆ๊ธฐ๊ฐ’; ์กฐ๊ฑด์‹; ์ฆ๊ฐ {โ€ฆ}โ€์˜ ํ˜•์‹ ์‚ฌ์šฉ


package main

func main() {
sum := 0
for i := 1; i <= 100;i++ {
sum += 1
}

println(sum)
}


- for range ๊ตฌ๋ฌธ
. ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ถ€ํ„ฐ ํ•œ ์š”์†Œ์”ฉ ๊ฐ€์ ธ์™€ ์ฐจ๋ก€๋กœ for ๋ธ”๋Ÿญ์˜ ๋ฌธ์ž˜๋“ค์„ ์‹คํ–‰.
. foreach ๋น„์Šทํ•œ ์šฉ๋ฒ• for ์ธ๋ฑ์Šค, ์š”์†Œ๊ฐ’ := range ์ปฌ๋ ‰์…˜" ๊ฐ™์ด for ๋ฃจํ”„๋ฅผ ๊ตฌ์„ฑ

name := []string{"ํ™๊ธธ๋™", โ€œ์ด์ˆœ์‹ โ€, "๊ฐ•๊ฐ์ฐฌ"}
for index, name := range names {
println(index, name)
}

- ๊ธฐํƒ€ ์ œ์–ด๋ฌธ
. break
. continue
. goto : ์ตœ๋Œ€ํ•œ ์ž์ œํ•ด์•ผ ํ•จ.

- ์‹ค์Šต
. ์ฝ”๋”ฉ์‹œ ์ค‘์ฒฉ์˜ ์ค‘์ฒฉ์€ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค.

III. ํ•จ์ˆ˜์™€ ์ปฌ๋ ‰์…˜
1. ํ•จ์ˆ˜๋ž€?
โ€“ ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ๋ฌถ์–ด์„œ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋Ÿญ์˜ ๋‹จ์œ„. func ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜
- func ๋’ค์— ํ•จ์ˆ˜๋ช…์„ ์ ๊ณ  ๊ด„ํ˜ธ()์•ˆ์— ๊ทธ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ
โ€“ Pass By XXXXXX
. ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ Pass By Value์™€ Pass By Reference
. Pass By Value
+ ๊ฐ’ ๋งŒ ์ „๋‹ฌ
+ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ ํ•จ์ˆ˜์˜ ๊ฐ’๋งŒ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ
+ ์›๋ณธ ํ•จ์ˆ˜์˜ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ.
. Pass By Reference
+ ์ฐธ์กฐ ์ „๋‹ฌ. ๋ฐ›์„๋•Œ๋Š” *, ์ „๋‹ฌํ• ๋•Œ๋Š” & ๊ธฐํ˜ธ ์‚ฌ์šฉ.
+ ํ˜ธ์ถœํ•จ์ˆ˜์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ ํ•จ์ˆ˜๋„ ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ.
package main

func main() {
msg := โ€œHelloโ€
say(&msg)
println(msg) // ๋ณ€๊ฒฝ๋œ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
}

func say(msg string) {
println(
msg)
*msg = โ€œChangedโ€ // ๋ฉ”์‹œ์ง€ ๋ณ€๊ฒฝ
}
- ๊ฐ€๋ณ€์ธ์ž ํ•จ์ˆ˜
* ๊ณ ์ •๋œ ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์ˆซ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•  ๋•Œ
+ ๊ฐ€๋ณ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” โ€ฆ ์œผ๋กœ ํ‘œํ˜„
- ํ•จ์ˆ˜ ๋ฆฌํ„ด๊ฐ’
* ํ•จ์ˆ˜๋Š” ๋ฆฌํ„ด๊ฐ’์ด ์—…์„ ์ˆ˜๋„, ๋ฆฌํ„ด๊ฐ’์ด ํ•˜๋‚˜ ์ผ ์ˆ˜๋„ ๋˜๋Š” ๋ฆฌํ„ด๊ฐ’์ด ๋ณผ์ˆ˜ ๊ฐœ์ผ ๊ฐ€๋Šฅ์„ฑ
- * ์ต๋ช…ํ•จ์ˆ˜
* ํ•จ์ˆ˜๋ช…์„ ๊ฐ–์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ์ต๋ช…ํ•จ์ˆ˜(Anonymous Function)
*
main() {
sum := func( n โ€ฆint) int {
s := 0
for _, i := range n {
s += i
}
turn s
}

s := sum(1, 2, 3, , 4, 5)
}
- ์ผ๊ธ‰ํ•จ์ˆ˜
* ํ•จ์ˆ˜์˜ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ ๋ฆฌํ„ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ์„œ ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ์‚ฌ์šฉ
* ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

func main() {
//๋ณ€์ˆ˜ add์— ์ต๋ช…ํ•จ์ˆ˜ ํ• ๋‹น
add := func(i int, j int) int {
return i + j
}

// add ํ•จ์ˆ˜ ์ „๋‹ฌ
r1 := calc(add, 10, 20)
println(r1) // 30

// ์ง์ ‘ ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•จ
r2 := calc( func(x int, y int) int { return x โ€“ y}, 10, 20)
println(r2) // -10

}
func calc(f func(int, int) int, a int, b int) int {
result := f(a, b)
return result
}

- * type๋ฌธ์„ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ์›ํ˜•์˜ ์ •์˜
* type๋ฌธ์€ ๊ตฌ์กฐ์ฒด(struct), ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ Custom Type(ํ˜น์€ User Defined Tpye)์„ ์ •์˜ํ•˜ใ…ฃ ์œ„ํ•ด ์‚ฌ์šฉ
* ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜ํ–‰ํ•จ. (deligate! = ์ต๋ช…ํ•จ์ˆ˜+์ผ๋ช…ํ•จ์ˆ˜)
// ์›ํ˜• ์ •์˜
type calculator func(int, int) int

// calculator ์›ํ˜• ์‚ฌ์šฉ
func calc(f calculator, a int, b int) int {
result := f(a, b)
return result
}

- * ํด๋กœ์ €. ์ค‘์ฒฉํ•จ์ˆ˜
* ํ•จ์ˆ˜ ๋ฐ”๊นฅ์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ•จ์ˆ˜๊ฐ’
func nextValue() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
next := nextValue()
println(next()) // 1
println(next()) // 2

anotherNext = nextValue()
println(anotherNext()) // 1 ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘
}

- ์‹ค์Šต
* format string โ€ฆ ๋‚ ์ž๋ฅผ ๋…„/์›”/์ผ ๋กœ ์ถœ๋ ฅํ• ๋•Œ ์‚ฌ์šฉํ•จ.

- ์ปฌ๋ ‰์…˜
+ ๋ฐฐ์—ด
- ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋™์ผํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ.
- ๋ฐฐ์—ด์€ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑ.
var ๋ณ€์ˆ˜๋ช…[๋ฐฐ์—ดํฌ๊ธฐ] ๋ฐ์ดํ„ฐํƒ€์ž… // ๋ฐฐ์—ดํฌ๊ธฐ โ€“ indexer
- ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐํ™”
var a1 = 3 int{1,2,3}
var a3 = [โ€ฆ] int {1,2,3,4}
- ๋‹ค์ฐจ์› ๋ฐฐ์—ด : 3์ฐจ์› ๊นŒ์ง€ ์‚ฌ์šฉ์„ ๊ถŒ์žฅ
var multiArray 345int //์ •์˜
multiArray012 = 10 // ์‚ฌ์šฉ
+ ์Šฌ๋ผ์ด์Šค
- ์ผ์ฐจ์›๊ฐ€๋ณ€๋ฐฐ์—ด. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ.
- ๋ฐฐ์—ด์€ ๊ณ ์ •๋œ ๋ฐฐ์—ดํฌ๊ธฐ ์•ˆ์— ๋™์ผํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ
- ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜ ๋ถ€๋ถ„์„ ๋ฐœ์ทŒํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ (cf. linked Database ๊ตฌ์กฐ)

var a []int
a = []int{1,2,3}
a1 = 10

- ์Šฌ๋ผ์ด์Šค ์ถ”๊ฐ€/๋ณ‘ํ•ฉ/๋ณต์‚ฌ
+ copy(), append() ์‚ฌ์šฉ
+ Map
- Key์™€ Value์˜ ๊ตฌ์กฐ : ํ•ด์‹œํ…Œ์ด๋ธ”(Hash table)
tickers := map[string]string{
โ€œGOOGโ€: โ€œGoogle Incโ€,
โ€œMSFTโ€: โ€œMicrosoftโ€,
โ€œFBโ€: โ€œFace Bookโ€,
}

IV. ํŒจํ‚ค์ง€์™€ ๊ตฌ์กฐ์ฒด
1. ํŒจํ‚ค์ง€
- ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™”, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€๋“ค์€ GOROOT/pkg ์•ˆ์— ์กด์žฌ
- Main ํŒจํ‚ค์ง€
+ main ์ด๋ผ๊ณ  ๋ช…๋ช…๋œ ํŒจํ‚ค์ง€๋Š” Go Compiler์— ์˜ํ•ด ํŠน๋ณ„ํ•˜๊ฒŒ ์ธ์‹
+ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค ๋•Œ์—๋Š” , main ํŒจํ‚ค์ง€๋‚˜ main ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ๋ถˆ๊ฐ€
- Import
+ ๋ณต์ˆ˜ ๊ฐœ์ผ ๊ฒฝ์šฐ ์„ธ๋ฏธ์ฝœ๋ก (์œˆ๋„์šฐ์ฆˆ์˜ ๊ฒฝ์šฐ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ
- ํŒจํ‚ค์ง€ init ํ•จ์ˆ˜/alias
+ ํŒจํ‚ค์ง€ ์‹คํ–‰์‹œ ์ฒ˜์Œ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” init() ํ•จ์ˆ˜
+ import์‹œ alias ์ •์˜ ๊ฐ€๋Šฅ
- ์‚ฌ์šฉ์ž ์ •์˜ ํŒจํ‚ค์ง€ ์ƒ์„ฑ / Export
+
package testlib
import โ€œfmtโ€

var pop = map[string]string // ํ•„๋“œ. ํŒจํ‚ค์ง€์™€ ํ•จ์ˆ˜์‚ฌ์ด์— ์žˆ๊ธฐ์— ์‚ฌ์šฉ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•จ. ์ž์ œํ•ด์•ผ ํ•จ.

func init() {
pop = make(map[string]string)
pop[โ€œAdelโ€] = โ€œHelloโ€
}

func getMusic(singer string) string {
return pop[singer]
}
2. ๊ตฌ์กฐ์ฒด
- ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐํƒ€์ž… ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ
- ํ•„๋“œ ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ฐ€์ง€๋ฉฐ, (ํ–‰์œ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š”) ๋ฉ”์„œ๋“œ๋Š” ์—†์Œ. OOP์„ ๊ณต์œ ์˜ ๋ฐฉ์‹์œผ๋กœ ์ง€์›
- Method์—์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์„ค๋ช… ์˜ˆ์ •
- ๊ตฌ์กฐ์ฒด์˜ ์„ ์–ธ
type person struct {
name string
age int
}

func main() {
p := person{}

p.name = โ€œLeeโ€
p.age = 10
}
- ๊ฐ์ฒด์˜ ์ƒ์„ฑ
var p1 person
p1 = person{"bob", 20}
p2 := person{name:โ€œSeanโ€, age:50}
- ๊ฐ์ฒด : ์ƒ์†๊ณผ ๋‹ค์–‘์„ฑ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด์„œ ๊ธฐ๋Šฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ. / ์ •๋ณด์€๋‹‰ public, private, protected
- ์ƒ์„ฑ์ž ํ•จ์ˆ˜
+ Constructor : ํ•„๋“œ ์ „์ฒด๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ์ดˆ๊ธฐํ™” ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ.
+ ๋ชจ๋“ ๊ฒƒ์„ ๊ฐ–๊ณ  ์ˆ˜ํ–‰๋˜๋Š” ํ•จ์ˆ˜. ์ž˜๋ชป ๊ตฌ์„ฑํ•˜๋ฉด ์ฒ˜์Œ ์ˆ˜ํ–‰์‹œ ์ˆ˜ํ–‰์ด ์•ˆ๋  ์ˆ˜ ์žˆ์Œ. ํ•„์š”ํ• ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ~
type dict struct {
data map[int]string
}

//์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ •์˜
func newDict() *dict {
d := dict{}
d.data = map[int]strig{}
return &d // ํฌ์ธํ„ฐ ์ „๋‹ฌ
}

func main() {
dic := newDict() // ์ƒ์„ฑ์ž ํ˜ธ์ถœ
dic.data1 = โ€œaโ€
}

2์ผ์ฐจ

V. ๋ฉ”์„œ๋“œ์™€ ์ธํ„ฐํŽ˜์ด์Šค

VI. ์—๋Ÿฌ์ฒ˜๋ฆฌ์™€ ์ง€์—ฐ ์‹คํ–‰๊ณผ ํ•จ์ˆ˜

VII. ๋™์‹œ์„ฑ(thread) ๋ฐ ๋ฃจํ‹ด๊ณผ ์ฑ„๋„ (* ์ค‘์š”)

VIII. ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ์™€ ํ…Œ์ŠคํŠธ F/W(*์ค‘์š”)

โš ๏ธ **GitHub.com Fallback** โš ๏ธ