golang์ ํฅ๋ฏธ๊ฐ ์๊ฒจ์ ์ ๋ฌธํ๋๋ฐ ์๊ฐ๋ณด๋ค ์ต์ ํ ๋ ์๋ฃ๊ฐ ๋๋ฌด ์๋ค... ์๋ฌธ์ด๋ฉด ๋ง์๋ฐ ํ๊ตญ์ด๋ก ๋ ์๋ฃ๊ฐ ๋ง์ด ์์ด์ ์์ฝ๋ค.
์ค์น๋ ๊ทธ๋ฅ ๊ณต์ ํํ์ด์ง๊ฐ์ msi, pkg๋ฅผ ๋ฐ์ ์ค์นํ๋ฉด ๋๋ค.
์ค์น๋ฅผ ํ๊ณ ๋์ cmd๋ terminal์ go version์ ์คํํ๋ฉด ์ ๋์ค๋ ๊ฑธ ๋ณผ ์ ์๋ค.
์ด์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ณด๋ฉด์ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ ค๋๋ฐ ํ๋๋ ํ ๋ฆฌ์ go ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค!
๋ถ๋ช go env๋ฅผ ์ณ์ ํ๊ฒฝ์ค์ ์ gopath๊ฐ ์๋ ๊ฑธ ๋ดค๋๋ฐ, ์ค์ ๋ก ๊ฐ๋ณด๋ฉด gopath๊ฐ ์๋ค. ๊ฐ์๋ฅผ ๋ฐ๋ผํ๋ค ๋ณด๋ฉด ๊ฐ์์๋ go ๋๋ ํ ๋ฆฌ๊ฐ ์๊ณ src, pkg, bin ํด๋๊ฐ ์์๊ฑด๋ฐ 1.11 ๋ฒ์ ์ดํ๋ก๋ ๋ชจ๋์์คํ ์ผ๋ก ์ ํ๋์ด์ ์ ์ญํ๊ฒฝ๋ณ์ ์ค์ ์ ๋ฐ๋ก ํด์คํ์๊ฐ ์์ด์ก๋ค.(์ค์นํ ๋ ์ ํด์ง default ๊ฐ ๊ทธ๋๋ก ๋๋ฉด ๋๋ค.)
# ์์ ๋๋ ํ ๋ฆฌ ์ค์ ํ๊ธฐ
mkdir workspace-go
cd workspace-go
๋จผ์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋ค.
go mod init workspace-go
๊ทธ ๋ค์ go mod init "ํ๋ก์ ํธ์ด๋ฆ" ์ผ๋ก ๋ชจ๋์ ์ด๊ธฐํ ํด์ค๋ค. ํ๋ก์ ํธ ์ด๋ฆ์ผ๋ก ํด๋ ๋๊ณ , ํจํค์ง ๋ช ์ผ๋ก ํด๋ ๋๋ค๊ณ ํ๋ค. ๊ฐ์ ์์ ๋ค์ ๋ณด๋ฉด ๋ณดํต ํจํค์ง ๋ช ์ผ๋ก ํ๋ ๊ฒ๊ฐ๋ค...
module workspace-go
go 1.22.3
์ด๊ธฐํ๋ฅผ ํ๊ณ ๋๋ฉด go.mod ํ์ผ์ด ์๊ธฐ๋๋ฐ, ์ด์ด๋ณด๋ฉด go ์ธ์ด ๋ฒ์ ์ด ๋ค์ด๊ฐ์๋ค. ์ฌ๊ธฐ์ require๋ก ์ข ์์ฑ ๊ด๋ฆฌ๋ ํ๋ค.
ํ๋ก์ ํธ๋ ์ด ๋ชจ๋์ ์ ์ธ๋ ์ข ์์ฑ์ ๋ฐ๋ฅด๊ฒ ๋๊ณ ๋ชจ๋ ์์คํ ์ผ๋ก ์ด์ ํ ์ด์ ๊ฐ ์ด๊ฒ ๋๋ฌธ์ธ ๊ฒ ๊ฐ๋ค.
๋ชจ๋์ ์ข ๋ ์๋ณด๊ธฐ ์ํด Gin์ ๋ฐ์๋ณด์. Gin์ ์น์ฑ ๋ง๋๋๋ฐ ์ฐ์ด๋ ํ๋ ์์ํฌ๋ค.
go get github.com/gin-gonic/gin
์ด๊ฑธ ํ๊ณ go.modํ์ผ์ ๋ค์ ์ด์ด๋ณด๋ฉด ์ข ์์ฑ๋ค์ด ์ฃผ๋ฅด๋ฅต ๋ฌ๋ ค์๋ ๊ฑธ ๋ณผ ์ ์๋ค.
module workspace-go
go 1.22.3
require (
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.10.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.20.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
vendor๋ผ๋ ๊ฒ๋ ์์ด์ ๋ฐฐํฌ๊ฐ์ ํ๊ฒฝ์ ์ข ์์ฑ๊ด๋ฆฌ์ ํ์ํ๋ค๋๋ฐ ์ด๊ฑด ๋์ค์ ์์๋ด์ผ๊ฒ ๋ค.
์ด๊ฑธ ์ญ ํด๋ณด๋ IDE๋ก new projectํ๋ ๊ณผ์ ์ ์์์ ์ผ๋ก ํ๋ ๊ฒ ๊ฐ๋ค.
# ํ์ผ ๋ง๋ค๊ณ ์คํํ๊ธฐ
package main
import "fmt"
func main() {
fmt.Println("์๋
ํ์ธ์")
fmt.Printf("์๋
ํ์ธ์ %s", "์๋
ํ๊ฐ์ธ์")
}
Go๋ ํจํค์ง๋ก ๊ตฌ์ฑ๋๋ค.
mainํจํค์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ์ํด ํ์ํ ํจํค์ง๋ฉฐ mainํจ์๋ฅผ ๊ฐ๋๋ค. mainํจ์๋ ์์ฐ์ค๋ฝ๊ฒ ์ปดํ์ผ๋ฌ๊ฐ ์ธ์ํ๋ ์ง์ ์ ์ด๋ผ๊ณ ์๊ฐ ํ ์ ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ import๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ๋ฌ๊ฐ๋ฅผ ์ธ๋๋ ๊ดํธ์์ ๋ฃ์ด์ ์ฌ์ฉํ๋๋ฐ ์ง๊ธ์ fmtํ๋๋ผ ๊ดํธ๊ฐ ํ์์๋ค.
fmt๋ C ๊ณ์ด๋ก ์๊ฐํ๋ฉด stdio.h ์ ๋๋ก ๋ณผ ์ ์๋ค. scanf, printf ์ฌ์ฉํ ๋ ํ์ํ ๊ทธ๊ฒ์ด๋ค.
์ด์ ์์๊ฐ์ ๊ฑธ ๋ฐ๋ผํ๊ธฐ ์ํ ํ๋ก์ ํธ ์ค์ ์ด ๋๋ฌ๋ค.
์ด๋ฆฌ ์ ๋ฆฌ ๋๋ฌ๋ณด๋ค๊ฐ ์ฌ์์น์์ ๊ฑธ ๋ฐ๊ฒฌํ๋ค. Go๋ ๊ธฐ๋ณธ์ ์ผ๋ก call by value๋ผ๊ณ ํ๋ค. ๊ฐ์ ๋๊ธฐ๊ณ ๋๋ฉด ๋ ๋ฆฝ๋ ์กด์ฌ๋ก ๋๊ฒจ์ค ๋ณ์์ ๊ฐ์ด ๋ณํด๋ ์๋ณธ์๋ ๋ณํ๊ฐ ์๋๊ฑธ ์๋ฏธํ๋๋ฐ Go๋ C์ ํน์ง์ ๊ฐ๋ ์ธ์ด๋ต๊ฒ "ํฌ์ธํฐ"๋ฅผ ๊ฐ๊ณ ์๋ค. ํฌ์ธํฐ๋ฅผ ์ฐ๋ฉด call by reference๊ฐ ๋๋๋ฐ ์๋ง C๋ฅผ ์ํด๋ณธ ์ฌ๋์ด๊ฑฐ๋ ์ฐธ์กฐ์ ๋ํ ๊ฐ๋ ์ด ์ฝํ์ฌ๋์ ํท๊ฐ๋ฆด ๋ถ๋ถ์ด๋ค. Go๋ GC๋ ๊ฐ๊ณ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ ๋ด๊ฐ ์ ๊ทผํ ์ ์๋ ํน์ดํ ์ธ์ด๋ผ๋ ์๊ฐ์ด ๋ค๊ธฐ ์์ํ๋ค.
var a int = 10
var p *int = &a
์ ์ํ ๋ณ์ a์ ์ฃผ์๋ฅผ ์ ์ํ ํฌ์ธํฐ p์ ์ด๊ธฐํ ์์ผ์ฃผ๋ ์ฝ๋๋ค. ๋ณ์ ์ ์ธํ ๋ a:=10 ์ด๋ฐ์์ผ๋ก ๊ทธ๋ฅ ํ ์๋ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ๋์ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํ์ ์ ๋ช ์ํด์ค ํ์๊ฐ ์์ง๋ง, ๋๋ ๋ญ๊ฐ ๋ช ์์ ์ธ ํ์ ์ ์ธ์ด ์ข์์ ์ด๋ ๊ฒ ์ด๋ค. ๋ :=๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ์ด๊ธฐ๊ฐ์ ๋ฃ์ด์ค์ผํ๋ค. var๋ก ์ ์ธํ ๋ณ์๋ ์ผ๋จ ์ ์ธ์ ์ด๊ธฐํ๊ฐ ํ์์๊ณ ์ ์ธํด๋๋ฉด ํด๋น ํ์ ์ zero๊ฐ์ผ๋ก ์ด๊ธฐํ ๋์ด ์๋ค.
package main
import (
"fmt"
)
func main() {
var a string
var b *float64
var c int64
fmt.Println("[", a, "]", "[", b, "]", "[", c, "]")
}
[ ] [ <nil> ] [ 0 ]
ํฌ์ธํฐ์ ์ฐธ์กฐ๋ฅผ ์๋ฌ์์คฌ๋๋ nil์ด ๋์๋ค...์ด๊ฑด ๋ ๋ญ๊น
๋ค์ ํฌ์ธํฐ๋ก ๋์์์,
package main
import "fmt"
func main() {
var a int = 10
var p *int = &a
fmt.Printf("P์ ์ฃผ์๋ %p์ด๊ณ P๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ๊ฐ์ %d์
๋๋ค", p, *p)
}
P์ ์ฃผ์๋ 0xc00000a0b8์ด๊ณ P๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ๊ฐ์ 10์ ๋๋ค
Cํ ๋ ๊ธฐ์ต์ด ์๋ก์๋ก๋๋ค.. ๋ณ์ํ์ ์ ๋ณด๋ ค๋ฉด reflect๋ฅผ importํด์ ์ฐ๋ฉด๋๋ค.
package main
import (
"fmt"
"reflect"
)
func main() {
var a int = 10
var p *int = &a
fmt.Println("๋ณ์ p์ ํ์
:", reflect.TypeOf(p))
}
๋ณ์ p์ ํ์ : *int
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!
'Go๐ฅ๏ธ > ์ฝ์งโ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Go ๊ธฐ์ด ๋ฌธ๋ฒ - ๋ณ์, ํจ์, if, for, ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด, ์ธํฐํ์ด์ค (0) | 2024.06.03 |
---|