[go] sync 패키지의 map 기능

Go 언어에서 map은 여러 고루틴이 동시에 접근할 때 안전하지 않을 수 있습니다. 이 문제를 해결하기 위해 Go 표준 라이브러리의 sync 패키지를 사용할 수 있습니다. 이번 글에서는 sync 패키지를 사용하여 안전하게 map을 관리하는 방법에 대해 알아봅니다.

Map의 안전한 동시 접근 문제

map은 여러 고루틴에서 동시에 접근할 때 데이터 무결성이 위협받을 수 있습니다. 예를 들어, 하나의 고루틴이 map을 수정하는 중이고 동시에 다른 고루틴이 해당 map을 읽는다면 예상치 못한 결과가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 sync 패키지에서 제공하는 Map 타입을 사용할 수 있습니다.

sync.Map 사용하기

sync.Map은 여러 고루틴이 안전하게 map을 읽고 쓸 수 있도록 해주는 타입입니다. 아래는 sync.Map을 사용하는 간단한 예제 코드입니다.

package main

import (
	"fmt"
	"sync"
)

func main() {
	var m sync.Map

	m.Store("key", "value")

	val, ok := m.Load("key")
	if ok {
		fmt.Println(val)
	}
}

sync.MapStore 메서드로 값을 저장하고, Load 메서드로 값을 읽어올 수 있습니다. Load 메서드는 두 개의 반환 값을 가지는데, 첫 번째 값은 key에 대응하는 값이고, 두 번째 값은 해당 key가 존재하는지 여부를 나타내는 bool 값입니다.

결론

map을 안전하게 동시에 접근하고자 할 때는 sync.Map을 사용하는 것이 좋습니다. 이를 통해 고루틴 간의 안전한 데이터 공유가 가능해지며, 이로인해 프로그램의 안정성과 신뢰성을 확보할 수 있습니다.

sync.Map에 대한 더 자세한 정보는 공식 Go 언어 문서에서 확인할 수 있습니다.