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를 반환한다
반복할 내용
}
'노마드코더스 아카데미 > Go언어로 웹스크래퍼 만들기' 카테고리의 다른 글
Dictionary use type in Go lang (feat. map) (2) | 2020.03.24 |
---|---|
struct in Golang (수정) (0) | 2020.03.17 |
Go웹스크래핑[2] (0) | 2020.03.12 |
Go웹스크래핑[1] (0) | 2020.03.11 |
Go 웹스크래핑[0] (0) | 2020.03.11 |