문법
변수
- 변수는 2가지 명확한 표현이 있다.
- 메모리크기, 변수의 종류(int64, 64bit의 크기를 가진 숫자...)
- 메모리크기가 명확하지않은 표시(int)는 아키텍쳐에 의해서 변화하는데(64bit os-> int = int64)
- 초기화
- 0bit로 초기화 된다. false, nil, "", 0, 0i
- 문자열은 unit8의 2번사용
- 첫번째unit8은 배열을 가르키는 포인터, 두번째unit8은 문자열의 길이
- type casting을 지원하지않고 type conversion을 지원한다.
구조체
example struct {
flag bool
counter int16
pi float32
}
다른 타입들을 필드로 갖을 수 있다.
초기화는 0값으로 된다.
메모리 할당
- bool 1byte, int16 2byte, pi 4byte -> 도합 7byte
- 정렬과 패딩에 대해서 이해 필요
named type vs. anonymous type
e3 := struct { flag bool counter int16 pi float32 }{ flag: true, counter: 10, pi: 3.141592, } var e4 example e4 = e3
e3가 익명 구조체이기때문에 대입을 할 수 있고, 일반적으로는, e1 = example1(e3)와같이 변환을 해야지만 대입이 가능하다.
포인터
- 프로그램의 경계를 넘어서 값을 전달하는 것이 목적
- 대표적 경계: 함수
- 함수는 stack frame을 갖고, 그것은 함수의 메모리 역할을 수행
- 함수의 내부에서 선언된것은 stack frame에 저장되고, 그값은 경계를 넘지 못한다.
- 함수가 끝날때 stack frame을 정리하는데, return &ret도 그럼 stack frame이 정리될때 정리되지않나?
- return & 구문을 통해서, 스택이 아닌 힙메모리에 저장되게 되기때문에, 상관없어진다.
- 스택은 고루틴끼리 공유하지 않는다.
- 힙에 저장된다는 것은 가비지 컬렉션이 작동한다는 의미이다.(자세한 내용:https://docs.google.com/document/d/1wmjrocXIWTr1JxU-3EQBI6BK6KgtiFArkG47XK73xIQ/edit)
상수
- 상수에서 type을 명시할 수 도 있고 명시하지 않을 수 도 있다.
- 명시하지 않으면, 컴파일러가 암묵적으로 할당해준다.
'프로그래밍 > golang' 카테고리의 다른 글
ultimate in go (3)- data structure(method) (0) | 2023.01.23 |
---|---|
ultimate go (2)- data structure(배열/슬라이스) (0) | 2023.01.19 |
concurrency in go(4) (0) | 2023.01.06 |
concurrency in go(3) (0) | 2023.01.04 |
concurrency in go(2) (0) | 2023.01.03 |