Go Tour
์ฌ๋ผ์ด์ค
โข
์ฌ๋ผ์ด์ค๋ ๋ฐฐ์ด์ ๊ฐ์ ๊ฐ๋ฅดํค๋ฉฐ, []T ๋ก ๋ง๋ค ์ ์๋ค.
import "fmt"
func main () {
p := []int{1,2,3,4,5}
fmt.Println(p)
fmt.Println("p[0:3] == ", p[0:3])
fmt.Println("p[:3] == ", p[:3])
fmt.Println("p[2:] == ",p[2:])
}
Go
๋ณต์ฌ
โข
make ํจ์๋ก ์ฌ๋ผ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
โข
len ๋ ์ฌ๋ผ์ด์ค ๊ธธ์ด, cap ๋ ์ฌ๋ผ์ด์ค์ ์ ์ฅ ๊ฐ๋ฅํ ์ต๋ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค
import "fmt"
func main () {
p := make([]int, 5) // len = 5, cap = 5
fmt.Println("p == ", p)
fmt.Println("len(p) == ", len(p))
fmt.Println("cap(p) == ", cap(p))
q := make([]int, 0, 5) // len = 0, cap = 5
fmt.Println("q == ", q)
fmt.Println("q[:cap(q)] == ", q[:cap(q)])
fmt.Println("q[1:] == ", q[1:])
var z []int // len = 0, cap = 0
fmt.Println("z == ", z)
fmt.Println("len(z) == ", len(z))
fmt.Println("cap(z) == ", cap(z))
}
Go
๋ณต์ฌ
โข
for ๋ฌธ์์ range ํจ์๋ฅผ ํตํด ์ฌ๋ผ์ด์ค๋ ๋งต์ ์ดํฐ๋ ์ดํธ ํ ์ ์๋ค
import "fmt"
func main () {
p := []int {2,4,6,8,10,12}
for i, v := range p {
fmt.Println("index == ", i)
fmt.Println("value == ", value)
}
for i := range p {
fmt.Println("index == ", i)
}
for _, v := range p {
fmt.Println("value == ", v)
}
}
Go
๋ณต์ฌ
๋งต(Map)
โข
Map ์ ํค๋ฅผ ์ง์ ํ์ฌ ํค:๋ฒจ๋ฅ ํํ๋ก ์ ์ฅํ ์ ์๋ค
โข
๋งต์ ์ฌ์ฉํ๊ธฐ์ ์ ๋ฐ๋์ make ๋ฅผ ๋ช
์ํด์ค์ผํ๋ค.
type Vertax struct {
Lat float64
Lng float64
}
var m map[string]Vertax
func main () {
m = make(map[string]Vertax)
m["Seoul"] = Vertax {37.541, 126.986}
fmt.Println("m == ", m)
fmt.Println("m['Seoul'] == ", m["Seoul"])
}
Go
๋ณต์ฌ
โข
๋ง์ฝ ๋งต์ ํค๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ, ํ์
์ ๋ง๋ zero value ๊ฐ ๋๋ค
โข
delete(map, key) ๋ก ์ญ์ ํ ์ ์๋ค
import "fmt"
type Vertax struct {
Lat float64
Lng float64
}
var m = map[string]Vertax {
"Seoul": {
37.541, 126.986,
},
"Busan": {
35.06, 129.0203,
},
}
func main () {
fmt.Println(m)
fmt.Println(m["Seoul"])
m["Seoul"] = Vertax{37.33, 126.5815}
fmt.Println(m["Seoul"])
delete(m, "Seoul")
fmt.Println(m)
v, ok := m["Seoul"]
fmt.Println(ok)
fmt.Println(v)
}
Go
๋ณต์ฌ
ํจ์
โข
ํจ์๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ค
import "fmt"
func main () {
hap := func(x int, y int) int {
return x + y
}
fmt.Println(hap(1,2))
}
Go
๋ณต์ฌ
โข
ํด๋ก์
import "fmt"
func adder () func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main () {
a, b := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(
a(i + 1),
b(i * 2),
)
}
}
Go
๋ณต์ฌ
โข
A Tour of Go 44
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
i, j := 0, 1
return func () int {
sum := i
i, j = j, i + j
return sum
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
Go
๋ณต์ฌ
์ค์์น
โข
๋ค๋ฅธ ์ธ์ด์ Switch ์ ๋์ผํ ๊ธฐ๋ฅ์ ํ์ง๋ง, case๋ฌธ์ ์ฝ๋ ์คํ์ด ๋๋๋ฉด ์๋์ผ๋ก break ํ๋๊ฒ ๋ค๋ฅด๋ค
โข
์ค์์น๋ ์์์๋ถํฐ ์๋๋ก ์ผ์ด์ค๋ฅผ ์ฐพ๋๋ค
โข
์ค์์น์์ ์กฐ๊ฑด์ ์๋ตํ๋ฉด switch true ์ ๋์ผํ ์ํ์ ํ๋ค
โฆ
if-then-else ๊ฐ ๊ธธ์ด์ง ๊ฒฝ์ฐ, ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊น๋ํด์ง ์ ์๋ค
import (
"fmt"
"runtime"
)
func main () {
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("Mac OS")
case "linux":
fmt.Println("linux")
default:
fmt.Println(os)
}
}
Go
๋ณต์ฌ
๋ฉ์๋
โข
๊ณ ์๋ ํด๋์ค๊ฐ ์์ง๋ง, ๋ฉ์๋๋ฅผ ๊ตฌ์กฐ์ฒด์ ๋ถํ์ ์ฌ์ฉํ ์ ์๋ค
โข
๊ตฌ์กฐ์ฒด ๋ฟ๋ง ์๋๋ผ ์ด๋ ํ ํ์
์๋ ๋ฉ์๋๋ฅผ ๋ถํ ์ ์๋ค
โฆ
๋ค๋ฅธ ํจํค์ง์ ์๋ ํ์
์ด๋ ๊ธฐ๋ณธ ํ์
์๋ ๋ถํ ์ ์๋ค
import "fmt"
type Vertax struct {
Lat, Lng float64
}
func (v *Vertax) toString() string {
return fmt.Sprintf("%f / %f", v.Lat, v.Lng)
}
func main () {
v := Vertax{23, 25}
fmt.Println(v.toString())
}
Go
๋ณต์ฌ
์ธํฐํ์ด์ค
import "fmt"
type MyInterface interface {
Abs() float64
}
func main () {
var a MyInterface
v := Vertax{10, 15}
a = v
fmt.Println(a.Abs())
a = MyFloat(5)
fmt.Println(a.Abs())
}
type MyFloat float64
func (m MyFloat) Abs() float64 {
if m < 0 {
return float64(-m)
}
return float64(m)
}
type Vertax struct {
X, Y float64
}
func (v Vertax) Abs() float64 {
return v.X + v.Y
}
Go
๋ณต์ฌ
์๋ฌ
import (
"fmt"
"time"
)
type CustomError struct {
When time.Time
What string
}
func (e *CustomError) Error() string {
return fmt.Sprintf("at %v, %s", e.When, e.What)
}
func run() error {
return &CustomError{time.Now(), "Custom Error Test"}
}
func main () {
err := run()
if (err != nil) {
fmt.Println(err)
}
}
Go
๋ณต์ฌ
๊ณ ๋ฃจํด๊ณผ ์ฑ๋
import "fmt"
func fibonacci (n int, c chan int) {
x, y := 0, 1
for i := 0; i < n; i++ {
c <- x
y, x = x, x + y
}
close(c)
}
func main () {
c := make (chan int, 15)
go fibonacci(cap(c), c)
for r := range c {
fmt.Println(r)
}
}
Go
๋ณต์ฌ
โข
select ๋ฅผ ์ด์ฉํ๋ฉด ๋ค์์ ์ฑ๋๋ก ๋ถํฐ ์์ ์ ์ฑ๋๋ณ๋ก ๋ค๋ฅธ ๋์์ ํ ์ ์๋ค
import "fmt"
func fibonacci (c, q chan int) {
x, y := 0, 1
for {
select {
case c <- x:
x, y = y, x + y
case <- q:
fmt.Println("quit")
return
}
}
}
func main () {
c := make(chan int, 10)
q := make(chan int)
go func() {
for i := 0; i < cap(c); i++ {
fmt.Println(<-c)
}
q <- 0
}()
fibonacci(c, q)
}
Go
๋ณต์ฌ
import (
"time"
"fmt"
)
func main () {
tick := time.Tick(1000)
boom := time.After(5000)
for {
select {
case <- tick:
fmt.Println("Tick!!")
case <- boom:
fmt.Println("Boom!!")
return
default:
fmt.Println("...")
time.Sleep(500)
}
}
}
Go
๋ณต์ฌ



