본문 바로가기

전체 글333

Error handling을 간단하게 - 출처: https://dave.cheney.net/2019/01/27/eliminate-error-handling-by-eliminating-errors - 개요 Go2는 오류를 처리할 때 오버헤드를 줄이는 방향으로 목표하고 있다. 오류를 처리할 때 향상된 문법보다 더 중요한것이 있는데, 그건 바로 오류를 처리할 필요가 없도록 하는것이다. 이 말의 의미는 "error를 다루는 코드를 없애라"는 의미가 아니라 "다루어야 할 오류가 많아 지지 않도록 코드를 변경하라"는 의미이다. 원문의 저자는 해당 글을 John Ousterhout's의 A philosophy of Software Design에서 영감을 받았다고 한다. - Example 1 아래 코드는 파일의 라인 수를 세는 코드이다. func Coun.. 2022. 6. 16.
Exception - 출처: https://dave.cheney.net/2012/01/18/why-go-gets-exceptions-right - History C는 단일값을 반환하는 구조였기 때문에 함수 실행과정에서 문제가 생겼을 때 이를 파악하는 과정이 복잡했다. 물론 이런 문제를 다루기 위한 프로그래밍 스킬들이 있었다. 예를 들면 구조체의 내용을 변경하는 함수에 포인터를 넘겨주면 반환된 코드가 해당 작업을 성공했는지를 나타내는것과 같은 방식이다. 다른 스킬들도 있지만 이 글에서 다루고자하는 중심적인 얘기는 아니므로 넘어가겠다. C++이 되면서 error를 다루는 작업이 진화했다. 어떤 함수가 값을 반환하거나 exception을 던지면 이를 잡아서 다루는게 가능해졌다. C++ 프로그래머들은 error 상황을 함수가 반.. 2022. 6. 14.
Error handling - 출처: https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully - Errors are just values error를 다루는데 있어서 많은 의견들과 조언들이 있지만 정돈된 하나의 규칙은 없는듯하다. 대신 일반적으로 Go에서 error를 다루는 3 가지 방법에 대해서 알아보도록 하자. - Sentinel error error를 다루는 첫번째 전략은 일명 "sentinel error"이다. if err == ErrSomething { … } 이 이름은 더이상 처리가 불가능함을 나타내기 위해 특정값을 사용하는 컴퓨터 프로그래밍의 관행에서 따온것이다. Go에서는 오류를 나타내기 위해 특정값을 사용한다. 이런 예로는 i.. 2022. 6. 12.
Kafka - introduction - 출처: https://kafka.apache.org/documentation/#introduction - Event streaming Event streaming이란 인간의 중추 신경계(뇌와 척수로 구성되어 있으며 판단을 통해 감각 뉴런과 운동 뉴런을 연결시키는 역할을 함)와 같다. 비즈니스가 소프트웨어로 정의, 자동화되어 상시 가동하는 세상을 위한 기술의 기반이라고 할 수 있다. 기술적으로 말하자면 event stream으로 된 형태의 DB나 센서, 모바일 기기, 클라우드 서비스, 소프트웨어 어플리케이션등의 event 원천에서 실시간으로 데이터를 취하는일이라고 할 수 있다. 또한 나중에 검색할 수 있도록 이런 event stream들을 저장한다. 실시간으로 조작, 처리, event stream에 대.. 2022. 6. 6.
Effective Go - Errors - 출처: https://go.dev/doc/effective_go#errors - Errors 라이브러리 함수들을 사용하다보면 호출자에게 오류를 반환하는 경우를 본적이 있을것이다. Go의 다중 값 반환을 이용하면 일반적인 반환 값과 함께 자세한 error도 같이 반환할 수 있다. 자세한 error 정보를 반환하기 위해 다중 값 반환을 사용하는것은 좋은 습관이다. 예를 들어 os.Open은 실패시 nil pointer만 반환하지 않고 무엇이 잘못되었는지를 기술하는 error 값도 같이 반환한다. Convention에 의해 error 들은 간단한 빌트인 인터페이스인 error type을 갖는다. type error interface { Error() string } 라이브러리 작성자는 풍부한 모델을 사용.. 2022. 6. 5.
Effective Go - Concurrency - 3 - 출처: https://go.dev/doc/effective_go#parallel - Parallelization 앞의 파트(Concurrency - 2)까지 알아보았던 동시성과 관련해서 여러 개의 Core를 사용하여 계산을 병렬처리 하는 부분도 생각해볼 수 있다. 만약 계산이 독립적으로 실행될 수 있는 조각들로 분리될 수 있다면 각 조각들의 완료 여부를 channel을 통해 signal을 보내면 병렬화가 가능하다. vector의 요소들이 비용이 큰 연산들로 구성되어있고 각 요소의 연산 값이 독립적인 경우를 생각해보자. type Vector []float64 // Apply the operation to v[i], v[i+1] ... up to v[n-1]. func (v Vector) DoSome(i.. 2022. 6. 2.