Skip to content

Latest commit

 

History

History
308 lines (202 loc) · 6.38 KB

01_Go_basics.md

File metadata and controls

308 lines (202 loc) · 6.38 KB

Getting Started With Go

Go 를 공부해 보아요

A huge thank you to Calvin!



What is Go Language?

  • Google이 개발한 programming language
  • 문법은 C언어와 유사하지만, 동시성 (Concurrency) programming을 다루기 편하도록 설계됨
    • 동시성 프로그래밍
      • web service와 같이 DB요청이나 Network 통신과 같이 비교적 시간이 많이 걸리는 연산을 하는 동안 프로그램이 다른 이를 먼저할 수 있도록 함을 의미
  • 비교적 최근에 등장한 프로그래밍 언어이지만 비교적 복잡하지 않고 실용적인 언어
  • Go를 활용하는 대표적인 프로젝트는 DockerKubernetes 가 있음


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


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/goGOPATH 를 설정함
      • go install 이나 go import 를 할 때 goGOPATH 를 찾게 되므로 중요하다!

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 은 사용 가능

  • printlnprint 는 line break 유무의 차이

    • print로 줄바꿈을 하려면 \n 사용하기!
  • 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" 작성



+

Useful Go resources recommended by Calvini