Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update(docs): zero value mutaxes are valid #17

Merged
merged 1 commit into from
Dec 21, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ Effective Go에 [Pointers vs. Values]에 대한 좋은 글이 있으니 참고

### 제로 값 뮤텍스(Zero-value Mutexes)는 유효하다

`sync.Mutex``sync.RWMutex` 의 제로 값은 유효하므로, 거의 대부분의 경우 뮤텍스에 대한 포인터는 필요로 하지 않는다.
`sync.Mutex``sync.RWMutex`의 제로 값(zero-value)은 유효하므로 뮤텍스에 대한 포인터가 거의 필요하지 않다.

<table>
<thead><tr><th>Bad</th><th>Good</th></tr></thead>
Expand All @@ -311,9 +311,8 @@ mu.Lock()
</td></tr>
</tbody></table>

포인터로 구조체를 사용할 경우, 뮤텍스는 포인터가 아닌 필드(non-pointer field)가 될 수 있다.

구조체의 필드를 보호하기 위해 뮤텍스를 사용한 수출되지 않는 구조체(unexported structs)는 뮤텍스를 포함(embed) 할 수 있다.
포인터로 구조체를 사용하는 경우, 뮤텍스는 포인터가 아닌 필드여야 한다.
구조체를 내보내지 않는 경우라도(not exported), 구조체에 뮤텍스를 포함하지 마십시오.

<table>
<tbody>
Expand Down Expand Up @@ -367,8 +366,8 @@ func (m *SMap) Get(k string) string {

</tr>
<tr>
<td>뮤텍스 인터페이스를 구현해야 하는 전용 타입(private type) 혹은 타입에 포함됨. </td>
<td>수출되는 타입(exported type)에 대해서는 전용 필드 (private field)를 사용함.</td>
<td>`Mutex` 필드와 `Lock` 및 `Unlock` 메서드는 의도하지 않게, `SMap`의 Exported API의 일부이다. </td>
<td>뮤텍스와 해당 메서드는 호출자에게는 숨겨진 SMap의 구현 세부 정보다.</td>
</tr>

</tbody></table>
Expand Down