Go 를 공부해 보아요
A huge thank you to Calvin!
- Google이 개발한 programming language
- 문법은 C언어와 유사하지만, 동시성 (Concurrency) programming을 다루기 편하도록 설계됨
동시성 프로그래밍
- web service와 같이 DB요청이나 Network 통신과 같이 비교적 시간이 많이 걸리는 연산을 하는 동안 프로그램이 다른 이를 먼저할 수 있도록 함을 의미
- 비교적 최근에 등장한 프로그래밍 언어이지만 비교적 복잡하지 않고 실용적인 언어임
- Go를 활용하는 대표적인 프로젝트는
Docker
와Kubernetes
가 있음
-
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 하는 것과 유사함!
- Go module은 import 시에 url을 hash 할 수 있게 해준다
- 그래서 dependency를 관리하기 좋다!
- build 속도가 매우 빠름
-
longsleep/golang-backports
PPA 를 사용하여 설치sudo add-apt-repository ppa:longsleep/golang-backports sudo apt update sudo apt install golang-go
- golang.org 에서 package download & install
chloe@chloe-XPS-15-9570 ~
$ go version
go version go1.14.2 linux/amd64
~ via ⬢ v14.15.1
➜ go version
go version go1.15.6 darwin/amd64
- Go project를 진행할 directory를 생성한다
- ex)
/Users/chloe/workspace/go
- ex)
- 해당 directory 내에 아래와 같이 directory 3개를 생성한다
- bin
- source code가 compile된 후 OS별로 실행 가능한 binary file이 저장되는 곳
- pkg
- project에 필요한 package가 compile되어 library file들이 저장되는 곳
- src
- 작성한 source code 및 open source code들을 저장하는 곳
- bin
- Go는 2개의 environment variable을 갖고 있다 -
GOPATH
&GOROOT
GOROOT
- Go binaries가 위치한 곳
sudo apt install golang-go
로 설치하면 Go 를 default path에 설치하므로 따로 수정할 필요 없다!- mac에서는
/usr/local/go
에 설치된다
- mac에서는
GOPATH
- user go envirionment path
- project file들이 위치한 곳을 설정해야 함
go import
로 package들을 import 할 때GOPATH
로 불러옴- 일반적으로
$HOME/go
에GOPATH
를 설정함go install
이나go import
를 할 때 go 는GOPATH
를 찾게 되므로 중요하다!
GOPATH 설정
export GOPATH=$HOME/go
PATH 설정
export PATH=$PATH:$GOPATH/bin
~/.zshrc
에 다음을 추가한다
export GOPATH="/Users/chloe/workspace/go"
export PATH="$GOPATH:$PATH"
+
$GOPATH설정 후에 go env
명령어를 활용하여 제대로 적용되었는지 확인할 수 있다!
- Go는 download한 code들을
$GOPATH/src
에 download한 domain을 기준으로 분류해서 저장한다- ex) github.com, golang.org, google-golang.org, etc.
- 내가 작성한 source code는 github.com 내에 github user name으로 directory를 만들어서 추가할 것이다
-
package 이름을 main.go 로 한다는 것은 이 project를 complie 하고, 그것을 사용할 것이라는 뜻이다
- 즉, main.go 를 제외한 모든 package들은 compile 되지 않는다!
-
main이 진입점이라서 compiler는 package 이름이 main인 것 부터 찾는다
- ex)
package main
- ex)
-
Go는 func main() {} 이라는 함수를 찾는다
- 여기가 Go program의 entrypoint이다!
-
자동적으로 compiler는 main package 와 그 안에 있는 main function 을 먼저 찾고 실행시킨다
-
ex)
main.go
package main import "fmt" func main() { fmt.Println("Hello World") }
-
-
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() }
-
출력 해보기
ex)
package main
import "fmt"
func main() {
fmt.Print("Hello goorm!")
}
-
fmt
package import 안해도 print / println 은 사용 가능 -
println 과 print 는 line break 유무의 차이
- print로 줄바꿈을 하려면
\n
사용하기!
- 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
- 입출력을 위한 package
- 사용법
- package main 밑줄에
import "fmt"
작성
- package main 밑줄에
+
- gobyexample.com
- tour.golang.org
- blog.golang.org
- dave.cheney.net
- https://golang.org/doc/effective_go.html
- must read!