Hacktoberfest 기간 동안 Mattermost의 사람들과 함께한 놀라운 경험 이후(그들의 사려 깊은 선물도 잊지 마세요!), 저는 11월에 다시 한번 그들과 함께 가기로 결정했습니다.
이번에는 서버가 Go로 작성되었기 때문에 말 그대로 그들과 함께 "가는" 것입니다(상처받은 유머 감각에 대해 사과드립니다). Hacktoberfest 동안 저는 React Native를 사용하여 TypeScript로 작성된 모바일 앱 작업을 했습니다. 그런데 이번에 받은 문제는 서버 관련 문제였고, Go 프로젝트를 진행하는 것은 이번이 처음이었습니다.
Go에 대한 사전 지식이 전혀 없었기 때문에 Go를 먼저 배우는 것이 올바른 결정이었습니다. 다행히 Go는 손에 넣기가 매우 쉬웠습니다. 빠르고 안정적인 소프트웨어를 제작할 수 있으면서도 그 단순함에 진심으로 놀랐습니다. 기본을 이해하는 데는 한 시간짜리 비디오가 전부였고, Rust ?를 배울 때보다 훨씬 덜 쉬게 되었습니다.
우선 이 사랑스럽고 멍청한 땅다람쥐를 감상하는 시간을 갖고 싶습니다.
그렇지만 저는 Go가 정적이고 강력한 형식이라는 점을 좋아합니다. 이것은 제가 최근 친구와 논의한 내용입니다. 정적으로 및/또는 강력한 형식의 언어는 코드 디자인에 대해 조금 더 생각하면 되지만 엄청난 양의 모호성을 제거할 수 있습니다. 또한 Rust와 유사하게 Go 컴파일러는 가능한 경우 유형을 추론할 수 있으므로 추가 생각이 훨씬 더 간단해집니다.
어떤 사람들은 Go를 "현대적인 C"라고 부릅니다. 이제 그 이유를 알 수 있습니다. 성능이 매우 뛰어나고 C의 단순성을 갖추고 있습니다. 포인터를 사용하여 낮은 수준의 작업을 지원합니다. 하지만 C와 달리 인터페이스, 슬라이스, 맵 등과 같은 현대 언어에서 기대할 수 있는 기능이 함께 제공됩니다. 또 다른 흥미로운 기능은 병렬 실행을 처리하는 독특하고 간단한 모델인 goroutine입니다.
알고보니 정말 간단한 문제였기 때문에 Go를 배우는데 너무 몰두했습니다. 제가 해야 할 일은 단일 파일에 오류 처리를 구현하는 것뿐이었습니다.
이 문제에는 오류를 반환하거나 기록하는 것을 선호한다는 섹션이 편리하게 언급되어 있습니다. Mattermost의 개발자 문서를 잘 알고 있어서 오류 처리에 관한 섹션을 금방 찾았습니다.
제가 직면한 유일한 장애물은 사용할 로그 수준을 결정하는 것이었습니다. 문서에 언급되었지만 여전히 정의가 모호하다고 생각했습니다. 그러나 프로젝트 내에서 빠르게 검색한 결과 이러한 기능은 다른 곳에서는 항상 동일한 로그 수준을 사용한다는 것을 깨달았습니다. 이로써 나의 의심은 사라졌습니다.
제가 작업하고 있던 함수는 정적 HTML 페이지를 제공하므로 다음과 같이 오류가 발생할 때 적절한 HTTP 오류 코드가 반환되는지도 확인했습니다.
http.Error(w, err.Error(), http.StatusInternalServerError)
이게 다입니다! PR을 제출하고 Go를 처음 사용해봐서 처음에는 조금 걱정이 되었지만 괜찮았습니다. 사소한 수정 후에 PR이 병합되었습니다.
전반적으로 이 문제는 재미있고 쉽게 풀 수 있는 문제였습니다. 제가 지금까지 작업해 왔던 다른 문제들만큼 어렵지는 않았음에도 불구하고 선택하게 되어 기쁩니다. 나는 항상 새로운 언어를 배우는 것이 즐겁고 이것은 그에 대한 완벽한 변명이었습니다! 그리고 바로 사용할 수 있어서 정말 좋았어요.
위 내용은 Mattermost와 함께하세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!