일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Reflection
- magicsculpt
- nil
- 리플렉션
- 건프라
- 프라파손
- 터미널
- 바로코
- Go
- 패널라인
- Go 언어
- 이맥스
- 고양이책
- mf642cdw
- emacs
- driverless
- 양자역학
- 스플릿키보드
- go언어
- md600alpha
- 체리적축저소음
- Golang
- Griffiths
- 엘리스배열
- mistel md600 alpha
- 키보드
- 벤치마크
- 다이어트
- mopria
- 음각몰드
- Today
- Total
Meandering Trajectory
Go 패키지의 정체 본문
C는 몇몇 스크립팅 언어를 제외하면 프로그래머가 된 이후로 내가 사실상 유일하게 사용했던 언어다. 최근에 프로그래머로서의 삶을 시작했던 회사를 떠나게 됐다. 이직한 회사는 전혀 C를 사용하지 않는 회사다. 1
이직한 회사의 주요 개발 언어는 Go다. Go는 구글에서 개발한 언어로 이 언어가 지원하는 독특한 동시성 프로그래밍 기능인 고루틴 외에 유닉스의 아버지 켄 탐슨(Ken Thomson)과 벨연구소의 유닉스 개발팀의 일원인었던 랍 파이크(Rob Pike)가 직접 개발에 참여한 것으로 잘 알려져 있다.
일을 하려면 배워야 하니 리눅스에서 Go로 이것저것을 해 보다가 특이한 점을 발견했다. 빌드된 실행파일에 C 라이브러리(libc)나 POSIX 스레드 라이브러리(libpthred)와 같은 필수적인 것 이외에 링크된 다른 공유 라이브러리(shared library)가 없었다.
이것은 import한 패키지들이 전부 실행파일 안에 들어있다는 것을 의미했다. 그래서 난 Go 패키지의 정체에 대해 조사했다. 그 정체는 바로 다름아닌 정적 라이브러리 파일. 2
Go에서 import한 패키지는 정적 라이브러리에 포함되어 있었다. 이 얘기는 Go 패키지에서 사용된 패키지 내에 의존성을 갖는 모든 오브젝트 파일이 실행파일에 포함된다는 것을 의미한다. 예를들어 리눅스에서 io 패키지는 GOROOT 딕렉토리 내에 패키지 파일들을 모아둔 디렉토리에 다음과 같은 이름의 파일로 존재한다.
libio.a
그래서 Go로 만든 어지간한 규모의 프로그램의 실행파일은 크기가 메가바이트 단위를 훌쩍넘는다.
'컴퓨터 > GoLang' 카테고리의 다른 글
Go 채널 (0) | 2017.08.09 |
---|---|
Go: 리플렉션 #2 (0) | 2017.07.16 |
Go: 리플렉션 #1 (0) | 2017.07.15 |
Go 언어 - 벤치마크 (0) | 2017.07.08 |
Go 언어: 환경변수 설정 (0) | 2017.05.08 |