golang이 어쩔수 없이 쓰긴 하지만 마음에 들진 않는다 정도가 현재까지 결론
장점.
1. 멀티플랫폼 지원.
> 리눅스건 맥이건 윈도우건 GOOS= 라는 선언 하나 주면 아주 간단하게 크로스빌드가 된다.
2. 정적 바이너리 생성(기본 값)
> 양날의 검. 물론 hello world 하나 출력하는데 2MB 정도 먹고 몇가지 모듈들을 불러오면 기하급수적으로 늘지만
> 별다른 의존성 라이브러리 없이 독립적으로 빌드해서 실행가능한 단일 파일 하나만 복사하면 되는 건
> 임베디드에서 관리의 편의성을 제공함
3. 컴파일 언어
> node.js나 python과 같이 메모리 관리 불가능(?)한 실행환경이 아닌 컴파일 된 바이너리가 실행되는 것.
> 상업 프로그램, 배포환경, 임베디드라는 조건에서는 오히려 장점
4. net/http 등과 같은 고수준 라이브러리 제공
> c로도 curl 을 쓰면 REST 구현은 가능하지만 기본 라이브러리로 푸짐하게 제공하는 golang이 편하긴 하다.
단점.
1. 고정된 문법. 왜 내 마음대로 괄호 위치를 못 하냐고!!!
> c로는 warning 뜰만한 것도 죄다 error로 중단되고, 사용하지 않는 변수 있다고 빌드 에러
> 게다가 if () { 식으로 마치 python 처럼 indent가 문법에서 강요되는 느낌이라 드럽게 거부감이 가시질 않음)
2. IDE 가 약함. vi로 하려면 어우.. 다 외우지 않으면 더 귀찮..
> 방대한 라이브러리를 제공하는 신형 언어들의 득과 실이긴 하지만.. vscode에서 잘 지원되려나
> 외부 라이브러리 등에 대한 자동 완성을 얼마나 지원하는지 테스트는 해봐야 할 듯.
3. npm이나 pip 같은 중앙관리 되는 라이브러리 저장소 부재
> 언어의 발달이 빠른 시기라 라이브러리 버전 문제와 엮여 구버전 소스 빌드가 쉽지 않음
> 게다가 npm 처럼 얼마나 인기있고 숙성된 라이브러리인지 간접적으로 예측할 지표가 없어서
> 매번 검색해서 누군가의 소스를 써야 하는 불안함을 지울 수 없음
4. 문서 부족. tour of go 정도로는 어림도 없다.
> effective go 정도는 봐야 하지 않나 싶은데, 그런 문서를 찾는 것 자체가 어떻게 보면 접근성 측면에서 최악.
> 꼰대가 되서(?!) html 보단 pdf로 된 걸 받고 싶은데 그런 것도 없고
> 어떤 언어를 하나 배우는데 있어서 학습 커브 상승에 상당히 일조하는 부족한 문서
5. 자동화.
> 양면의 날이긴 하지만 자동화로 인해서 자동화 돌리기 위한 구조를 알아야 하는 문제가 발생
> 부족한 문서와 음의 시너지를 일으킴. go build . 으로 빌드는 가능하지만 도대체 어떻게 묶일지
> 빌드 하려면 기본적으로 패키지 이해를 해야 한다. 근데 문서들도 자세한 설명은 없다는게 함정.
결론
특정 환경에서 어쩔수 없는 선택지 라는 수준의 언어.
좋다 나쁘다를 떠나서 내 취향은 아니지만 웹 서비스를 구동하기에는 임베디드에서 이 만한 녀석은 없다는게 슬프다.
[링크 : https://covenant.tistory.com/204]
[링크 : https://simplear.tistory.com/8]