본문 바로가기

error7

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.
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.
Go - maps - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/maps - 개요 array와 slice에서는 데이터를 순차적으로 저장한다. go에서는 key를 기반으로 데이터를 저장할 수 있는 map을 제공한다. dictionary를 만들어 보면서 map에 대해 알아보도록 하자. - map package main import "testing" func TestSearch(t *testing.T) { dictionary := map[string]string{"test": "this is just a test"} got := Search(dictionary, "test") want := "this is just a test" if got != want .. 2021. 12. 31.
Go - pointers & errors - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/pointers-and-errors - 개요 struct의 상태를 갱신하거나 크기가 큰 객체에 대해 값 복사를 하지 않고 참조하기 위한 pointer를 알아본다. 타 언어에서 null에 해당하는 개념인 nil을 알아본다. 또한 Error 처리를 간단하게 살펴본다. 이번에는 간단한 Bitcoin 입출금 시스템 구현 하면서 위에서 언급한 개념들을 살펴보자. - Pointer struct를 사용할 때 마치 Java의 setter처럼 상태를 관리하거나 상태를 변경하도록 메소드를 외부로 노출해야하는 경우가 있다. 이전 struct에서는 field에 직접 접근할 수 있었지만 이번에는 내부 상태를 외.. 2021. 12. 26.
Go - Return 과 handle an error 참조: https://go.dev/doc/tutorial/handle-errors 개요 error 를 다루는것은 견고한 코드를 작성하는데 있어 필수요소라고 할 수 있다. 이번에는 greetings 모듈에서 error 를 반환해보고 caller 에서 이를 다루어보도록 한다. - error 반환 인사할 사람이 없다면 답장을 보내도 의미가 없다. 호출자가 이름을 빈값으로 호출했다면 caller 에게 error 를 반환해보도록 하자. greetings.go 파일을 아래와 같이 수정한다. package greetings import ( "errors" "fmt" ) // Hello returns a greeting for the named person. func Hello(name string) (string, .. 2021. 11. 28.