• Go 따라해보자 - 기초편2

    2018. 3. 29. 16:45

    by. 위지원

    http://go-tour-kr.appspot.com/#1 를 보고 따라한 내용

    출처: http://weejw.tistory.com/213 [위지원의 블로그]

    http://go-tour-kr.appspot.com/#25를 보고 따라한 내용



    1) 구조체

    오 go언어는 구조체도 있네요. 아래와 같이 구조체를 선언할 수 있습니다. 구조체 변수의 접근은 dot(.)으로 할 수 있습니다.



    2) 포인터

    포인터가 있긴하지만 포인터 연산이 불가능합니다.



    3) 구조체 리터럴(Literals)

    필드와 값을 나열해서 구조체를 새로 할당하는 방법



    3) new 함수

    new(T)하면 모든 필드가 zero value(숫자에선 0 참조타입에선 nill)인 T타입의 '포인터'를 반환한다.

    아래 방법 말고도 var t *T=new(T)도 가능하다.



    4) 슬라이스

    슬라이스는 배열의 값을 말하는 것으로, 예를 들면 아래 그림에서 []int면 int타입을 가지는 요소의 슬라이스를 뜻한다.



    아래 그림처럼 인덱스를 정해주면 자를 수 있다.



    make 함수를 이용하여 0을 할당한 배열을 생성할 수 있다. 

    첫번째 매개변수는 생성할 슬라이스 타입

    두번째는 길이

    세번째는 capacity이다.    



    비어있는 배열을 생성하게 되면 nil 슬라이스가 생긴다. (max len,size =0)



    range를 이용하여 순회할 수 있습니다. 파이썬이 생각나는군용...(*-v-*) 파이썬과 비슷하게 언더바를 사용해서 값을 무시할수도 있습니다.(파이썬도 무시하는건가..?)

    첫번째 return값은 인덱스

    두번째 return값은 value입니다.



    5)Map

    map을 생성할때 주의할점은 반드시 make함수를 이용해서 생성을 해야한다는 것입니다. 그렇지 않으면 값을 할당할 수 없기 때문입니다.



    구조체 리터럴과 마찬가지로 값을 할당할 수 있습니다. 반드시 key를 지정한 상태로 value와 함께 넘겨주어야 합니다.

    10, 14 line의 Vertex를 생략해도 됩니다. 단 가장 상위의 타입이 타입명일때



    map이름[key값]으로 접근이 가능하고 delete와 map[key]를 통해서 값의 존재 여부를 확인할 수 있습니다.



    6) 클로저

    내부함수가 외부함수의 context에 접근할 수 있는 것



    7) switch case문

    특이점은 break;가 자동으로 된다는 것!! switch 다음에 조건절을 생략하면 'switch true'와 같은 역할




    8) 메서드

    Go에는 class가 없다. 대신 아래처럼 메서드를 구조체와 함께 사용할 수 있다. 이 외에도 그냥 아무타입이나 가져다 넣을 수 있다. 대신 다른패키지에 있는 타입이나 기본 타입들에 메서드를 붙이는것은 불가능 하다.


    아래에 보면 포인터형으로 사용하고 있는데 이유는

    1) 메서드가 호출 될 때마다 값이 복사되는 것을 방지

    2) 포인터가 가르키는 값을 수정하기 위해


    func(method receiver)



    9) 인터페이스

    메서드의 집합으로 정의할 수 있습니다.



    a=v 구문은 아래와 같은 에러를 발생합니다.



    17line에 있는



    10) 에러

    에러는 아래와 같이 표시가 가능하다.





    '2018년 > Go' 카테고리의 다른 글

    Go 따라해보자 - 기초편  (0) 2018.03.26
    Go 설치해보자  (0) 2018.03.26

    대화의 장 💬