티스토리 뷰
Go에서는 포인터와 참조 타입(슬라이스, 맵, 채널, 함수, 메서드)을 모두 제공한다. 참조 타입은 데이터를 직접 가지지 않고 데이터의 메모리 공간을 가리킨다. 포인터는 값에 접근 하는 수단이고 주소값을 직접 변경할 수 없다.
포인터 생성 & 초기화
포인터 변수는 *타입 방식으로 선언한다. 64비트 머신에서 포인터는 16바이트, 32비트 머신에서는 8바이트 크기를 가진다.
포인터를 생성하는 방식
1. 주소 연산자 &로 메모리 주소를 포인터 변수에 할당
2. new() 함수로 초기화한 메모리를 포인터 변수에 할당
&을 사용하여 포인터 생성
var p *int // 포인터 생성
value := 1024
p = &value // 메모리 주소 할당
p에는 주소 값이 저장되어 있다. 주소 값에 있는 값을 가져오기 위해서는 C와 마찬가지로 포인터 앞에 * 연산자를 붙이면 된다.
*p
p와 value의 관계
- p == &i
- *p == i
구조체 포인터
int 포인터를 출력하면 포인터의 주소값이 출력된다.
struct 포인터를 출력하면 주소값은 출력되지 않고 &구조체의 값이 함께 출력된다.
&을 사용하여 포인터 생성
new() 함수는 메모리 공간에 매개변수로 전달 받은 타입에 맞게 초기화를 하고 주소를 리턴한다.
call by reference
Go에서 함수를 호출할 때 call-by-value 방식으로 동작한다.매개변수로 전달받은 값을 변경하고 싶다면 포인터를 사용하여 call-by-reference를 하면 된다.
배열 대신 슬라이스를 함수에 전달하면, 참조가 전달 되어 시스템의 부담을 줄일 수 있다.
구조체도 슬라이스와 마찬가지로 포인터로 전달을 하면 시스템의 부담을 줄일 수 있다.
구조체 포인터를 사용한 경우 구조체의 값이 변경되었다. 구조체도 call-by-value 방식으로 동작하는 것을 확인할 수 있다.
- Total
- Today
- Yesterday
- solidity
- 1차 인터뷰
- 확장 함수
- Squash and merge
- Kotlin
- git
- 2차 인터뷰
- 코딩테스트
- postman tests
- DGS Framework
- 코틀린
- go 특징
- pm.expect
- mysql
- postman collection
- python3
- downTo
- graphql
- string
- Basic Type
- hashcode
- Kotlin In Action
- github
- 네이버 2022 공채
- postman
- 주생성자
- squash merge
- java
- Python
- pm.test
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |