๋ค์ด๊ฐ๋ฉฐ
Go์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด ๋ฌธ๋ฒ์ ๋ํด์ ๋ค๋ฃจ์ง๋ ์์ต๋๋ค. ํ ์ธ์ด์ ๋น๊ตํ์ ๋ ์ด๋ค ํธ๋ฆฌํ ์ ๊ณผ ์ฐจ์ด๊ฐ ์๋์ง ๊ฐ๋จํ ์ง์ด๋ณด๊ฒ ์ต๋๋ค.
๋ณ์
- ์ ์ ํ์ : int8/16/32/64, uint8/16/32/64, int, uint, rune
- rune: UTF-8์ธ์ฝ๋ฉ์ ์ ๋์ฝ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ํ์ํ๋ ์ ์
- ๊ธฐ๋ณธ๊ฐ: ์ ์ 0, ์ค์ 0.0, ๋ถ๋ฆฌ์ธ false, ๋ฌธ์์ด “”, ๊ทธ์ธ nil
- ์์์ ํ์ ๋ณํ ํ์ฉX
- ์ค์ ๋น๊ต์ math.Nexafter๋ก ๋น๊ตํ๋ฉด ํธ๋ฆฌ
- a, b = b, a ์ค์
- iota๋ก ์ด๊ฑฐ๊ฐ ์ฌ์ฉ
const (
Red int = iota // 0
Blue int = iota // 1
Green int = iota // 2
Yellow int = iota + 1 // 3 + 1 = 4
)
- ๋ค์ด๋ฐ ์ปจ๋ฒค์
- Go ์ธ์ด์์๋ ๋๋ฌธ์๋ก ์์ํ๋ ์๋ณ์๋ง ์ธ๋ถ ํจํค์ง์์ ์ ๊ทผ ๊ฐ๋ฅ
์กฐ๊ฑด๋ฌธ(if, switch)
- if ์ด๊ธฐ๋ฌธ; ์กฐ๊ฑด๋ฌธ
if filename, success := UploadFile(); success {
...
}
- switch์ ๋ค์ด๊ฐ๋ ์ธ์์๋ ๋ฌธ์์ด๋ ํ์ฉ(case “monday”:)
- case์์ break ๋ช ์ ์ํด์ค๋ ์์์ ๋จ
- switch์ ์กฐ๊ฑด ๋น๊ต๊ฐ ๋ค์
switch true { // true ์๋ต ๊ฐ๋ฅ
case temp < 10, temp > 30:
fmt.println("๋ฐ๊นฅ ํ๋ํ๊ธฐ ์ข์ ๋ ์จ๊ฐ ์๋")
case humidity > 50:
fmt.println("์ต๋๊ฐ ๋๋ฌด ๋์")
}
switch age := getMyAge(); age {
case 10:
fmt.println("Teenage")
...
๋ฐ๋ณต๋ฌธ(for)
- ์ง๊ด์ฑ์ ์ํด while ์ง์ํ์ง ์์
- for { … } ๋ ๋ฌดํ ๋ฃจํ(while true ๋์ฒด)
- range ์ฌ์ฉ ๋ฐ๋ณต(์ฌ์ฉ ๋น๋ ๋์)
nums := []int{10, 20, 30}
for i, v := range nums {
fmt.Println(i, v)
}
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
fmt.Println(k, v)
}
๊ตฌ์กฐ์ฒด
- ํฌํจ๋ ํ๋(๊ตฌ์กฐ์ฒด ์์ ํฌํจ๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ ํ๋๋ช ์๋ต)
type User struct {
Name string
ID string
}
type VIPInfo struct {
User // ํ๋๋ช
์๋ต
Level int
Price int
}
vip := VIPInfo{ User{ "๋ฐ์ง์", "jisang"}, 3, 250 }
fmt.Printf("Name of VIP: %v", vip.Name) // ๊ตฌ์กฐ์ฒด ์์ ํฌํจ๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ ํ๋๋ช
์๋ต
ํฌ์ธํฐ
- ํฌ์ธํฐ ์ฐ์ฐ(+, -) ๋ถ๊ฐ
- ๊ธฐ๋ณธ์ ์ผ๋ก GC ์ง์
- new ์ฌ์ฉ
p1 := &Data{3, 4} // Data ์ธ์คํด์ค ์์ฑ ๋ฐ p1 ํฌ์ธํฐ ์ฐธ์กฐ, ๋งค๊ฐ๋ณ์ ์ด๊ธฐํ ๊ฐ๋ฅ
var p2 = new(Data) // new ํค์๋ ์ฌ์ฉ, ๋งค๊ฐ๋ณ์ ์ด๊ธฐํ ๋ถ๊ฐ๋ฅ
์ฉ์ด | ์ค๋ช |
& | ๋ณ์์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ด (address-of operator) |
* | ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ์ฝ์/๋ณ๊ฒฝ (dereference operator) |
*T | ํ์ T์ ๋ํ ํฌ์ธํฐ |
ํจํค์ง
- fmt ํจํค์ง(formatted I/O)
- fmt::Print(), fmt::Println(), fmt::Printf()
- ํ์ ์ง์ ์ %v: ์๋ ํ์ ์ถ๋ก , %T: ๋ฐ์ดํฐ ํ์ ์ถ๋ ฅ, %t: ๋ถ๋ฆฌ์ธ์ true/false๋ก ์ถ๋ ฅ
- ํจํค์ง ๋ณ์นญ
import (
"text/template"
"html/template" // ๊ฐ์ ์ด๋ฆ์ ํจํค์ง
)
import (
"text/template"
htemplate "html/template" // ๋ณ์นญ: htemplate
)
template.New("foo").Parse(`{{define "T"}}Hello`)
htemplate.New("foo").Parse(`{{define "T"}}Hello`)
- Go ๋ชจ๋
- Go ํจํค์ง๋ฅผ ๋ชจ์๋์ Go ํ๋ก์ ํธ ๋จ์
- Go 1.16๋ฒ์ ๋ถํฐ Go ๋ชจ๋ ์ฌ์ฉ์ด ๊ธฐ๋ณธ์ด ๋์(๋ชจ๋ Go ์ฝ๋๋ Go ๋ชจ๋ ์๋ ์์ด์ผ ํจ)
- go.mod ํ์ผ์ ํตํด Go ๋ฒ์ , ํ์ํ ์ธ๋ถ ํจํค์ง ๋ช ์
- go mod init(์ด๊ธฐํ), go mod tidy(ํจํค์ง ๋ค์ด๋ก๋)
- go.sumํ์ผ: ํจํค์ง ์์กฐ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๊ธฐ ์ํ ์ฒดํฌ์ฌ(checksum) ๊ฒฐ๊ณผ
- ํจํค์ง ์ธ๋ถ ๊ณต๊ฐ
- ํจํค์ง ์ ์ญ์ผ๋ก ์ ์ธ๋ ์ฒซ ๊ธ์๊ฐ ๋๋ฌธ์๋ก ์์๋๋ ๋ชจ๋ ๋ณ์, ์์, ํ์ , ํจ์๋ ์ธ๋ถ๋ก ๊ณต๊ฐ
- ํจํค์ง ์ด๊ธฐํ
- ํจํค์ง๋ฅผ ์ํฌํธํ๋ฉด ์ปดํ์ผ๋ฌ๋ ํจํค์ง ๋ด ์ ์ญ๋ณ์๋ฅผ ์ด๊ธฐํ ํจ
- ํจํค์ง์ init() ํจ์๊ฐ ์๋ค๋ฉด ํธ์ถํด ํจํค์ง๋ฅผ ์ด๊ธฐํ
- init()ํจ์๋ ๋ฐ๋์ ์ ๋ ฅ ๋งค๊ฐ๋ณ์๊ฐ ์๊ณ ๋ฐํ๊ฐ๋ ์๋ ํจ์์ฌ์ผ ํจ
๐ก ํจํค์ง A๊ฐ ๋ค๋ฅธ ํจํค์ง B๋ฅผ importํ๋ ๊ฒฝ์ฐ:
ํจํค์ง B์ ์ ์ญ ๋ณ์ ์ ์ธ → init() ํธ์ถ๊ทธ ๋ค์์ ํจํค์ง A์ ์ ์ญ ๋ณ์ ์ ์ธ → init() ํธ์ถ
์ฆ, ์์กด์ฑ์ด ๊น์ ์ชฝ์ด ๋จผ์ ์ด๊ธฐํ๋จ.
// ์์
// a.go
package a
import "fmt"
var A = initA()
func initA() int {
fmt.Println("a.go: ์ ์ญ ๋ณ์ A ์ด๊ธฐํ")
return 1
}
func init() {
fmt.Println("a.go: init ํจ์ ํธ์ถ")
}
// main.go
package main
import (
"fmt"
_ "yourmodule/a" // ๊ฐ์ import (init ์คํ๋ง ์ํ ๋)(๋ฐ์ค _์ ์ด์ฉํด์ init() ํจ์๋ง ํธ์ถ)
)
func main() {
fmt.Println("main ์คํ")
}
a.go: ์ ์ญ ๋ณ์ A ์ด๊ธฐํ
a.go: init ํจ์ ํธ์ถ
main ์คํ
๋ฌธ์์ด
- ๊ธฐ๋ณธ
- ๋ฌธ์์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ → ๋ฌธ์์ด์ ๋ถ๋ณ์ด๊ณ ๊ฐ ํ์ ์ด๋ฏ๋ก ํจ์ ์ธ์๋ก ๋๊ธฐ๋ฉด ๋ณต์ฌ๋จ
- ๋ฌธ์์ด ์ํ
// byte ๋จ์ ์ํ
for i := 0; i < len(s); i++ {
fmt.Printf("%c ", s[i]) // ํ๊ธ ๋ฑ ์ ๋์ฝ๋ ๊นจ์ง
}
// rune ๋จ์ ์ํ(์ ์ ํ๊ธ์ฒ๋ฆฌ)
for i, r := range s {
fmt.Printf("index: %d, rune: %c\\n", i, r)
}
- ๋ฌธ์์ด ์ฃผ์ ํจ์(strings ํจํค๊ธฐ)
import "strings"
strings.HasPrefix(s, "pre") // ์ ๋์ฌ ํ์ธ
strings.HasSuffix(s, "fix") // ์ ๋ฏธ์ฌ ํ์ธ
strings.Contains(s, "lo") // ํฌํจ ์ฌ๋ถ
strings.ToUpper(s) // ๋๋ฌธ์ ๋ณํ
strings.ToLower(s) // ์๋ฌธ์ ๋ณํ
strings.TrimSpace(s) // ๊ณต๋ฐฑ ์ ๊ฑฐ
strings.Split(s, ",") // ๋ฌธ์์ด ๋ถํ
strings.Join([]string{"a", "b"}, "-") // "a-b"
'ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > Go & Rust' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Go] Mordern Go ๊ธฐ๋ณธ2(ํจ์, ์ธํฐํ์ด์ค, ๋ฉ์๋, ์๋ฌ) (2) | 2025.05.21 |
---|---|
[Go] Golang ๊ธฐ๋ณธ ์๊ฐ(ํ์ , ๋ณ์, ํจ์, ๋ฌธ๋ฒ) (1) | 2023.04.16 |
๋๊ธ