일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RxKotiln
- 코틀린
- 개발자
- Kotiln
- Dev6
- Go언어
- 코딩테스트
- Flutter
- 안드로이드 개발자
- 안드로이드
- Rxjava 안드로이드
- RxJava
- Java
- Swift 문법
- 알고리즘
- 안드로이드 컴포즈
- 반응형 프로그래밍
- react
- 이펙티브 코틀린
- 프로그래머스
- 코루틴
- android compose
- 이펙티브코틀린
- 안드로이드 클린아키텍쳐
- android
- Firebase
- 잡담
- Kotlin
- MVVM
- 안드로이드 다이얼로그
- Today
- Total
최데브는 오늘도 프로그래밍을 한다.
Go 언어 - 포인터 , 배열, Map 본문
포인터
Java 나 파이썬 같은 언어에는 없는 포인터라는 개념이 있다.
C, C++ 에도 있는 개념인데
메모리를 참조하고 메모리에 직접 접근하는 기능이다.
대충 예를 들자면
보통
a := 2
b := 3
b := a
a = 10
라는 코드를 작성하면 3번째 줄에서 b 는 2로 바뀌지만 4번째 줄에서 a = 10 이라는 코드를 적어도 b 는 세번째 줄에서만 변경 됐을뿐 더 이상 영향을 주지 못한다.
이런걸 값의 복사라고 표현하는데
포인터는 이런게 아닌 4번째 줄에서 a를 10으로 변경해도 b도 함께 10으로 변경되게 해준다.
아직 감이 안올수도 있다 아래 코드와 함께 설명하겠다.
a := 2
b := &a
fmt.Println(b)
위 코드의 & 는 해당 변수의 메모리 값을 말한다.
b 라는 변수에 a의 메모리 값을 저장하겠다는 의미가 된다.
출력값도 a의 메모리값이 나온다.
그럼 이건 어떨까
a := 2
b := &a
fmt.Println(*b)
값이 2가 나온다. * 기호는 해당 변수의 메모리가 바라보고 있는 값이 무엇인지 알아오는 기호다.
"a의 주소값을 b가 가지고 있고 이 메모리가 바라보고 있는 값은 a에 담긴 2 이다. "
라는 뜻이다.
이걸 왜 쓸까?
무거운 데이터 구조를 다루고 있을때 그냥 값을 다른 변수나 객체에 복사한다고 하자.
그냥 = 을 사용해서 대입했을 뿐인데 많은 비용이 발생한다. 같은 내용을 다른곳에 복사하기 때문이다.
그럴때 포인터를 사용해서 불필요한 복사본을 만들어 내지 않아도 된다.
사실 포인터는 나도 잘아는게 아니다. 주력 언어는 java.. kotiln..
배열
1. Array // 기본적인 배열형태
names := [5]string{"aa" ,"bb" , "cc"}
//이런식으로 사용하는게 기본이다. 길이와 타입 내용을 순서대로 위 양식대로 적는다.
names[3] = "ddd"
names[4] = "eee"
2. Slice // 크기를 정적으로 정하고 싶지 않을 때
names := []string{"aaa","bbb","ccc"}
names = append(names,"dddd")
// append 는 java에서 사용하는 add , push 와 비슷하다.
// 앞에 추가하고자 하는 slice 의 이름을 적고 slice 마지막 인덱스로 추가할 내용을 적어준다.
Map
다른 언어에서도 쓰는 map과 같은 개념이다.
선언하는 방식은
mapamp := map[string]string{"name":"ddd","age":"12"}
// key를 어떤 타입으로 할것인지 [ ] 안에 적어주고 그 뒤에 value 의 타입을 적어준다.
출력할때는
for key , value := range mapamp {
fmt.Println(key, value)
}
이런식으로 사용하면 된다.
'Go' 카테고리의 다른 글
Go 언어 - defer (0) | 2021.06.02 |
---|---|
Go 언어 - Const , Var , func (0) | 2021.06.02 |
Go 언어 - Go 설치하기 (0) | 2021.05.30 |
Go 언어 - go 에 대하여 (0) | 2021.05.30 |