프로그래밍 언어/Go

    Go 카테고리 목차 및 문서정리

    Go 이 포스트는 블로그내 Go 카테고리의 목차와 Go 언어를 할 때 참고하면 좋은 문서를 일부 정리해놓기 위해 작성되었다. Go 언어는 성장하고 있으며, 한국어 자료들도 어느정도 나오고 있기 때문에 내 블로그를 포함한 한국어 자료들을 어느정도 정리해놓으면 나름대로 도움이 될 것이다. 내가 Go 언어를 선택한 이유 내가 Go 언어를 선택한 이유 어서와 Go 내가 수년간 마주한 PHP 를 보내고 잡은 언어는 Go 다. 많은 이들이 알다시피 현재 범용 프로그래밍 언어로써 가장 많이 쓰인다고 볼 수 있는 것이 자바라는 사실은 부정할 수 없을 것이 pronist.tistory.com 이 포스트의 내용은 주기적으로 업데이트 될 것이며 블로거 본인이 가지고 있는 Go 언어에 대한 이해도가 높아질수록 새로운 내용이 ..

    Go: 고루틴과 채널 (go-routine, chan)

    Go 에서 동시성을 제어하는 일은 너무나도 쉽다. 너무 쉬워서 남발하는 경우까지 나올 정도로 쉬운데, Go 의 동시성은 고루틴(go-routine)이라고 하는데, 이는 OS 스레드를 한 번 더 추상화한 코루틴(co-routine)이다. 이러한 동시성은 멀티 프로세서를 사용하여 실행하거나 문맥교환(Context-Switching)을 통해 동시에 실행되는 것처럼 행동한다. 고루틴과 채널에 대한 내용은 상당히 길기때문에 해당 포스팅에서 전부 이야기할 수는 없을 것이라 여기서는 기초적인 것만 이야기하고, 더 자세한 것은 이후의 포스트에서 다룰 예정이다. go & go-routine main() 함수도 사실은 main() 고루틴이다. 이러한 고루틴을 실행하는 것은 아주 간단한데, 단순히 그냥 go 키워드만 붙여주..

    Go: 에러와 패닉 (panic, recover)

    예외가 없다고? 그렇다. Go 언어에는 예외(Exception)가 없다. 에러로 모든 것을 처리한다. error 빌트인 타입은 존재하긴 하지만, 그렇다고 타언어처럼 모든 에러에 대해 타입이 매핑되어 있는 것은 아니다. 내가 접한 언어 중에는 Syntax, Out of Range 등을 전부 나눠놓은 경우가 있었는데, 그다지 좋은 기분이 들지는 않았다. 아니면 에러와 예외를 둘 다 사용하여 컴파일이나 정적으로 발생하는 것은 에러로, 런타임 중에 발생한 것은 예외로 하여 개별 클래스가 계층에 따라 분리된 경우도 있었는데, 상당히 헷갈리기 그지 없었다. Go 에는 에러와 패닉이 있는데, 패닉은 런타임 중에 발생하는 치명적인 에러를 의미하며 프로그램이 더 이상 진행될 수 없는 수준의 에러다. 상당히 치명적이어서 ..

    Go: 인터페이스와 타입 단언 (Interface, Type Assertion)

    인터페이스 인터페이스는 이기종간 기능을 약속하여 서로 다른 기기일지라도 오직 기능적인 관점에서 일관성을 유지하기 위해 사용한다. 같은 개발자라도 가지고 있는 기술에 따라 기술 스택이 달라지지만, 코딩이라는 기능은 가질 수 있는 것처럼 말이다. 인터페이스는 아래와 같이 정의하는데, Go 에서는 구조체에 정의하는 메서드에 대해 인터페이스를 사용하는 것을 명시하지 않는다. 인터페이스는 타입으로 선언하며 Develop 이라는 인터페이스는 코딩이라는 기능을 가질 수 있음을 말한다. 인터페이스는 실질적인 구현에 대해서는 이야기하지 않고, 오직 그 기능이 가능한 지에 대해서만 신경쓴다. type Develop interface { Coding() } 조건에 만족하려면 인터페이스를 만족하기 위한 조건은, 메서드를 가진..

    Go: 구조체 (메서드, 임베딩, 캡슐화)

    Go 에는 클래스가 없다. 개념적으로 객체라는 단어를 거의 사용하지 않는다. 다만 C언어처럼 구조체라는 존재가 있다. 구조체는 클래스와 유사하지만 전통적인 객체지향 프로그래밍의 형태보다는 Go 언어에 맞는 프로그래밍 방식이 요구된다. 객체지향에서 언급하는 상속과 캡슐화를 하는 것은 가능하지만 그 방법이 다른 언어와는 상당히 다르다. 기존 객체지향에서 사용하는 extends, public, protected, private 와 같은 키워드가 존재하지 않으며, this 키워드가 없어서 혼란스러울 일이 없다. 타언어를 사용하다보면(특히 자바스크립트) this 가 무엇을 가르키는지 소스코드에 명시가 되어있지 않기 때문에 헷갈리는 경우가 많은데, Go 에서는 명시하기 때문에 그럴 일이 없다. 구조체 구조체는 클래..