Go Basics

Go ๋ฅผ ๊ณต๋ถ€ํ•ด ๋ณด์•„์š”

A huge thank you to Calvin!

What is Go Language?

  • Google์ด ๊ฐœ๋ฐœํ•œ programming language

  • ๋ฌธ๋ฒ•์€ C์–ธ์–ด์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋™์‹œ์„ฑ (Concurrency) programming์„ ๋‹ค๋ฃจ๊ธฐ ํŽธํ•˜๋„๋ก ์„ค๊ณ„๋จ

    • ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

      • web service์™€ ๊ฐ™์ด DB์š”์ฒญ์ด๋‚˜ Network ํ†ต์‹ ๊ณผ ๊ฐ™์ด ๋น„๊ต์  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋™์•ˆ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ์ด๋ฅผ ๋จผ์ €ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์„ ์˜๋ฏธ

  • ๋น„๊ต์  ์ตœ๊ทผ์— ๋“ฑ์žฅํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด์ง€๋งŒ ๋น„๊ต์  ๋ณต์žกํ•˜์ง€ ์•Š๊ณ  ์‹ค์šฉ์ ์ธ ์–ธ์–ด์ž„

  • Go๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœ์ ํŠธ๋Š” Docker์™€ Kubernetes ๊ฐ€ ์žˆ์Œ

Why Go?

  • Go๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์ง๊ด€์ ์ธ ์–ธ์–ด ๋ฅผ ์ง€ํ–ฅํ•จ

    • OOP ๋ฅผ ์ง€์›ํ•œ๋‹ค

      • class, ๊ฐ์ฒด, ์ƒ์†์˜ ๊ฐœ๋…์ด ์—†๋‹ค

    • Go์—์„œ ์“ฐ์ด๋Š” ํ‚ค์›Œ๋“œ๋Š” Java์˜ ์ ˆ๋ฐ˜ ์ˆ˜์ค€์ธ 25๊ฐœ ๋ฐ–์— ๋˜์ง€ ์•Š์Œ

      • ๊ฐ„๋‹จ!

    • Complie ์–ธ์–ด์ง€๋งŒ compiler์˜ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— interpreter ์–ธ์–ด์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ์Œ

  • ์ข‹์€ build system ์„ ๊ฐ–๊ณ  ์žˆ์Œ

    • build ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„

      • ๋ช‡ ์ฒœ์ค„์˜ ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋กœ์ ํŠธ๋„ ๋‹จ ๋ช‡ ์ดˆ๋งŒ์— complie ํ•œ๋‹ค!

    • Code import ๊ฐ€ off url import ๊ธฐ๋ฐ˜์ด๋‹ค

      • ๊ทธ๋ž˜์„œ dependency๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹๋‹ค!

        • Go module์€ import ์‹œ์— url์„ hash ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค

          • ๋‹ค๋ฅธ build system์—์„œ .lock file ์„ import ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•จ!

Install Go on Ubuntu/Mac

1. Go 1.14 ์„ค์น˜ํ•˜๊ธฐ

Ubuntu

  • longsleep/golang-backports PPA ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜

    sudo add-apt-repository ppa:longsleep/golang-backports
    sudo apt update
    sudo apt install golang-go

MacOS

  • golang.org ์—์„œ package download & install

2. Go version ํ™•์ธํ•˜๊ธฐ

Ubuntu

chloe@chloe-XPS-15-9570 ~
$ go version
go version go1.14.2 linux/amd64

MacOS

~ via โฌข v14.15.1
โžœ go version
go version go1.15.6 darwin/amd64

3. Workspace ์„ค์ •

  • Go project๋ฅผ ์ง„ํ–‰ํ•  directory๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

    • ex) /Users/chloe/workspace/go

  • ํ•ด๋‹น directory ๋‚ด์— ์•„๋ž˜์™€ ๊ฐ™์ด directory 3๊ฐœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

    • bin

      • source code๊ฐ€ compile๋œ ํ›„ OS๋ณ„๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ binary file์ด ์ €์žฅ๋˜๋Š” ๊ณณ

    • pkg

      • project์— ํ•„์š”ํ•œ package๊ฐ€ compile๋˜์–ด library file๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณณ

    • src

      • ์ž‘์„ฑํ•œ source code ๋ฐ open source code๋“ค์„ ์ €์žฅํ•˜๋Š” ๊ณณ

