Go의 함수 포인터

Musfirah Waseem 2023년6월20일
  1. Go에서 포인터 선언
  2. Go에서 포인터 초기화
  3. Go에서 초기화되지 않은 포인터 사용
  4. Go에서 포인터에 대해 속기 := 구문 사용
  5. Go에서 포인터를 사용하여 변수 값 변경
  6. Go에서 new() 함수를 사용하여 포인터 만들기
  7. Go에서 포인터를 인수로 함수에 전달
  8. 변수의 주소를 Go의 함수에 인수로 전달
  9. Go의 함수에서 포인터 반환
Go의 함수 포인터

Go 언어의 포인터는 다른 변수의 메모리 주소와 메모리가 위치한 지점을 저장하는 데 사용되는 특수 목적 변수입니다. 해당 메모리 위치에 저장된 값에도 액세스할 수 있습니다.

Go에서 포인터 선언

var pointer_name *Data_Type

함수 포인터에 사용되는 연산자

  1. * - 포인터 변수를 선언하는 역참조 연산자입니다. 역참조된 주소에 저장된 값은 이를 사용하여 액세스할 수 있습니다.
  2. & - 변수의 주소를 주는 주소 연산자입니다.

Go에서 포인터 초기화

package main

import "fmt"

func main() {

	var myVariable int = 2

	var myPointer *int

	myPointer = &myVariable

	fmt.Println("The value stored in 'myVariable' = ", myVariable)

	fmt.Println("The address of 'myVariable' = ", &myVariable)

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)
}

출력:

The value stored in 'myVariable' =  2
The address of 'myVariable' =  0xc000090020
The value stored in 'myPointer' =  0xc000090020.
The value pointed by 'myPointer' after dereferencing =  2

myPointer 변수에 저장된 값은 변수 myVariable 주소입니다.

Go에서 초기화되지 않은 포인터 사용

package main

import "fmt"

func main() {

	var myPointer *int

	fmt.Println("The value stored in 'myPointer' = ", myPointer)
}

출력:

The value stored in 'myPointer' =  <nil>

초기화되지 않은 포인터는 기본 nil 값을 가집니다.

Go에서 포인터에 대해 속기 := 구문 사용

package main

import "fmt"

func main() {

	myVariable := 2

	myPointer := &myVariable

	fmt.Println("The value stored in 'myVariable' = ", myVariable)

	fmt.Println("The address of 'myVariable' = ", &myVariable)

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)
}

출력:

The value stored in 'myVariable' =  2
The address of 'myVariable' =  0xc000090020
The value stored in 'myPointer' =  0xc000090020
The value pointed by 'myPointer' after dereferencing =  2

포인터 선언으로 데이터 유형을 지정한 경우 지정된 데이터 유형 변수의 메모리 주소를 처리하는 데만 포인터를 사용할 수 있습니다.

:= 연산자는 자동으로 데이터 유형을 인식하고 생성된 포인터가 동일한 데이터 유형을 처리할 수 있는지 확인합니다.

Go에서 포인터를 사용하여 변수 값 변경

package main

import "fmt"

func main() {

	myVariable := 2

	myPointer := &myVariable

	fmt.Println("The value stored in 'myVariable' = ", myVariable)

	fmt.Println("The address of 'myVariable' = ", &myVariable)

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)

	*myPointer = 5

	fmt.Println("The updated value pointed by 'myPointer' after dereferencing = ", *myPointer)

	fmt.Println("The updated value stored in 'myVariable' = ", myVariable)


}

출력:

The value stored in 'myVariable' =  2
The address of 'myVariable' =  0xc000016058
The value stored in 'myPointer' =  0xc000016058
The value pointed by 'myPointer' after dereferencing =  2
The updated value pointed by 'myPointer' after dereferencing =  5
The updated value stored in 'myVariable' =  5

변수에 새 값을 할당하는 대신 포인터의 값을 변경할 수 있습니다. 포인터를 사용하여 변경한 값은 원래 값에도 반영됩니다.

Go에서 new() 함수를 사용하여 포인터 만들기

package main

import "fmt"

func main() {

	var myPointer = new(int)

	*myPointer = 2

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)

}

출력:

The value stored in 'myPointer' =  0xc000016058
The value pointed by 'myPointer' after dereferencing =  2

new() 함수를 사용하면 정수에 대한 포인터를 직접 만들 수 있습니다.

Go에서 포인터를 인수로 함수에 전달

package main

import "fmt"

func myFunction(myVariable *int) {

	*myVariable = 5
}

func main() {

	var myVariable = 2

	fmt.Printf("The value of myVariable before function call is: %d\n", myVariable)

	var myPointer *int = &myVariable

	myFunction(myPointer)

	fmt.Printf("The value of myVariable after function call is: %d\n", myVariable)

}

출력:

The value of myVariable before function call is: 2
The value of myVariable after function call is: 5

위에서 만든 함수는 변수 myVariable 값을 변경했습니다. 포인터가 변수가 저장된 메모리 위치를 직접 참조하기 때문에 함수에서 변경된 값은 함수 외부에 반영됩니다.

변수의 주소를 Go의 함수에 인수로 전달

package main

import "fmt"

func myFunction(myVariable *int) {

	*myVariable = 5
}

func main() {

	var myVariable = 2

	fmt.Printf("The value of myVariable before function call is: %d\n", myVariable)

	myFunction(&myVariable)

	fmt.Printf("The value of myVariable after function call is: %d\n", myVariable)

}

출력:

The value of myVariable before function call is: 2
The value of myVariable after function call is: 5

위에서 만든 함수는 변수 myVariable 값을 변경했습니다. 함수 내에서 변경된 값은 함수 외부에 반영됩니다.

변수가 저장된 메모리 위치가 변경됩니다. 이는 포인터를 함수에 전달하기 위한 대체 방법입니다.

Go의 함수에서 포인터 반환

package main
import "fmt"

func main() {

  displayText := display()

  fmt.Println("Hello,", *displayText)

}

func display() *string {

  myMessage := "World!"

  return &myMessage

}

출력:

Hello, World!

위에서 만든 함수는 myMessage 문자열을 가리키는 포인터를 반환합니다. 그런 다음 main 함수에서 값이 역참조됩니다.

Musfirah Waseem avatar Musfirah Waseem avatar

Musfirah is a student of computer science from the best university in Pakistan. She has a knack for programming and everything related. She is a tech geek who loves to help people as much as possible.

LinkedIn