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
가 필요한데 이걸 만들때 사용함.
- %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와 달리 왼쪽부터 데이터가 채워지고 나머지 공간을 스페이스 문자가 채운다.
- 대문자 시작은 외부 접근 가능
- 소문자 시작은 외부 접근 불가
new()
: 메모리를 할당하고 해당 타입의 기본값을 반환한다. (pointer)make()
: slice, map, channel 을 초기화하고 해당 타입의 참조값을 반환한다. (pointer)
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 코어 수만큼 고루틴을 실행하도록 설정한다.