일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- C언어
- C++ library
- gui
- 알고리즘
- 연결리스트
- vim-go
- 자료구조
- 백준
- 운영체제
- JUCE라이브러리
- a tour of go
- BOJ
- tour of go
- LOB
- JUCE 튜토리얼
- 코딩
- 리듬게임
- C++
- Docker
- go channel
- C++ gui 라이브러리
- OS
- go
- C++ gui
- 공룡책
- JUCE library
- JUCE
- 프로그래밍
- Nebula
- c++ heap
- Today
- Total
목록Programming (154)
CafeM0ca
자세한건 이 블로그를 참조하자. 이런 분이 교사 하시면 모두가 점수가 높을 것이다. 이 글의 내용 전문은 다 아래 블로그에서 학습한 내용을 상기하기 위함이다. http://cloudrain21.com/streaming-data-pipeline-with-go-channel 위 블로그의 go 파트는 웬만하면 다 읽어보자. 파이프라인은 물이 흐르는 통로를 말하는데 컴퓨터에서는 물 대신 데이터가 흐르는 통로로 이해하면 된다. 물을 공급해주는 역할과 공급받은 물을 사용하는 역할이 있을 것이다. 이를 공급쪽은 Producer 혹은 Source라고 하며 사용하는 쪽은 Consumer 혹은 Sink라고 한다. (생산자 소비자 모델을 생각해보자) Fan-out, Fan-in Fan-out 여러 스트림이 있는 경우 다수의..
net/http로 라우팅 요청된 경로나 요청 방식에 따라 다른 핸들러로 요청을 라우팅하는 기능이 필요. go에서 ServeMux 인스턴스인 Default ServeMux 메서드에 의해 처리된다. ListenAdnServe 함수의 handler 매개 변수로 nil에 전달되면 DefaultServeMux 메서드가 사용됨. http.HandleFunc("/helloworld", helloWorldHandler) 패키지 함수를 호출하면 실제로는 간접적으로 http.DefaultServerMux.HanldeFunc(...)를 호출함. Go HTTP 서버에는 지정된 라우터가 없음 http.Handler 인터페이스를 구현한 객체가 Listen() 함수의 최상위 함수로 전달됨. 요청이 서버로 들어옴 핸들러의 Serve..
좋은 API 디자인하기 REST나 RPC 중 하나를 선택하는 것은 환경에 달려있다. 이미 사용하고 있는 방식이 있다면 그 방식으로 나가는게 좋다. RESTful API REpresentational State Transfer(표현적 상태 전송)의 약자로 컴포넌트간 상호작용의 확장성, 범용적인 인터페이스, 컴포넌트의 독립적인 배포를 강조하며 응답 지연시간 감소, 보안 강화, 레거시 시스템의 캡슐화를 위한 중간 컴포넌트 역시 강조한다. 이와 같은 원칙을 준수하는 API를 사용하면 RESTful이다. URI(Uniform Resource Identifiers:일관된 리소스 식별자) API에 접근하는 방법. URI와 URL의 차이점은 없다. URL은 네트워크 위치로 리소스를 식별하는 URI다. 리소스 전체를 기..
개발을 시작하기 위해 개발 환경 셋팅에 진심을 다하는 우리.. 텍스트를 입력하기 위해 vim을 설치하고 vim을 더 우아하게 사용하기 위해 vim-plug를 설치하고 '이게 있으면 더 좋겠다~' 하면서 코드는 뒷전이고 괜찮은 플러그인 찾는데 시간을 보내는 것 처럼 개발자들은 일하기 위해 일을 위한 일을 한다. Go언어 프로젝트 초기 셋팅에 대해 알아보자. vim 셋팅 에디터인 vim부터 건들자. github.com/junegunn/vim-plug junegunn/vim-plug :hibiscus: Minimalist Vim Plugin Manager. Contribute to junegunn/vim-plug development by creating an account on GitHub. github.c..
아래 내용은 'Go 언어를 활용한 마이크로서비스 개발'을 이해하기 위해 정리한 내용입니다. 책 구매는 여기를 참조하세요. -> http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791161751900&orderClick=LAG&Kc= Go 언어에서 에러처리 go에서 에러는 꼭 처리해주는게 좋다. 다른 언어처럼 예외처리와 유사한 패닉과 복구를 지원하지만, 사용하는 상황이 다름 go에서 panic 함수가 프로그램의 정상 실행을 중지시키고 Go의 모든 루틴이 defer된 함수 호출을 실행하고 나면, 로그 메시지를 출력하면서 프로그램을 종료한다. 이 방식은 일반적으로 코드상의 버그를 나타내는 unex..
tour.golang.org/concurrency/10 A Tour of Go tour.golang.org 마지막 문제다. 웹 크롤링을 병렬적으로 실행시키면 된다. Crawl 함수를 수정해야하는데 똑같은 URL에 대해 fetch를 두번 하지 말아야한다. 패치를 할 때는 mutex로 잠궈서 패치시켜주면 동시에 map에 접근할 일을 방지할 수 있다. 먼저 Crawl 함수부터 보자. depth가 0이 되면 함수를 종료하고 그게 아니면 재귀적으로 Crawl함수를 호출한다. 현재 URL에 대해서 fetcher.Fetch(url)을 통해 크롤링 했다는 도장을 찍어준다. 우리의 목표는 Crawl 함수를 병렬적으로 실행시킴과 동시에 크롤링 했다는 도장을 url당 한번만 찍어주면 된다. 이해하기 쉽게 시각화 해보면 아래..
tour.golang.org/concurrency/9 A Tour of Go tour.golang.org Go에서 Mutex에 대해 배워보자. sync.Mutex에 있으며 Lock과 Unlock 2개의 메소드를 갖고 있다. 위 예제는 map의 값을 goroutine으로 병렬적으로 값을 증감시키는 예제다. Mutex로 locking 하는 이유에 대해서는 cafemocamoca.tistory.com/93?category=1008201 에 있는 pdf를 참조하자. 자세히 써놨을 것이다. Value 함수를 보자. 처음에 map 변수 c를 lock한다. 이는 주석에 써 있듯이 다른 고루틴의 접근을 방지하기 위해서다. 그리고 unlock은 defer를 통해 해준다. defer는 연산이 먼저 완료되도 함수가 끝날 때..
tour.golang.org/concurrency/8 A Tour of Go tour.golang.org 2개의 이진트리를 병렬로 실행하고 순회한 값이 똑같은지 비교하는 문제다. Walk는 쉽게 짰고 Same이 문제인데 컴퓨터 3년 하면서 이진트리를 병렬처리해서 비교해볼 생각을 안해서 난감했다. 정확히는 goroutine까지는 괜찮은데 채널 값을 뽑아서 비교하는게 문제였다. 아래 코드는 채널 값 비교를 빼고 구현한 코드다. package main import "golang.org/x/tour/tree" import "fmt" // Walk walks the tree t sending all values // from the tree to the channel ch. // 바이너리트리 순회해서 채널에 값을..
tour.golang.org/concurrency/1 A Tour of Go tour.golang.org 고루틴은 경량 스레드로 go runtime에 관리된다. 고루틴은 같은 주소 공간에서 동작하며 공유 메모리에서 반드시 싱크로되어 접근한다. 위에가 고루틴 소스코드인데 go 키워드를 사용해서 함수를 호출하면 된다. 진짜 심플해서 좋은 것 같다. Channel이라는 문법이 있는데, 채널은 데이터를 주고 받을 수 있는 통로다. 왼쪽 화살표가 채널의 연산자다. 맵과 슬라이스처럼 채널은 반드시 생성되면서 선언해줘야 한다. 기본적으로, 보내는 쪽과 받는 쪽은 다른쪽이 준비 될 때까지 block된다. 채널은 고루틴이 명시적으로 lock이나 condition variable(cafemocamoca.tistory.co..
tour.golang.org/methods/21 A Tour of Go tour.golang.org Reader는 io에 있는 인터페이스다. 특정 타입이 있으면 위 형식에 T 대신에 해당 타입을 치환시켜주면 된다. Go가 클래스가 없어서 멤버함수 대신에 이런식으로 사용하는 것인데, 이해가 잘 안된다면 cafemocamoca.tistory.com/281 를 참고하자 코드를 보면 MyReader를 Receiver로 갖는 Read method를 만들어주면 된다. 인자로 들어오는 b에 'A'를 채워주면 된다. tour.golang.org/methods/23 A Tour of Go tour.golang.org Read로 읽은걸 ROT13을 적용하는 문제인데 io.Reader는 Wrapper 형식으로 잘 쓰인다고 ..