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 ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์น
MacOS
golang.org ์์ package download & install
2. Go version ํ์ธํ๊ธฐ
Ubuntu
MacOS
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 ์ค์
PATH ์ค์
4-2. MacOS $GOPATH ์ค์
~/.zshrc
์ ๋ค์์ ์ถ๊ฐํ๋ค
+
$GOPATH์ค์ ํ์ go env
๋ช
๋ น์ด๋ฅผ ํ์ฉํ์ฌ ์ ๋๋ก ์ ์ฉ๋์๋์ง ํ์ธํ ์ ์๋ค!
5. src
in $GOPATH
src
in $GOPATHGo๋ 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
2. Packages and imports
Go์์ function์ export ํ๊ณ ์ถ์ผ๋ฉด, upper-case ๋ก ์์ฑํ๋ฉด ๋๋ค
ex)
something.go
main.go
์ฝ์ ์ถ๋ ฅ ํจ์ - println
, print
println
, print
์ถ๋ ฅ ํด๋ณด๊ธฐ
ex)
fmt
package import ์ํด๋ print / println ์ ์ฌ์ฉ ๊ฐ๋ฅprintln ๊ณผ print ๋ line break ์ ๋ฌด์ ์ฐจ์ด
print๋ก ์ค๋ฐ๊ฟ์ ํ๋ ค๋ฉด ์ฌ์ฉํ๊ธฐ!
Single quote ์ ๋จ!
Double quote ์ฌ์ฉํ๊ธฐ
print ํจ์๋ค์ ํจ์ ์์์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ ํ ์ ์์!
ex)
fmt
package
fmt
package์ ์ถ๋ ฅ์ ์ํ package
์ฌ์ฉ๋ฒ
package main ๋ฐ์ค์
import "fmt"
์์ฑ
+
Useful Go resources recommended by Calvini
gobyexample.com
tour.golang.org
blog.golang.org
dave.cheney.net
https://golang.org/doc/effective_go.html
must read!
Last updated
Was this helpful?