본문 바로가기
프로그래밍/golang

ultimate go (1)- syntax

by 나도한강뷰 2023. 1. 18.

문법

변수

  • 변수는 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