1. 포인터

Low level programming language :  C언어와 같이 컴퓨터가 쉽게 이해하도록 프로그래밍하는 것. 실행 속도가 빠르지만 배우기 어렵다 유지보수가 힘들다 이런 언어들은 메모리 파트에 접근할 수 있다 그것이 바로 포인터!

 

예시1)

a=2

b=a        일 때 b는 a의 값을 복사해서 가져온다

a=10       후에 b와는 상관없이 a값에 10을 가져오면 a는 10이 된다

a와 b의 값은 각각 10,2

 

& : &뒤에 나오는 값이 가지는 메모리 주소를 알려주는 기능이다

예시2)

a=2

b=&a      b는 a의 주소 값을 가져온다

a=10       

a와 b의 값은 각각 10, a의 주소 값

 

* : *뒤에 나오는 주소가 가지는 값을 알려주는 기능이다 (씨쓰루)

예시 3)

a=2

b=&a

*b의 값은 2

*b=5일 때

a의 값은 얼마일까?

*b로도 a값을 바꿀 수 있기 때문에 답은 5이다

 

이렇게 포인터를 알아보았는데 포인터는 컴퓨터에서 복사가 아닌 바로가기의 느낌이다

 

복사는 용량 전체를 가져오지만 바로가기는 연결만 할 뿐 내용 전체를 담아오지는 않는다

 

두 개의 변수가 하나의 object로 서로 연결되어있기 때문에 빠르게 대응할 수 있다

b = a, a = 2 b = &a, a = 2
&a = a주소값

&b = b주소 값

&a = a주소값 &b = b주소값
a = a b = a a = a b = &a
*(&a) = 2 *(&b) = 2 *(&a) = 2 *(&b)! = 2
    *a = error *b = 2

b=&a인 경우에도 &b=b의 주소 값을 가진다 하지만 *(&b)는 2가 아니고 &a이다

2. Arrays and Slices

Array : Go에서 Array(배열)은 요소의 개수와 형태를 입력해주어야한다

 

ex)

  names := [5] string{"nico","lynn","dal","pavk"} //요소개수를 정했다면 그보다 많이 적을 수는 없다

  names[4]="hui"  //요소를 추가하는 방법

  names[5]="asd" //6번째 이름을 추가하는 것이므로 에러가 난다 

 

Slices : 하지만!! Slices는 제한이 없는 배열이다 융통성있는 배열

 

ex)

  names := [ ] string{"nico","lynn","dal","pavk"} //요소개수를 비움으로서 요소개수제한이 없다

  names = append(names, "hui") //slice에 요소를 추가하는 방법

※append는 slice를 수정해서 요소를 추가하는 것이 아닌 요소가 추가된 새로운 slice를 반환한다

  

3. Map

map : 파이썬의 dictionary와 비슷한 형태이다 key와 value형태를 가지고 있다

 

ex)

  pavk :=map[string]string{"name":"pavk","age":"25"}

//key와 value 형태를 string으로 지정했으면 숫자여도 "25"이렇게 써줘야한다

 

ex)map을 활용한 반복문

  pavk :=map[string]string{"name":"pavk","age":"25"}

  for key,value := range pavk{ //배웠던 반복문 처럼 쓰면 되는데 배열과 다르게 index를 반환하지않고 key를 반환한다

       반복할 내용

  }  

 

 

+ Recent posts