본문 바로가기

golang37

golang 정렬하기 golang으로 정렬하는 법을 찾다가 생각보다 복잡해서 정리할겸 포스팅을 쓰기로 했다. 테스트를 위한 간단한 string 배열이다. 자 이 배열을 정렬하기 위한 코드는? 이럴수가 엄청길다.. 파이썬은 .sort() 하나면 되는데.. 뭐 어쨌든 분석해보기로 하자. 우선 정렬을 위해 sort 모듈을 import 해야한다. 그리고 문제의 부분인데 우선 이걸 이해하기 위해서는 golang의 interface 개념이 있어야 하기 때문에 혹시 모른다면 공부를 하고 오자. sort.Sort()가 인자로 interface를 받기 때문에 Sort 함수에 데이터를 넣어주기 위해서는 interface를 구현해야 한다. 그렇기 때문에 인터페이스의 정의된 함수인 Len, Swap, Less 함수를 구현해야하고 이걸 구현하기 위.. 2020. 10. 22.
golang에서 HandlerFunc란? golang의 기본 패키지들을 이용하여 웹프로그래밍을 공부하던 도중 햇갈리는 부분이 있어서 정리하려고 한다. 바로 코드를 보면서 이해해보자. 위 코드는 golang을 이용한 웹프로그래밍의 hello world이다. 코드에서 보다시피 localhost:8080/hello 주소로 들어가면 hello world가 찍혀있는 걸 볼 수 있다. http.HandleFunc 함수의 경우 두번째 인자로 func(http.ResponseWriter, *http.Request) 형태로 이루어져 있는 함수를 받는다. 이 점을 기억해두면서 아래 코드들을 계속 보자. 차이점이 보이는가? http.HandleFunc 대신 http.Handle 함수를 사용하였고 이것도 실행된다는 것을 명확히 보여주기 위해 hello world 대.. 2020. 10. 19.
golang에서 slice VS linkedlist 이번 포스팅에서는 golang에서 기본적으로 제공하는 기능인 slice와 자료구조의 기본인 linkedlist를 비교해보겠다. 아 참고로 linkedlist는 자기 앞 노드를 기억할 수 있는 double linkedlist를 기준으로 한다. 첫번째로 slice와 linkedlist에서의 맨 앞과 맨 끝 삭제를 비교해보자. 예전 포스팅에서 golang에서 slicing을 하면 새로운 복사본을 얻는게 아니라 단지 slicing한 범위를 포인팅하는 것이라고 했다. (이것 때문에 slicing한 slice의 값을 바꾸면 원본 slice도 값이 바뀌게 된다.) 즉, slice에서의 첫번째 항목 삭제는 아래그림과 같다. 원본 slice는 검은 화살표처럼 맨 처음과 맨 끝을 가리키지만 slicing을 이용하면 그 초.. 2020. 5. 22.
golang에서의 slicing golang에서는 파이썬처럼 리스트 슬라이싱 기능을 지원하는데 오늘은 슬라이싱을 할 때의 주의점을 알아보자 파이썬을 써보았다면 익숙할 슬라이싱이다. 근데 여기서 질문을 던져보겠다. 리스트 b는 리스트 a와 아무 연관이 없는 리스트일까? 정답은 연관이 있다이다. 아래 그림을 보자 b[0]을 11로 바꾸니 리스트a의 3번째인덱스도 바뀌어버렸다. (참고로 슬라이싱의 원조?인 파이썬에서는 golang과는 다르게 슬라이싱한 리스트의 값을 변경해도 원본 리스트의 값이 변경되지 않는다.) 이게 무엇을 의미할까? 즉, golang에서 슬라이싱이란 원본 리스트를 슬라이싱한 범위만 가리키고 있다는 뜻이다. 뭔소린지 글로는 이해가 안갈 것이다. 아래 그림을 보면 이해가 잘될테니 아래 그림을 보자 이러한 이유로 golang에.. 2020. 5. 18.