Go 조건문, 반복문, 콜렉션 써보기
2019-02-03 13:22:01

조건문

if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

func main() {
a := 10

if a == 10 {
fmt.Println("a is 10")
}

b := 20

if b >= 5 {
fmt.Println("a는 5보다 크다")
} else if b >= 25 {
fmt.Println("a는 25보다 크다")
} else {
fmt.Println("???")
}
}

switch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import "fmt"

func main() {
var name string

c := 20

switch c {
case 1:
name = "none1"
case 2:
name = "none2"
case 3:
name = "none3"
case 4, 5:
name = "none4,5"
case 20:
name = "true"
default:
name = "false"
}

fmt.Println("name", name) // name, true
}

break가 업음.

반복문

심플하게 for문 하나

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main () {
for i := 0; i <= 5; i++ {
fmt.Println("i:", i)
}
}

break, continue도 잇음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import "fmt"

func main() {
sum := 0

for index := 0; index < 10; index++ {
if index%2 != 0 {
sum = sum + index
continue
} else if index == 10 {
break
}
}

fmt.Println("sum", sum) // 25
}

콜렉션

array

고정 배열

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main

import "fmt"

func main() {

var a [3]int // 배열 선언 방법. 초기값이 업는 배열의 크기를 정해줘야 한다. 그리고 자료형을 붙여준다.

fmt.Println(a) // 타입에 따라 초기 값은 [0 0 0]

a[0] = 1
a[1] = 2
a[2] = 3

fmt.Println(a) // [1 2 3]

var s [2]string

fmt.Println(s) // 비어 있는 배열 같지만 아님 [ ]

s[0] = "aa"
s[1] = "bb"

fmt.Println(s) // [aa bb]

var s2 = [...]string{"x", "y", "z"} // 초기 값을 줬을 시에 [...] 하면 초기 값의 크기 만큼 배열 크기 생성.

fmt.Println(s2) // [x y z]

// s2[3] = "xy" 당연히 크기를 넘어서 추가할 수가 업다.

/*
...으로 크기 자동으로 잡아줄 시 초기 값 업으면 에러임
var c = [...]int

c[0] = 1

fmt.Println(c)
*/
}

slice

동적 배열

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import "fmt"

func main() {
var sl []int // 슬라이스 선언 방법 배열과 같지만 크기만 비어두면 된다.

fmt.Println(sl) // []

if sl == nil { // 비어 있는 슬라이스는 == nil
fmt.Println("비어 있는 슬라이스")
}

if len(sl) == 0 { // 슬라이스나 배열의 길이는 len()함수로 알 수 있다.
fmt.Println("길이가 0인 비어 있는 슬라이스")
}

sl = append(sl, 7) // 슬라이스의 요소 추가 JS에서 .push()랑 같은 기능이다.

fmt.Println(sl) // [7]

sl = append(sl, 1, 3) // push와 마찬가지로 여러 개를 같이 추가할 수 있다.

fmt.Println(sl) // [7 1 3]

/*
Go 에서 부분 슬라이스 하는 법.

JS ex

let sli2 = [0,1,2,3]
sli2 = sli2.slice(0, 2)
*/

sli2 := []int{0, 1, 2, 3}
sli2 = sli2[0:2]
fmt.Println(sli2) // [0 1]

/*
슬라이스 복사 c++에서 memcopy였나 그런게 있었던 같다.
근데 아래처럼 그냥 직접 넣어도 별 차이는 업는데.. 뭔가 다른걸까?
*/

sli3 := []int{0, 1, 2, 3}
sli4 := make([]int, len(sli3), cap(sli3))
copy(sli4, sli3)
fmt.Println(sli3, sli4)
sli4 = sli3[0:2]
fmt.Println(sli4, sli3)

sli5 := []int{0, 1, 2, 3, 4}
sli6 := sli5
sli5 = append(sli5, 7)
fmt.Println(sli5, sli6)

/*
JS forEach 같은 거 사용.
*/

for index, elem := range sli5 {
fmt.Println(index, elem) // 0 0 -> 1 1 -> 2 2 ... 5 7
}

// index 업이 데이터만.

for _, elem := range sli5 {
fmt.Println(elem) // 0 -> 1 -> 2 .. 7
}
}

map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package main
import "fmt"

func main() {
var aMap map[int]string // vqr 변수명 map[key type]value type

if aMap == nil { // 처음 맵을 생성하면 nil 상태. 이 맵에는 아무 데이터를 쓸 수 업다.
fmt.Println("nil map")
}

aMap = make(map[int]string) // make로 초기화를 해줘야 데이터를 쓸 수 있다. 안 그러면 오류 남.

aMap[0] = "Go" // 추가나 갱신.
aMap[1] = "Node.js"

fmt.Println(aMap) // map[0:Go 1:Node.js]

fmt.Println(aMap[0]) // Go (키 값 읽기)

bMap := make(map[string]string)

bMap["a"] = "PHP"
bMap["b"] = "JAVA"
bMap["c"] = "null"

delete(bMap, "c") // 키 삭제.

fmt.Println(bMap) // map[a:PHP b:JAVA]

val, key := bMap["c"] // val에는 키에 대한 value, key는 있으면 true, 업으면 false

if !key { // 키가 존재하는 지 체크하는 방법.
fmt.Println("c is no exist")
fmt.Println(val) // ""
}

/*
for문을 이용한 map 출력.
당연히 순서는 보장되지 않는다

JS

for (var [key, value] of myMap) {
console.log(key + " = " + value);
}
*/

cMap := map[int]string{
0: "Express",
1: "Flask",
2: "Jin",
}

for key, val := range cMap {
fmt.Println(key, val)
}
}
Prev
2019-02-03 13:22:01
Next