Go Program - HiroSung/Study GitHub Wiki

[Go Programming]

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

I. Go ์–ธ์–ด ์†Œ๊ฐœ ๋ฐ ํ™˜๊ฒฝ

1. Go ํŠน์„ฑ

  • ์ปดํŒŒ์ผ ์–ธ์–ด > ์ปดํŒŒ์ผ(๋ฌธ๋ฒ•๊ฒ€์‚ฌ์™€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ „ ๋‹จ๊ณ„๊นŒ์ง€ ๋งŒ๋“ค์–ด์ฃผ๋Š”) ํ”„๋กœ๊ทธ๋žจ์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•จ. ์ปดํŒŒ์ผ ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์ˆ˜ํ–‰
  • ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ
  • C++, Java, Python์˜ ์žฅ์ .
  • GC ๊ธฐ๋Šฅ ์ œ๊ณต
  • 25๊ฐœ ํ‚ค์›Œ๋“œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ.
  • CSP(Communicating Sequential Processes) ์Šคํƒ€์ผ์˜ Concurrent ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›... Thread ์ฒ˜๋ฆฌ. ์ฒ˜๋ฆฌ๋ฐ์ดํ„ฐ ๊ณต์œ 

2. 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 ํด๋”๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.

3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ €์žฅ์†Œ์™€ ์ด๋ฆ„

  • ๋ณ€์ˆ˜
    • GO๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
    • ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ด๋ฆ„ : ๋ณ€์ˆ˜
    • var๋กœ ์„ ์–ธ
      var a int
      var f float32 = 11.
      
  • ์ƒ์ˆ˜
    • ํ•œ๋ฒˆ ์ €์žฅํ•˜๋ฉด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
    • const ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ
      const C int = 10
      const S string = "Hi"
      
    • Go ํ‚ค์›Œ๋“œ(์˜ˆ์•ฝ์–ด) - ๊ต์žฌ P51 ์ฐธ๊ณ 

II. ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋ฌธ๋ฒ•

1. Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • ์ •์ PGM์˜ ํ˜•์‹์˜ ์ด์ƒํ˜•!
    • ์ •์ˆ˜
    • ์†Œ์ˆ˜์ 
    • ๋ฌธ
  • ํƒ€์ž…(ํ˜•์‹)
    • ์ฐธ/๊ฑฐ์ง“(Boolean) : bool (๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ˆซ์ž๋กœ ์ฒ˜๋ฆฌ)
    • ๋ฌธ์ž์—ด : string
    • ์ •์ˆ˜ํ˜• ํƒ€์ž… : ์ˆซ์ž - int int8 int16 int32 int64 uint...
    • ์‹ค์ˆ˜ํ˜• : ์†Œ์ˆ˜์  - float32 float64 complex64 complex128
    • ๊ธฐํƒ€ : byte (uint8๊ณผ ๋™์ผ. ๋ฐ์ดํ„ฐ ์ฃผ๊ณ  ๋ฐ›๊ณ  ํŒŒ์ผ ์ž…์ถœ๋ ฅ์‹œ ์‚ฌ์šฉ), rune (int32์™€ ๋™์ผ)

2. ๋ฌธ์ž์—ด

  • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด
    • ์‹ค์ œ๋ฐ์ดํ„ฐ
    • Black Quote : '' - Raw String ๊ทธ๋Œ€๋กœ์ด ๊ฐ’
    • Double Quote : "" - ๋ณต์ˆ˜ ๋ผ์ธ์— ๊ฑธ์ณ ์“ธ ์ˆ˜ ์—†์Œ. ์ธ์šฉ๋ถ€ํ˜ธ ์•ˆ์ด Escape ๋ฌธ์ž์—ด ๋“ค์€ ํŠน๋ณ„ํ•œ ์ด๋ฏธ๋กœ ํ•ด์„. ๋ฌธ์ž์—ด์— \n์ด ์žˆ์œผ๋ฉด New Line์œผ๋กœ ์ธ์‹

3. ํ˜•๋ณ€ํ™˜

  • ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๋ณ€ํ™˜
  • ํ˜•์˜๋ณ€ํ™ฉ/ํ˜•์‹œ๋ณ€ํ™˜
  • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” T(v)์™€ ๊ฐ™์ด ํ‘œํ˜„
    • T๋Š” ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ํƒ€์ž…์„ ํ‘œ์‹œํ•˜๊ณ , v๋Š” ๋ณ€ํ™˜๋  ๊ฐ’์„ ์ง€์ •ํ•œ ๊ฒƒ.
    • Go์—์„œ ํƒ€์ž…๊ฐ„ ๋ณ€ํ™˜์€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ • *
    • ๋ช…์‹œ์  ์ง€์ •์ด ์—†์ด ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

4. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ฐ์‚ฐ์ž

  • ๋ฐ์ดํ„ฐ์˜ ์ •์ œ ์ž‘์—… : ์—ฐ์‚ฐ
  • ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž
  • ๊ด€๊ณ„์—ฐ์‚ฐ์ž
  • ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž
  • Bitwise์—ฐ์‚ฐ์ž
    • ๋น„ํŠธ๋‹จ์œ„ ์—ฐ์‚ฐ์„ ์œ„ํ•ด ์‚ฌ์šฉ. ๋ฐ”์ด๋„ˆ๋ฆฌ AND, OR, XOR์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์ž
    • & , | , ! , << , >>
  • ํ• ๋‹น ์—ฐ์‚ฐ์ž
    • ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” = ์—ฐ์‚ฐ์ž ์™ธ์— ์‚ฌ์น™์—ฐ์‚ฐ, ๋น„ํŠธ์—ฌ๋‚œ์„ ์ถ•์•ฝํ•œ +=, &=, <<= ๊ฐ™์€ ์—ฐ์‚ฐ์ž
    • ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž (ํ•จ์ˆ˜ ํ• ๋•Œ ์‚ฌ์šฉ)
    • C++์™€ ๊ฐ™์ด & ํ˜น์€ * ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์–ป์–ด๋‚ด๊ฑฐ๋‚˜ ์ด๋ฅผ ๋ฐ˜๋Œ€๋กœ Dereferenceํ•  ๋•Œ ์‚ฌ์šฉ
    • ํฌ์ธํ„ฐ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ ์‚ฐ์ถœ ์ฆ‰ ํฌ์ธํ„ฐ์— ๋”ํ•˜๊ณ  ๋นผ๋Š” ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ.

5. ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด - ๋ฐ˜๋ณต๋ฌธ

  • ํŠน์ • ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•  ๊ฒฝ์šฐ
    • for ๊ตฌ๋ฌธ์ด ์ผ๋ฐ˜์ 
    • Go๋Š” for ๊ตฌ๋ฌธ ํ•˜๋‚˜๋งŒ ์กด์žฌ
    • "for ์ดˆ๊ธฐ๊ฐ’; ์กฐ๊ฑด์‹; ์ฆ๊ฐ {...}"์˜ ํ˜•์‹ ์‚ฌ์šฉ
    package main
    
    func main() {
    	sum := 0
    	for i := 1; i <= 100;i++ {
    		sum += 1
    	}
    
    	println(sum)
    }
    

6. ์‹ค์Šต

  • 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

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" // ๋ฉ”์‹œ์ง€ ๋ณ€๊ฒฝ
        }
       

IV. ํŒจํ‚ค์ง€์™€ ๊ตฌ์กฐ์ฒด

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

VI. ์—๋Ÿฌ์ฒ˜๋ฆฌ

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

VIII. ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ์™€ ํ…Œ์ŠคํŠธ F/W

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