4. environment variable ์„ค์ •

  • Go๋Š” 2๊ฐœ์˜ environment variable์„ ๊ฐ–๊ณ  ์žˆ๋‹ค - GOPATH & GOROOT

  • GOROOT

    • Go binaries๊ฐ€ ์œ„์น˜ํ•œ ๊ณณ

    • sudo apt install golang-go๋กœ ์„ค์น˜ํ•˜๋ฉด Go ๋ฅผ default path์— ์„ค์น˜ํ•˜๋ฏ€๋กœ ๋”ฐ๋กœ ์ˆ˜์ •ํ•  ํ•„์š” ์—†๋‹ค!

      • mac์—์„œ๋Š” /usr/local/go ์— ์„ค์น˜๋œ๋‹ค

  • GOPATH

    • user go envirionment path

    • project file๋“ค์ด ์œ„์น˜ํ•œ ๊ณณ์„ ์„ค์ •ํ•ด์•ผ ํ•จ

    • go import ๋กœ package๋“ค์„ import ํ•  ๋•Œ GOPATH ๋กœ ๋ถˆ๋Ÿฌ์˜ด

    • ์ผ๋ฐ˜์ ์œผ๋กœ $HOME/go ์— GOPATH ๋ฅผ ์„ค์ •ํ•จ

      • go install ์ด๋‚˜ go import ๋ฅผ ํ•  ๋•Œ go ๋Š” GOPATH ๋ฅผ ์ฐพ๊ฒŒ ๋˜๋ฏ€๋กœ ์ค‘์š”ํ•˜๋‹ค!

4-1. Ubuntu $GOPATH ์„ค์ •

GOPATH ์„ค์ •

export GOPATH=$HOME/go

PATH ์„ค์ •

export PATH=$PATH:$GOPATH/bin

4-2. MacOS $GOPATH ์„ค์ •

~/.zshrc์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•œ๋‹ค

export GOPATH="/Users/chloe/workspace/go"
export PATH="$GOPATH:$PATH"

+

$GOPATH์„ค์ • ํ›„์— go env ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

5. src in $GOPATH

  • Go๋Š” downloadํ•œ code๋“ค์„ $GOPATH/src ์— downloadํ•œ domain์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฅ˜ํ•ด์„œ ์ €์žฅํ•œ๋‹ค

    • ex) github.com, golang.org, google-golang.org, etc.

    • ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ source code๋Š” github.com ๋‚ด์— github user name์œผ๋กœ directory๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค

Getting started with Go

1. Main package

  • package ์ด๋ฆ„์„ main.go ๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ด project๋ฅผ complie ํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋Š” ๋œป์ด๋‹ค

    • ์ฆ‰, main.go ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  package๋“ค์€ compile ๋˜์ง€ ์•Š๋Š”๋‹ค!

  • main์ด ์ง„์ž…์ ์ด๋ผ์„œ compiler๋Š” package ์ด๋ฆ„์ด main์ธ ๊ฒƒ ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค

    • ex) package main

  • Go๋Š” func main() {} ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค

    • ์—ฌ๊ธฐ๊ฐ€ Go program์˜ entrypoint์ด๋‹ค!

  • ์ž๋™์ ์œผ๋กœ compiler๋Š” main package ์™€ ๊ทธ ์•ˆ์— ์žˆ๋Š” main function ์„ ๋จผ์ € ์ฐพ๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค

    • ex)

      main.go

      package main
      
      import "fmt"
      
      func main() {
       fmt.Println("Hello World")
      }

2. Packages and imports

  • Go์—์„œ function์„ export ํ•˜๊ณ  ์‹ถ์œผ๋ฉด, upper-case ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค

    • ex)

      something.go

      package something
      
      import "fmt"
      
      func saySeeya() {
       fmt.Println("See ya!")
      }
      
      func SayHello() {
       fmt.Println("Hello!")
      }

      main.go

      package main
      
      import (
       "fmt"
      
       "github.com/chloe-codes1/go101/something"
      )
      
      func main() {
       fmt.Println("Hello World")
       something.SayHello()
      }

์ฝ˜์†” ์ถœ๋ ฅ ํ•จ์ˆ˜ - println, print

์ถœ๋ ฅ ํ•ด๋ณด๊ธฐ

ex)

package main
import "fmt"

func main() {
 fmt.Print("Hello goorm!")
}
  • fmt package import ์•ˆํ•ด๋„ print / println ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • println ๊ณผ print ๋Š” line break ์œ ๋ฌด์˜ ์ฐจ์ด

    • print๋กœ ์ค„๋ฐ”๊ฟˆ์„ ํ•˜๋ ค๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ!

  • Single quote ์•ˆ ๋จ!

    • Double quote ์‚ฌ์šฉํ•˜๊ธฐ

  • print ํ•จ์ˆ˜๋“ค์€ ํ•จ์ˆ˜ ์•ˆ์—์„œ์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ ํ•  ์ˆ˜ ์žˆ์Œ!

    ex)

    package main
    
    func main() {
      var num1 int = 1000
      var num2 int = 1413
    
      println("๋ง์…ˆ์„ ํ•ด๋ณด์•„์š” ~ ", num1 + num2)
    }
    chloe@chloe-XPS-15-9570 ~/Workspace/Go/Go101
    $ ./calc
    ๋ง์…ˆ์„ ํ•ด๋ณด์•„์š” ~  2413

fmt package

  • ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ package

  • ์‚ฌ์šฉ๋ฒ•

    • package main ๋ฐ‘์ค„์— import "fmt" ์ž‘์„ฑ

+

Last updated

Was this helpful?