golang_network

command

go run main.go

  • compile and run

go build main.go

  • compile go

go clean main.go

  • cleaning object and cache

go mod init ${module_name}

  • 기본적으로 go는 GOROOT 에 있는 lib 만 쓰는데 나만의 커스텀을 쓰기 위해서 go.mod가 필요한데 이걸 만들때 사용함.

string formatt

  • %v : 구조체의 값을 출력한다.
  • %+ek. : 구조체의 필드이름과 값을 출력한다.
  • %#g : 호출된 함수이름과 구조체의 이름 같은 소스코드 정보까지 함께 출력한다.
  • %T : 타입을 출력한다.
  • %t : 불리언의 값을 true 혹은 false 문자열로 출력한다.
  • %d : Integer 값을 출력하기 위해서 사용한다. 10자리 크기의 정수를 포함한 문자열 형식을 가진다.
  • %b : 이진(바이너리)값을 출력한다.
  • %c : 정수에 해당하는 문자를 출력한다.
  • %x : Hex 인코딩 값을 출력한다.
  • %f : 부동 소숫 점 값을 출력한다.
  • %e : 과학적 표기법으로 출력한다.
  • %E : 과학적 표기법으로 출력한다. %e와 다른점은 e가 대문자인지 소문자인지
  • %s : 문자열을 출력할 때 사용한다. %d와 더불어 가장 많이 사용하는 옵션
  • %q : 문자열에 있는 쌍다움표를 그대로 출력한다.
  • %x : 먼저 값을 integer로 변환한 다음 16비트 문자열로 변환해서 출력한다.
  • %p : 포인터의 주소 값을 출력한다.
  • %nd : 포맷팅에 사용하는 숫자 n을 이용해서 출력 할 넓이를 설정할 수 있다. %6d인 경우 6칸의 넓이를 가진다. 채우지 못한 곳은 왼쪽 부터 스페이스 문자로 채워진다.
  • %-nd : %nd와 달리 왼쪽부터 데이터가 채워지고 나머지 공간을 스페이스 문자가 채운다.

Pacakge Export

  • 대문자 시작은 외부 접근 가능
  • 소문자 시작은 외부 접근 불가

new() vs make()

  • new() : 메모리를 할당하고 해당 타입의 기본값을 반환한다. (pointer)
  • make() : slice, map, channel 을 초기화하고 해당 타입의 참조값을 반환한다. (pointer)

Go Routine

  • go 키워드를 사용하여 함수를 실행하면 새로운 고루틴이 생성된다.
  • Go 런타임이 관리하는 Lightweight 논리적 (혹은 가상적) 쓰레드이다.
  • 고루틴은 비동기적으로(asynchronously) 함수루틴을 실행하므로, 여러 코드를 동시에(Concurrently) 실행하는데 사용된다.
  • 고루틴은 OS 쓰레드보다 훨씬 가볍게 비동기 Concurrent 처리를 구현하기 위하여 만든 것으로, 기본적으로 Go 런타임이 자체 관리한다.
  • Go 런타임 상에서 관리되는 작업단위인 여러 고루틴들은 종종 하나의 OS 쓰레드 1개로도 실행되곤 한다.
  • 고루틴들은 OS 쓰레드와 1 대 1로 대응되지 않고, Multiplexing으로 훨씬 적은 OS 쓰레드를 사용한다.
  • 고루틴은 동일한 주소 공간에서 실행되기 때문에 공유 메모리에 대한 동기화 문제가 발생할 수 있다.
  • 고루틴은 runtime.GOMAXPROCS() 함수를 통해 최대 프로세스 수를 설정할 수 있다. (기본값은 CPU 코어 수)
  • runtime.GOMAXPROCS(1) : 고루틴을 하나만 실행하도록 설정한다.
  • runtime.GOMAXPROCS(0) : CPU 코어 수만큼 고루틴을 실행하도록 설정한다.