• 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) 에러

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





    profile
    위지원

    데이터 엔지니어로 근무 중에 있으며 데이터와 관련된 일을 모두 좋아합니다!. 특히 ETL 부분에 관심이 가장 크며 데이터를 빛이나게 가공하는 일을 좋아한답니다 ✨

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

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