golang에서 사용 경험이 좋았던 패키지들
·
툴, 프레임워크, 기술
프로그래밍 언어를 익히는 과정에서 가장 큰 난관은 기본 문법을 익힌 후에 실제 프로그램을 만드려고 할 때 맞닥뜨린다. CLI 툴 이상의 프로그램을 만들기 위해서는 프레임워크가 필수적이다. 요즘은 프로그래밍 언어보다는 킬러-프레임워크(그 자체가 언어 선택의 기준이 되도록 하는 프레임워크)를 중심으로 배우는 것이 기본으로 변해가는 추세라 이러한 어려움을 겪는 사람이 적을 것이다. 하지만 golang은 JS 진영의 React나 express와 같은 킬러-프레임워크가 존재하지 않다보니 언어 중심으로 배우게 된다. 이렇게 프레임워크 없이 바로 CLI 너머의 프로그램을 만드려다 보니 어려움을 겪을 수 밖에 없다.이번 글에서는 이런 어려움에 처해 있는 입문자들이 실제 프로그램을 만드는 데에 도움을 주고자 대중적이면서..
Go로 구현한 Coding Challenge - uniq
·
프로그래밍 언어
uniquniq는 표준입력 혹은 파일 내 텍스트의 중복되는 줄을 없애주는 커맨드라인 툴이다. 이번 챌린지의 목표는 이 uniq 명령어를 구현하는 것이다. 필자의 구현물은 Github에서 확인할 수 있다.Step 0챌린지 프로젝트 셋업이다. 테스트용 데이터를 생성하는 과정으로 그대로 따라하면 된다.Step 1매개변수로 파일을 받아 중복하는 줄을 제거해서 보여줘야 한다. 필자는 일단 아래와 같이 구현했다.//main.gopackage mainimport ( "bufio" "fmt" "os")func main() { args := os.Args if len(args) 여기서는 특별히 신경쓰거나 어려웠던 부분은 없었다. 각 줄은 reader의 readString으로 개행 문자를 읽어서 구분했다.Step 2이번에..
[회고] Windows에서 연결된 시리얼 포트 이름 목록을 Go언어로 보여주는 기능 구현 과정
·
회고
문제 상황PC에서 시리얼 통신을 하기 위해서는 연결된 포트(comport)를 지정해야 한다. 즉, 시리얼 통신을 위해서는 우선 comport를 알아야 하고 그렇기 위해서는 PC에 현재 연결되어 있는 포트를 알 필요가 있다. 물론 사용자로부터 직접 입력을 받는 방법도 있지만 좀 더 편리한 유저 인터페이스를 위해 PC에 연결된 시리얼 포트 목록을 윈도우에서 사용하는 식별자(COM1, COM2...)로 표현하도록 구현하고자 했다. 결과 코드를 보면 다음과 같다.func GetPortNames() ([]string, error) { key, err := registry.OpenKey(windows.HKEY_LOCAL_MACHINE, `HARDWARE\DEVICEMAP\SERIALCOMM\`, windows...
Go로 구현한 Coding Challenge - wc
·
프로그래밍 언어
wcwc는 표준 입력 혹은 파일 내 데이터의 줄 수, 단어 수, 바이트 수를 보여주는 커맨드라인 툴이다. 이번 챌린지의 목표는 이 wc를 구현하는 것이다. 필자의 구현 결과물은 Github에 올려놓았다.들어가기에 앞서사실 이번 글은 이전 글에서 보였던 Step대로 차근차근 구현해가는 방식이 아니다. 사실 wc를 cat보다 먼저 구현했는데, 그 당시에는 맛보기로 했던 지라 Step을 신경쓰지 않고 구현(및 커밋)했다. 이러한 이유로 이번 글은 구현 과정 대신 각 코드 부분들에 대한 해석 위주로 풀어갈 생각이다.gwc.gogwc.go는 메인 함수 파트로 매개변수 및 플래그를 파싱하여 입력 방식 및 단위를 정하고 결과를 얻어내는 함수이다.//gwc.gopackage mainimport ( "flag" ..
Go로 구현한 Coding Challange - cat
·
프로그래밍 언어
Coding Challenge란?Coding Challenge란 기존 툴이나 프로그램을 본인의 방식대로 구현하는 챌린지이다.클론 코딩과의 차이점일반적인 클론 코딩은 웹페이지가 주요 타겟인 반면 이 챌린지는 개발 툴, 프로토콜, 혹은 간단한 GUI 프로그램이 주요 타겟이다. 클론 코딩에 비해 프로그래밍 언어나 기술적인 제약이 없기 때문에 새로운 언어를 익히거나 기존에 쓰던 언어로 구현 능력을 기르기에 적합하다. 또한 단계별 구현 목표가 명시되어 있기 때문에 클론 코딩에 비해 더 정량적인 평가가 가능하다. 더 자세한 소개는 해당 사이트에서 살펴볼 수 있다.Coding Challenge 과제 순서물론 위 사이트의 챌린지 목록 순서대로 해도 상관 없다. 하지만 목록을 쭉 살펴보면 느끼겠지만 난이도가 뒤죽박죽 섞..
Go언어에서의 제네릭 미리보기
·
프로그래밍 언어
이번 Gophercon 2021의 첫번째 세션은 내년 2월에 예정된 메이저 업데이트(v1.18)에 추가될 제네릭에 대한 소개였다. 아마 많은 Gopher(Go언어 이용자)들이 기대한 내용이 아닐까 한다. 아래 영상의 28:40 부근부터 제네릭에 대한 설명이 나온다. Gophercon 2021 Day 1 이번 글에서는 영상에서 발표된 제네릭 관련 내용을 간략하게 정리하고자 한다. 문법 이번 제네릭을 지원하면서 이를 위한 새로운 문법이 추가되었다. 제네릭에 이용할 타입 파라미터 타입들을 묶는 인터페이스 제네릭에서의 타입 추론 각각의 문법에 대해서 알아보자. 타입 파라미터 타입 파라미터는 아래와 같은 형식으로 되어 있다. [식별자 제약, 식별자 제약] 식별자는 함수 혹은 구조체 내에 쓸 타입의 식별자를 의미한..
[서평] 밑바닥부터 만드는 인터프리터 in Go
·
서평
정보 제목 : 밑바닥부터 만드는 인터프리터 in Go 저자 : 토르슈텐 발 (역자 : 박재석) 출판사 : 인사이트 요약 이 책은 저자가 설계한 컴퓨터 언어의 인터프리터를 Go언어로 만드는 일련의 과정을 보여주는 책이다. 인터프리터(혹은 프로그래밍 언어 제작)라는 주제는, 꽤나 매니악한 주제임은 틀림없다. 시중에 해당 주제에 관한 글이나 책을 검색해도 별로 나오지 않을 뿐더러 나오더라도 수박 겉핥기식 아니면 지나치게 이론적이다. 이 책의 저자는 이런 양분화된 난이도의 인터프리터 관련 서적에서 중간에 위치하는, 이론과 용이성을 절충한 책을 내고 싶었다고 머릿말에서 밝혔다. 그리고 이러한 생각은 책 전반에 걸쳐 녹아 있다고 확실히 느껴졌다. 어려운 용어는 되도록 줄이되 어쩔 수 없는 경우 최대한 풀어서 설명하..
chan chan 활용법 - 3. 시그널 채널의 채널로 이용하기
·
프로그래밍 언어
해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 순서가 보장되는 워커풀 패턴으로 이용하는 채널의 채널 활용법에 대해 알아보았다. 해당 활용법은 성능에 초점을 두었다. 이번 활용법은 성능 보다는 구조에 초점을 둔다. 다른 프로젝트에서 이따금씩 쓰이기 때문에 알아두는 것이 좋다. 시그널 채널 시그널 채널은 닫힐 때까지 코드의 실행을 멈추게 하는 채널이다. 원리는 다음과 같다. 채널은 데이터를 보낼 때 해당 채널로 데이터를 받거나 닫힐 때까지 다음 코드로 넘어가지 않고 기다리는 특성이 있다. 그리고 시그널 채널은 기본적으로 데이터를 받지 않도록 한다. 두 문..