Go Program - HiroSung/Study GitHub Wiki
[Go Programming]
- 7/2. 804ํธ / ๊น๋ณ์ง.์๋์คํ ๊ฐ์ฌ
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก
- ไธญ ์ ์ ์ธ์ด์ธ Go
- cf ) python : ๋์ ์ธ์ด. H/W๊ฐ ์ข๊ธฐ๋๋ฌธ์ ํ์ ๋ฐ์ดํฐ ์ถ๋ ฅ์ด ๋นจ๋ผ์ง.
- ์ปดํ์ผ ์ธ์ด > ์ปดํ์ผ(๋ฌธ๋ฒ๊ฒ์ฌ์ ์ํํ ์ ์๋ ์ ๋จ๊ณ๊น์ง ๋ง๋ค์ด์ฃผ๋) ํ๋ก๊ทธ๋จ์ด ๋ณ๋๋ก ํ์ํจ. ์ปดํ์ผ ํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ ์ํ
- ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ์ํด ๊ฐ๋ฐ
- C++, Java, Python์ ์ฅ์ .
- GC ๊ธฐ๋ฅ ์ ๊ณต
- 25๊ฐ ํค์๋๋ก ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ.
- CSP(Communicating Sequential Processes) ์คํ์ผ์ Concurrent ํ๋ก๊ทธ๋๋ฐ ์ง์... Thread ์ฒ๋ฆฌ. ์ฒ๋ฆฌ๋ฐ์ดํฐ ๊ณต์
- 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 ์ฐธ๊ณ
- ์ ์ 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ํ ๋ ์ฌ์ฉ
- ํฌ์ธํฐ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ์ง๋ง ํฌ์ธํฐ ์ฐ์ถ ์ฆ ํฌ์ธํฐ์ ๋ํ๊ณ ๋นผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์.
- ํน์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ ๊ฒฝ์ฐ
- for ๊ตฌ๋ฌธ์ด ์ผ๋ฐ์
- Go๋ for ๊ตฌ๋ฌธ ํ๋๋ง ์กด์ฌ
- "for ์ด๊ธฐ๊ฐ; ์กฐ๊ฑด์; ์ฆ๊ฐ {...}"์ ํ์ ์ฌ์ฉ
package main func main() { sum := 0 for i := 1; i <= 100;i++ { sum += 1 } println(sum) }
-
if
func main() { var result bool = false var firstData int = 200 var secData int = 500 thiData := 1000 // var thiData int = 1000 // if condition { // } if firstData > secData { } else { } if firstData < secData { } else if firstData == secData { } // switch expression { // case condition: // } var dataResult string var sec int = 1 switch dataResult { case 1: // what } }
-
for
- ์ฌ๋ฌ ๋ฌธ์ฅ์ ๋ฌถ์ด์ ์คํํ๋ ์ฝ๋ ๋ธ๋ญ์ ๋จ์. 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" // ๋ฉ์์ง ๋ณ๊ฒฝ }