update translation (#1)
This commit is contained in:
parent
98e4be8597
commit
6962e4ee60
34
README.md
34
README.md
|
@ -1,11 +1,11 @@
|
||||||
# uber-go-style-guide-kr
|
# uber-go-style-guide-kr
|
||||||
|
|
||||||
- Translated in Korean
|
- **Translated in Korean**
|
||||||
|
|
||||||
- First translation done with original doc on 17th of Oct, 2019 from [uber-go/guide](https://github.com/uber-go/guide)
|
- First translation done with original doc on 17th of Oct, 2019 from [uber-go/guide](https://github.com/uber-go/guide)
|
||||||
- Please feel free to fork and PR if you find any updates, issues or improvement.
|
- Please feel free to fork and PR if you find any updates, issues or improvement.
|
||||||
|
|
||||||
- 한국어 번역본
|
- **한국어 번역본**
|
||||||
- 초벌 번역은 [uber-go/guide](https://github.com/uber-go/guide)의 2019년 10월 17일 의 style.md 파일을 기반으로 완성되었음.
|
- 초벌 번역은 [uber-go/guide](https://github.com/uber-go/guide)의 2019년 10월 17일 의 style.md 파일을 기반으로 완성되었음.
|
||||||
- 기술 용어에 대한 과도한 한국어 번역은 지양하였으며, 특정 용어에 대한 한국어 번역을 했을 때에는 괄호로 원문의 단어를 살려두어 최대한 원문의 의도를 왜곡하지 않는 방향에서 번역 함.
|
- 기술 용어에 대한 과도한 한국어 번역은 지양하였으며, 특정 용어에 대한 한국어 번역을 했을 때에는 괄호로 원문의 단어를 살려두어 최대한 원문의 의도를 왜곡하지 않는 방향에서 번역 함.
|
||||||
|
|
||||||
|
@ -111,9 +111,9 @@ row before the </tbody></table> line.
|
||||||
|
|
||||||
## 소개 (Introduction)
|
## 소개 (Introduction)
|
||||||
|
|
||||||
스타일은 코드를 통제하는(govern) 관습이다. 이러한 관습(convention)은 소스파일 포맷팅 (e.g. gofmt)보다 더 많은 영역을 다루기(cover) 때문에, "스타일" 이라는 단어 자체가 약간 부적절 할 수 있다.
|
스타일은 코드를 통제하는(govern) 관습이다. 이러한 관습(convention)은 소스파일 포맷팅 (e.g. gofmt)보다 더 많은 영역에 대응하기 (cover) 때문에, "스타일" 이라는 단어 자체가 약간 부적절 할 수도 있다.
|
||||||
|
|
||||||
본 가이드의 목표는 Uber에서 Go 코드를 작성할 때 해야 할 것과 하지 말아야 할 것 (Dos and Don'ts)에 대하여 자세하게 설명하여 이러한 복잡성을 관리하는 것이다. 이런 규칙들은 엔지니어들이 Go 언어의 특성을(feature) 생산적으로개계속 사용할 수 있도록 코드 베이스를 관리가능하게 유지하기위해 존재한다.
|
본 가이드의 목표는 Uber에서 Go 코드를 작성할 때 해야 할 것과 하지 말아야 할 것 (Dos and Don'ts)에 대하여 자세하게 설명하여 프로그래밍 컨벤션의 복잡성을 관리하는 것이다. 이런 규칙들은 엔지니어들이 Go 언어의 특성을(feature) 생산적으로개계속 사용할 수 있도록 코드 베이스를 관리가능하게 유지하기위해 존재한다.
|
||||||
|
|
||||||
이 가이드는 원래 [Prashant Varanasi]와 [Simon Newton]이 동료들에게 Go를 사용하면서 개발속도 향상을 도모하기 위해 소개되었다. 또한, 수 년에 거쳐서 다른 사람들로부터의 피드백을 통해서 개정되 오고 있다.
|
이 가이드는 원래 [Prashant Varanasi]와 [Simon Newton]이 동료들에게 Go를 사용하면서 개발속도 향상을 도모하기 위해 소개되었다. 또한, 수 년에 거쳐서 다른 사람들로부터의 피드백을 통해서 개정되 오고 있다.
|
||||||
|
|
||||||
|
@ -139,12 +139,12 @@ row before the </tbody></table> line.
|
||||||
|
|
||||||
일반적으로 인터페이스에 대한 포인터는 거의 필요하지 않을 것이다. 여러분들은 인터페이스를 값(value)으로서 전달(passing)해야 할 것이며, 인터페이스에 대한 기본 데이터(underlying data)는 여전히 포인터가 될 수 있다.
|
일반적으로 인터페이스에 대한 포인터는 거의 필요하지 않을 것이다. 여러분들은 인터페이스를 값(value)으로서 전달(passing)해야 할 것이며, 인터페이스에 대한 기본 데이터(underlying data)는 여전히 포인터가 될 수 있다.
|
||||||
|
|
||||||
한 인터페이스는 두 가지 필드이다:
|
하나의 인터페이스는 두 가지 필드이다:
|
||||||
|
|
||||||
1. 타입-특정 정보(type-specific information)에 대한 포인터. 여러분들을 이것을 "타입"으로 간주할 수 있다.
|
1. 타입-특정 정보(type-specific information)에 대한 포인터. 여러분들을 이것을 "타입"으로 간주할 수 있다.
|
||||||
2. 데이터 포인터. 저장된 데이터가 포인터일 경우, 이것은 직접적으로 저장될 수 있다. 만약, 저장된 데이터가 값(value)인 경우, 값에 대한 포인터가 저장된다.
|
2. 데이터 포인터. 저장된 데이터가 포인터일 경우, 이것은 직접적으로 저장될 수 있다. 만약, 저장된 데이터가 값(value)인 경우, 값에 대한 포인터가 저장된다.
|
||||||
|
|
||||||
만약 여러분들이 기본 데이터(underlying data) 수정하기 위한 인터페이스 메서드 (interface methods)를 원한다면, 여러분들은 반드시 포인터를 사용해야 한다.
|
만약 여러분들이 기본 데이터(underlying data) 수정하기 위한 인터페이스 메서드 (interface methods)를 원한다면, 반드시 포인터를 사용해야 한다.
|
||||||
|
|
||||||
### 수신자(Receivers)와 인터페이스(Interfaces)
|
### 수신자(Receivers)와 인터페이스(Interfaces)
|
||||||
|
|
||||||
|
@ -301,7 +301,7 @@ func (m *SMap) Get(k string) string {
|
||||||
|
|
||||||
### 슬라이스 복사(Copy Slices)와 바운더리 에서의 맵(Maps at Boundaries)
|
### 슬라이스 복사(Copy Slices)와 바운더리 에서의 맵(Maps at Boundaries)
|
||||||
|
|
||||||
슬라이스(Slices)와 맵(maps)은 기본 데이터(underlying data)에 대한 포인터를 포함하고 있으므로 이들을 복사 해야 할 때의 시나리오에 대해서 주의할 필요가 있다.
|
슬라이스(Slices)와 맵(maps)은 기본 데이터(underlying data)에 대한 포인터를 포함하고 있으므로 이들을 복사 해야 할 때의 상황(scenarios)에 대해서 주의할 필요가 있다.
|
||||||
|
|
||||||
#### Slices와 Maps의 수신(receiving)
|
#### Slices와 Maps의 수신(receiving)
|
||||||
|
|
||||||
|
@ -371,7 +371,7 @@ func (s *Stats) Snapshot() map[string]int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// snapshot은 더이상 뮤텍스에 의해서 보호되지 않는다.
|
// snapshot은 더이상 뮤텍스에 의해서 보호되지 않는다.
|
||||||
// 따라서, snapshot에 대한 접근은 레이스 컨디션을 야기할 수 있다. (any access to the snapshot is racy.)
|
// 따라서, snapshot에 대한 접근은 레이스 컨디션을 야기할 수 있다.
|
||||||
snapshot := stats.Snapshot()
|
snapshot := stats.Snapshot()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -692,9 +692,9 @@ if err := foo.Open("foo"); err != nil {
|
||||||
|
|
||||||
호출이 실패할 경우 에러를 전파(propagating)하기 위한 3가지 주요 옵션이 있다:
|
호출이 실패할 경우 에러를 전파(propagating)하기 위한 3가지 주요 옵션이 있다:
|
||||||
|
|
||||||
- 추가적인 컨텍스트(additional context)가 없고 원래의 에러 타입을 유지하려는 경우 본래의 에러(original error)를 반환하라.
|
- 추가적인 컨텍스트(additional context)가 없고 원래의 에러 타입을 유지하려는 경우 본래의 에러(original error)를 반환.
|
||||||
- 에러 메시지가 더 많은 컨텍스트를 제공하면서 [`"pkg/errors".Cause`]가 원래 오류를 추출하는데 사용될 수 있도록 [`"pkg/errors".Wrap`]을 사용하여 컨텍스트를 추가하라.
|
- 에러 메시지가 더 많은 컨텍스트를 제공하면서 [`"pkg/errors".Cause`]가 원래 오류를 추출하는데 사용될 수 있도록 [`"pkg/errors".Wrap`]을 사용하여 컨텍스트를 추가.
|
||||||
- 호출자(callers)가 특정한 에러 케이스를(specific error case)를 감지하거나 다룰(handle) 필요가 없는 경우 [`fmt.Errorf`]를 사용하라.
|
- 호출자(callers)가 특정한 에러 케이스를(specific error case)를 감지하거나 다룰(handle) 필요가 없는 경우 [`fmt.Errorf`]를 사용.
|
||||||
|
|
||||||
"connection refused"와 같은 모호한 오류보다, 컨첵스트를 추가하는 것을 추천한다. 따라서 여러분들은 "call service foo: connection refused."와 같이 더욱 유용한 에러를 얻을 수 있을 것이다.
|
"connection refused"와 같은 모호한 오류보다, 컨첵스트를 추가하는 것을 추천한다. 따라서 여러분들은 "call service foo: connection refused."와 같이 더욱 유용한 에러를 얻을 수 있을 것이다.
|
||||||
|
|
||||||
|
@ -1113,7 +1113,7 @@ const ENV_VAR = "MY_ENV"
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</tbody></table>
|
</tbody></table>
|
||||||
|
|
||||||
그룹화를 사용하는 장소는 제한되어 있지 않다. 예를 들어, 함수 내에서 그룹화는 사용 가능 하다.
|
그룹화를 사용하는 장소는 제한되어 있지 않다. 예를 들어, 함수 내에서도 그룹화를 사용할 수 있다.
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
|
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
|
||||||
|
@ -1154,7 +1154,7 @@ func f() string {
|
||||||
- 표준 라이브러리 (Standard library)
|
- 표준 라이브러리 (Standard library)
|
||||||
- 그 외 모든 것 (Everything else)
|
- 그 외 모든 것 (Everything else)
|
||||||
|
|
||||||
이는 디폴트로 `goimports`에 의해서 적용되는 그룹들이다.
|
이는 기본(default)으로 `goimports`에 의해서 적용되는 그룹들이다.
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
|
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
|
||||||
|
@ -1193,7 +1193,7 @@ import (
|
||||||
- 대부분의 호출 지점(call sites)에서 named import를 사용하여 재명명(renamed)을 할 필요가 없다.
|
- 대부분의 호출 지점(call sites)에서 named import를 사용하여 재명명(renamed)을 할 필요가 없다.
|
||||||
- 짧고 간결하게. 이름(name)은 모든 호출 지점(call site)에서 식별됨을 상기하라.
|
- 짧고 간결하게. 이름(name)은 모든 호출 지점(call site)에서 식별됨을 상기하라.
|
||||||
- 복수형(plural) 사용 금지. 예를 들어, `net/urls` 가 아닌 `net/url`.
|
- 복수형(plural) 사용 금지. 예를 들어, `net/urls` 가 아닌 `net/url`.
|
||||||
- "common", "util", "shared", 또는 "lib"의 용어 사용 금지. 정보가 없는 나쁜 이름들임.
|
- "common", "util", "shared", 또는 "lib"의 용어 사용 금지. 정보가 없는 좋지 못한 이름임.
|
||||||
|
|
||||||
또한 [Package Names] 와 [Style guideline for Go packages]를 참고하기 바란다.
|
또한 [Package Names] 와 [Style guideline for Go packages]를 참고하기 바란다.
|
||||||
|
|
||||||
|
@ -1351,7 +1351,7 @@ for _, v := range data {
|
||||||
|
|
||||||
### 불필요한 else (Unnecessary Else)
|
### 불필요한 else (Unnecessary Else)
|
||||||
|
|
||||||
변수가 if의 두 가지 분기문에 의해서 설정될 경우, 이는 단일 `if`문 (simple if)으로 대체 될 수 있다.
|
변수가 if의 두 가지 분기문에 의해서 설정될 경우, 이는 단일 `if`문 (simple if)으로 대체 할 수 있다.
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
|
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
|
||||||
|
@ -1849,7 +1849,7 @@ sptr := &T{Name: "bar"}
|
||||||
|
|
||||||
### Printf외부의 문자열 형식 (Format Strings outside Printf)
|
### Printf외부의 문자열 형식 (Format Strings outside Printf)
|
||||||
|
|
||||||
문자열 리터럴 외부의 `Printf`-스타일의 함수에 대한 형식 문자열(format strings)을 선언하는 경우 `const`값 (const value)로 만들라.
|
문자열 리터럴 외부의 `Printf`-스타일의 함수에 대한 형식 문자열(format strings)을 선언하는 경우 `const`값 (const value)로 만들어라.
|
||||||
|
|
||||||
이는 `go vet`이 형식 문자열의 정적 분석(static analysis) 수행하는데 도움이 된다.
|
이는 `go vet`이 형식 문자열의 정적 분석(static analysis) 수행하는데 도움이 된다.
|
||||||
|
|
||||||
|
@ -2085,7 +2085,7 @@ db.Connect(
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</tbody></table>
|
</tbody></table>
|
||||||
|
|
||||||
또한 다음을 참고하라,
|
또한, 아래의 자료를 참고하기 바란다:
|
||||||
|
|
||||||
- [Self-referential functions and the design of options]
|
- [Self-referential functions and the design of options]
|
||||||
- [Functional options for friendly APIs]
|
- [Functional options for friendly APIs]
|
||||||
|
|
Loading…
Reference in New Issue