주석

// This is a 주석

/* This is also a 주석 */


변수 선언

* const 변수명 자료형 = 블라블라

 - 상수

* var 변수명 자료형 = 블라블라

 - 여타 언어와 다르게 변수명과 자료형의 순서가 반대다. 우리나라에서 아반떼 10년 몰다가 일본이나 영국가서 오른쪽 좌석에 핸들 달린 용달차 운전하는 느낌.

* 변수명 := 블라블라

 - 자료형 생략할 때 사용

 - 사전에 기 선언된 변수는 이렇게 하면 에러 띄운다.


자료형

* 정수, 자연수: int, uint 8,16,32,64

 - uintprt: uint 포인터

 - byte = int8

 - rune = int32 = 유니코드

 - int, uint >= 32

 - string ~= 8bytes ~= int64 (??)

* 실수, 복소수: float 32,64, complex 64,128

* 부울: bool

* 구조체: struct

type 타입명 struct {

    멤버변수명 자료형

}

* 배열류: array, slice, map
/* array */
배열명 := [크기]자료형{ 값,값,값,값 }

/*
slice : 케잌(배열)을 조각내어 먹는 것 같은 느낌이다.
막상 해보니까 아닌 것 같다. 기본에다가 사리를 얹어먹는 느낌도 든다.
slice를 합쳐주고 붙여주고 늘려도 준다는 append와 copy는 이해될 때까지 만져봐야겠다.
*/
var 변수명 []자료형    // 빈 깡통으로 선언
변수명 := make([]자료형, slice길이, capacity)
// 또는
변수명 := make([]자료형, slice길이)    // capacity 생략 -> slice길이 = capacity

var 슬라이스명 []int = 배열명[1:4]    // 배열 일부를 가져올 때

/* map */
var map명 map[key자료형] value자료형

// 초기화되지 않은 null map은 값 입력이 안되므로 make로 초기화를 해야된다고 한다.

map명 = make(map[key자료형] value자료형)

map명["key값"] = value값

// 아래와 같이 리터럴로 초기화 할 경우 마지막에도 ","콤마를 붙여야 된다고 한다.
WTH := map[string] string{
        "A": "What",
        "B": "The",
        "C": "Hell",
}

* 자료형 확인

변수명.(type)

reflect.TypeOf(변수명)



함수 선언 / 호출

* 기본

 - variadic의 경우 함수 선언할 때, 점점점이 변수명과 자료형 사이에 들어가야 된다. @_@

 - 배열은 당연히 배열인데 ...을 붙여야 하는게 이해가 어렵다.

func 함수명(변수명 자료형) 반환자료형 {

    // 블라블라

    return [반환 변수명]

}

아무변수명 := 함수명(변수명)


/* 떼거리 변수들 (=variadic) */

func 함수명(변수명 ...자료형) 반환자료형 {

    // 블라블라

}

함수명(변수명, 변수명, 변수면, 변수면)

// 또는

변수명 := []int{변수들, 변수들들들}

함수명(배열명...)

* 클로저 ~= 함수로부터 계산되어 반환 받은 값

 - 함수 내부에 무기명/익명함수 형태로 사용할 수도 있고, 외부 함수로 선언해서 쓸 수도 있다.

 - 반환 받은 값은 계속 유지 또는 반복 실행 시 중첩된다.


연산자: C와 거의 같으므로 생략


조건문

* if 실행시, 병행 실행 가능한 기능이 있던데 당장 쓰지는 않을 것 같으니 생략

/* if */

if 조건 == 값 {

    // 블라블라

} else if 다른조건 == 다른값 {

    // 블라블라

} else {

    // 나머지 조건 블라블라

}


/* switch */

switch 변수명(조건으로 부여된 변수명?) {

case 변수값_1번:

    // 블라블라

case 변수값_2번, 변수값_3번 :

    // 블라블라

default:

    // 블라블라

}


순환문

* break, continue, goto 도 쓸 수 있다고 한다. 이건 나중에...

/* 기본 형식 */

for i := 0; i < 10; i++ {

fmt.Printf("%d 번 인디언 ", i)

}


/* while이 없다. */

for {

    fmt.Println("무한 루프데쓰요. ㅋ ")

}


/* range 사용 - 예를 들어 map을 쓰면 아래와 같이 한다. */

WTH := map[string] string{

        "A": "What",
        "B": "The",
        "C": "Hell",
}

for idx, value := range WTH {

        fmt.Println(idx, value)

}


공부 좀 더하고 수정해야겠다.



끝.