Go는 제 개인적인 경력에서 중요한 언어였습니다. 저는 Soundcast에서 CTO로 근무할 때 견고한 오디오 adServer와 SSP를 구축했습니다. Go는 네트워킹과 병렬성을 매우 쉽게 만들어 마치 부정행위를 하는 것처럼 느껴집니다. 정말 좋은 성능으로 이 모든 것이 우리가 해야 했던 작업에 완벽했습니다.
1부에서는 소프트웨어 구축 단계의 기본 사항을 공개했습니다. 이 기사에서는 내 마음 속에 특별한 자리를 차지하고 있는 언어의 도움을 받아 이 문제를 더욱 관련성있게 만들 것입니다. 실제로 소프트웨어 구축의 기본은 언어마다 유사하지만 각 언어 생태계에는 고유한 도구와 방식이 있습니다.
더 이상 고민하지 말고 특히 Go에 초점을 맞춰 살펴보겠습니다.
Google이 디자인한 Go는 단순성과 속도를 강조하는 독특한 구축 방식을 취합니다.
Go에는 빌드 명령이 함께 제공됩니다. 이 명령은 가져오기 경로로 명명된 패키지와 해당 종속성을 컴파일하지만 결과를 설치하지는 않습니다. 실행파일을 생성합니다.
예:
go build main.go
Go 컴파일러의 가장 유용한 기능 중 하나는 크로스 컴파일을 매우 쉽게 수행할 수 있다는 것입니다. 원하는 플랫폼을 대상으로 GOOS 및 GOARCH 환경 변수를 설정하기만 하면 됩니다.
예:
GOOS=windows GOARCH=amd64 go build main.go
이렇게 하면 amd64 아키텍처에서 Windows용 실행 파일이 생성됩니다.
Go 모드는 Go 1.11부터 도입되었기 때문에 조금 늦게 나왔지만 종속성 관리 시스템이 내장되어 있습니다. 그 전에는 모든 Go 프로젝트를 {$GOPATH}라는 머신의 전용 디렉터리에 배치해야 했습니다. 효과가 있었지만 이제 Go mod는 더 많은 유연성을 제공합니다. 정말 좋습니다!
Go의 모든 기능과 마찬가지로 사용법은 매우 간단합니다.
빌드 태그를 사용하여 조건부 컴파일을 추가할 수 있지만 제 생각에 가장 흥미로운 기능은 Go가 자동으로 빌드 출력을 캐시하여 후속 빌드 속도를 높이는 것입니다(물론 필요한 경우 캐시를 정리할 수 있습니다).
리소스 삽입
바이너리에 포함하려는 정적 파일이 있는 경우 //go:embed 지시어를 사용할 수 있습니다.
경종 감지
Go는 병렬 처리 측면에서 정말 훌륭합니다. 고루틴과 이들 사이의 통신을 위한 채널 시스템을 통해 개발자는 소프트웨어의 작업 부하를 여러 코어로 쉽게 분할할 수 있습니다. 그러나 일을 엉망으로 만들고 "경주"를 만드는 것도 쉽습니다.
두 개의 고루틴이 동일한 변수에 동시에 액세스하고 액세스 중 적어도 하나가 쓰기일 때 데이터 경합이 발생합니다. 자세한 내용은 Go 메모리 모델을 참조하세요.
Go 컴파일러가 이를 찾는 데 도움을 줄 수 있습니다!
경주 플래그를 사용하여 경합 상태를 감지하세요.
go build -race main.go
프로파일링 및 최적화
제가 Go에서 가장 좋아하는 점 중 하나는 성능입니다. 이 언어는 많은 노력을 들이지 않고도 견고한 결과를 제공합니다. 하지만 더 나아가고 싶다면 Go 생태계는 성능을 측정하고 코드를 최적화할 수 있는 정말 훌륭한 도구도 제공합니다.
자세한 내용을 다루지는 않겠지만, 주제에 대해 자세히 알아보고 싶다면 다음 글을 읽어보시기 바랍니다: https://www.practical-go-lessons.com/chap-34-benchmarks
사용자 정의 빌드 모드
예를 들어 소프트웨어가 아닌 플러그인이나 라이브러리를 구축하는 경우도 있습니다. Go 팀이 여러분의 뒤를 도와드립니다. Go에서는 빌드 모드를 정의하여 원하는 결과를 얻을 수 있습니다!
보시다시피 Go는 개발자가 Go 기술을 최대한 활용할 수 있도록 컴파일러와 생태계에 많은 기능을 제공합니다.
오늘은 여기까지입니다. 이번 주에 TypeScript의 구축 기술을 보여주는 또 다른 기사를 발표할 예정이므로 놓치지 않으려면 구독하거나 팔로우하세요!
그때까지 즐거운 코딩하세요!
위 내용은 건축 기술: Go에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!