-
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