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 이번 글에서는 영상에서 발표된 제네릭 관련 내용을 간략하게 정리하고자 한다. 문법 이번 제네릭을 지원하면서 이를 위한 새로운 문법이 추가되었다. 제네릭에 이용할 타입 파라미터 타입들을 묶는 인터페이스 제네릭에서의 타입 추론 각각의 문법에 대해서 알아보자. 타입 파라미터 타입 파라미터는 아래와 같은 형식으로 되어 있다. [식별자 제약, 식별자 제약] 식별자는 함수 혹은 구조체 내에 쓸 타입의 식별자를 의미한..
chan chan 활용법 - 3. 시그널 채널의 채널로 이용하기
·
프로그래밍 언어
해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 순서가 보장되는 워커풀 패턴으로 이용하는 채널의 채널 활용법에 대해 알아보았다. 해당 활용법은 성능에 초점을 두었다. 이번 활용법은 성능 보다는 구조에 초점을 둔다. 다른 프로젝트에서 이따금씩 쓰이기 때문에 알아두는 것이 좋다. 시그널 채널 시그널 채널은 닫힐 때까지 코드의 실행을 멈추게 하는 채널이다. 원리는 다음과 같다. 채널은 데이터를 보낼 때 해당 채널로 데이터를 받거나 닫힐 때까지 다음 코드로 넘어가지 않고 기다리는 특성이 있다. 그리고 시그널 채널은 기본적으로 데이터를 받지 않도록 한다. 두 문..
chan chan 활용법 - 2. 순서가 보장되는 워커 풀 패턴으로 이용하기
·
프로그래밍 언어
해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 채널을 변수로 취급하는 채널의 채널 활용법에 대해 알아봤다. 채널의 채널을 보게 된다면(채널의 채널 자체가 흔하지는 않겠지만) 해당 형태로 가장 많이 볼 것이다. 다음 두 글에 걸쳐 설명할 활용법들은 흔히 보이지 않을 뿐더러 해당 방법들을 몰라도 Go언어를 사용하는 데에 있어서 문제는 없을 것이다. 하지만 특정 상황에서는 요긴하게 쓰이리라 장담할 수 있다. 이번 글에서는 이 중 특정 상황에서 성능을 크게 끌어올릴만한 방법을 소개하고자 한다. 워커 풀 패턴 이에 앞서 생소할 수 있는 워커 풀 패턴에 관해 이..
chan chan 활용법 - 1. 채널을 변수로 취급하기
·
프로그래밍 언어
해당 글은 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어를 어느 정도 알고 있는 독자를 대상으로 한다. Go 언어의 채널(chan)은 특정 자료형의 변수들의 통로이다. 그리고 채널 역시 하나의 자료형이다. 즉, 채널 타입을 받는 채널 역시 문법적으로는 가능하다. 다만, 통로의 통로라는 것은 꽤나 이상하게 들린다. 이렇게 이해부터 쉽지 않은 채널의 채널(이하 chan chan)은 과연 이론의 영역에만 머무를까? 당연히 이 글을 작성한 이유는 chan chan이 나름 실용적으로 이용될 수 있다는 것을 보여주기 위함이다. 필자는 chan chan의 활용법을 3가지로 분류했으며 3개의 글로 나눠서 설명할 예정이다. 해당 글은 이 중 가장 직관적인 활용법에 대해 설명하고자 ..
[Things of Go] Go언어에서의 함수 객체 활용 방안 - 기본편
·
프로그래밍 언어
Go언어에서는 함수는 1급 객체이다. 즉, 함수 객체는 숫자나 문자열 같은 변수처럼 쓸 수 있다. 다만 이러한 성질이 있다는 것은 알아도 활용하는 것은 다른 문제이다. 커뮤니티에서도 Go언어로 함수형 프로그래밍을 하는 것을 적극적으로 추천하지는 않는다. 하지만 함수 객체는 특정한 상황에서는 뛰어난 해결책이 될 수 있다. 해당 글에서는 함수 객체를 실제로 이용하기에 앞서 Go언어에서의 함수 객체의 정의와 기본적인 문법에 대해 설명하도록 하겠다. 함수의 기본 Go언어의 함수는 다음과 같은 형태이다. func 함수명(매개변수) 반환값 { 구현부 } 함수를 변수처럼 쓰기 위해서는 그에 맞는 자료형으로 선언해야 한다. 그렇다면 함수의 자료형은 어떤 모습일까? 함수의 형태 모든 함수가 같은 자료형은 아니다. 함수는..
[Things of Go] 얕은 복사와 깊은 복사
·
프로그래밍 언어
해당 글은 독자가 Go언어의 기본적인 문법과 포인터 혹은 참조 자료형의 개념에 대해 알고 있다고 가정한다. 변수 복사 프로그래밍 언어를 어느 정도 다룰 줄 알게 되면 항상 유의해야 하는 부분이 있다. 바로 변수의 복사이다. 변수의 복사라고 거창하게 말했지만 한 변수값을 다른 변수값에 할당하는 것이다. var a int = 3 var b int = a //복제 위에 예시로 든 int형같이 기본 자료형은 위와 같이 할당문으로 복사해도 별 문제가 되지 않는다. 그러나 자료형이 참조형일 때는 이야기가 다르다. 예시를 들기 위해 다음의 클래스를 준비했다. package main import ( "bytes" "encoding/gob" "fmt" ) type Pos interface { Print() Copy() ..