통계 위젯 (화이트)

291495
8881
2514306

저작권

Do not be afraid to fail. Be afraid not to try. Pain is temporary, suck is forever. Keep it small and simple.

카카오 광고







Learning Go Programming - go 언어 함 살펴보기 by 미친병아리

구글에서 만들었다고 합니다. 엄청난 분들 많이 계시니 뭐 그러려니 합니다.
간단한 샘플 하나 만들어 보고서는 좋네 어떠네 떠들어 볼 수는 없고, 틈 나는대로 좀 더 만들어 보기로 하지만 사실 그럴리는 없을 것 같습니다. 항상 나중에 시간나면 더 하자는 건, 못한다는 이야기니까요.

병렬 프로그래밍이나 멀티 쓰레딩이 필요한 경우 사용해보자, 요것만 잘 기억하고 있어야겠습니다.

대충 참고용 메모 스크랩



Learn Go Programming - Golang Tutorial for Beginners




구글에서 많이 사용하는 언어
python - 배우기 쉽지만 느림
java - 점점 복잡해지는 언어
c/c++ - 컴파일 타임이 너무 느림

멀티쓰레딩 프로그래밍이 쉬운 마땅한 언어가 없음, 그래서 하나 만들어야겠다 해서 만들었고 여기에 공감하는 사람들만 사용하는 것 같습니다. 2009년 11월에 구글에서 처음 발표된 후 2012년 3월에 정식 발표, 곧 10년이 되는데 인기도나 파급력은 아직은 크지 못한 것 같습니다.

Key features
- simplicity
- fast compile times
- garbage collected
- built-in concurrency
- compile to standalone binaries

Go는 명시하고 있지 않지만 단순함과 실용성을 지향하는 언어다. keyword가 25개밖에 되지 않고 문법 또한 간결해 입문이 쉬운 편이다.

Go는 GoRoutine(이하 고루틴)이라는 비동기 메커니즘을 제공한다. 이 비동기 메커니즘은 Erlang에서 영향을 받은 것으로 각각의 고루틴은 병렬로 동작하며 메시지 채널을 통해 값을 주고받는다. 고루틴을 사용하면 이벤트 처리, 병렬 프로그래밍 등이 간단해진다. 단, 병렬화된 고루틴의 동기화 문제는 프로그래머가 다뤄야 하며 동기화를 무시할 경우 프로그램이 비정상 종료될 수도 있다. 예를 들어 부모 루틴이 자식 루틴보다 먼저 끝나버리면 자식 루틴은 OS에 의해 메모리에서 강제로 사출되어 버린다. 그래도 동기화 방법은 기존 멀티스레드 응용프로그램에 비해 매우 간단한 편. 단순히 고루틴으로부터 반환값을 받는 코드를 메인 스레드에 추가하면 된다.

고루틴은 멀티스레드 메커니즘이지만 자체적인 스케줄러에 의해 관리되는 경량 스레드이며 OS에서 관리하는 경량 스레드보다 더 경량이다.[8] 따라서 고루틴은 CPU 코어수와 무관하게 수백, 수천의 고루틴을 작성해도 성능에 문제가 생기지 않는다. 이는 Erlang도 마찬가지.



Go 언어의 설계 지향점은 시스템 프로그래밍 언어였지만, 가비지 컬렉션의 지원이나 제네릭의 부재로 인해 박싱/언박싱이 불필요하게 많이 일어나는 등 C/C++을 대체할 수 있는 언어는 아니라는 것에 합의가 이루어지고 있는 상황이다. 

실제로 고성능 연산에 사용하기에는 C/C++에 비해 느리며, 저수준 시스템 개발에서는 가비지 컬렉션과 고루틴을 지원하기 위한 무거운 런타임 등으로 인해 사용이 불가능에 가깝다. 그런 이유로 대체로 개발 속도와 실행 속도, 병행성 사이의 적정 지점이 필요한 서버 애플리케이션 개발에 많이 사용되는 편.

현대 프로그래밍 언어 연구의 성과를 일체 무시한 언어 설계. 많은 종류의 프로그램 버그는 프로그래밍 언어 차원에서 원천적으로 차단될 수 있으며, 프로그래밍 언어 연구자들은 쓰기 쉬우면서도 최대한 많은 버그를 컴파일 시점에 잡을 수 있는 타입 시스템[11]을 만드는 데 많은 노력을 기울이고 있다. 하지만 이런 노력들이 무색하게 Go에서는 널 포인터나 안전하지 않은 타입 캐스팅의 유발 등 수많은 버그의 원천들에 전혀 손을 대지 않았다는 것.[12] 물론 단순성을 중시하는 Go의 철학상 최첨단 연구 성과들을 즉시 도입하는 데에는 무리가 있겠지만, 3~40년 전의 연구를 기반으로 최근 업계에서 당연하게 여겨지는 원칙들조차 전혀 고려하지 않았다는 것은 수많은 사람들에 의해 비판받은 바 있다.



컨테이너 기반 가상화 도구인 Docker, Kubernetes를 작성하는 데 사용된 언어로 유명하다.

그리고 전부를 Go로 만든 것은 아니지만, 당연히 구글을 비롯해 드롭박스나 클라우드플레어[16], 사운드클라우드, 넷플릭스 등에서도 기존의 기능들 중 상당수를 새롭게 Go를 이용해 바꿨다고 한다. 트위치도 많은 부분이 Go로 작성되었다고 하며, 언론사인 뉴욕 타임즈에서도 Gizmo라는 API 백엔드 서비스를 Go를 이용해 만들어 그 소스를 GitHub에 공개한 바 있고, SpaceX에서도 원격 측정 프로그램에서 Go를 사용한다고 한다. 또한 이더리움의 메인 클라이언트인 Geth 역시 Go로 작성되었고, Discord 또한 2020년 기준 최근 Rust로 교체 전까지는 서버와 클라이언트단 언어에 Golang을 채택하고 있었다. 즉 Go는 이미 시장에서 인정받은, 안정성이 검증된 언어라고 할 수 있다.


[에버키] Atlas S15 아틀라스 S15 EKP121S15, 본상품선택 BOSE QC35 II 2세대 노이즈 캔슬링 헤드폰, 블랙, QuietComfort 35 II Apple 2020년 맥북 프로 13 (M1 칩셋 8코어 CPU 8코어 GPU), 8GB, SSD 256GB, 스페이스 그레이 키크론 K6 무선 기계식키보드 WHITE LED 핫스왑 갈축, 혼합색상 마이크로소프트 모바일 마우스 KGY-00060, 포피레드 한성컴퓨터 39.62cm FHD DEX 포터블 HDR 멀티터치 휴대용 모니터, TFX156T
쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 수 있습니다.

카카오 광고