[go] Go 언어에서 포인터를 어떻게 사용하나요?
Go 언어에서 포인터를 사용하여 변수의 주소를 저장하고 해당 주소에서 값에 접근할 수 있습니다. 이를 통해 메모리를 효율적으로 활용할 수 있고, 함수로부터 여러 개의 값을 반환하는 등 다양한 용도로 활용할 수 있습니다.
포인터 변수 선언과 초기화
포인터 변수를 선언하기 위해서는 *
기호를 사용합니다. 변수를 선언하고 해당 변수의 주소를 저장하는 포인터를 초기화하는 예시는 다음과 같습니다.
package main
import "fmt"
func main() {
var num int = 10
var ptr *int
ptr = &num
fmt.Printf("num의 값: %d\n", num) // num의 값: 10
fmt.Printf("ptr이 가리키는 값: %d\n", *ptr) // ptr이 가리키는 값: 10
}
위의 예시에서 &
기호는 변수의 주소를 나타내며, *
기호는 포인터가 가리키는 값을 나타냅니다.
포인터를 활용한 함수
Go 언어에서 함수는 기본적으로 값에 의한 호출(Call by Value)이지만, 포인터를 이용하면 참조에 의한 호출(Call by Reference)로 동작하도록 만들 수 있습니다.
package main
import "fmt"
func main() {
var num int = 10
fmt.Printf("변경 전 num의 값: %d\n", num) // 변경 전 num의 값: 10
changeValue(&num)
fmt.Printf("변경 후 num의 값: %d\n", num) // 변경 후 num의 값: 20
}
func changeValue(ptr *int) {
*ptr = 20
}
위의 예시에서 changeValue
함수는 ptr *int
타입의 포인터를 매개변수로 받아 해당 포인터가 가리키는 값을 변경하고 있습니다.
포인터를 사용함으로써 메모리를 직접 조작할 수 있으므로 주의가 필요합니다. 잘못된 포인터 조작은 런타임 에러를 초래할 수 있으므로 신중하게 다루어야 합니다.
더 많은 정보는 Go 언어 공식 문서에서 확인할 수 있습니다.