golang - WebFramework gin

아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 개요 공식페이지 비교적 경량, 간단한 인터페이스를 갖추 프레임워크 벤치마크 설치 go get github.com/gin-gonic/gin hello World package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // 1. http://localhost:8080/...
더 읽기

golang - or-done-channel로 코드 가독성을 높인다

원문 Go 병렬 패턴 for-select loop or-channel or-done-channel tee-channel fan-in, fan-out 등이 있다. 어떤 때 or-done-channel을 사용하나 상한 수가 정해져 있는 것 같은 처리를 할 경우 데이터 소스에서 입력이 끝나 버린 경우(channel의 close에 대응) 최대 수에 도달 한 경우(done에 대응)...
더 읽기

AppImage 패키지

Linux 배포본 중에서 AppImage 형식으로 배포되는 것이 있다. 설치 방법은 실행 권한을 부여하고, 실행만 하면 되기 때문에 매우 간단하다. 이 패키지 배포 형식이 보급되면 좀 더 Linux에서 앱 설치 및 사용이 쉬워질 것이다. 다운로드 한 파일(예를 들어 exampleName.AppImage 라고 한다)에...
더 읽기

golang - 주기적으로 실행하는 패턴

main에서는 아래와 같이 ctx를 만들어서 periodicLoop에 넘기고, 멈추고 싶을 때는 cancel()을 호출한다. func main() { ... ctx, cancel := context.WithCancel(context.Background()) defer cancel() go periodicLoop(ctx, 2*time.Second) /* call cancel() to stop */ } func doPeriodically(t time.Time) { /* do something */...
더 읽기

golang - Go 애플리케이션을 Supervisor로 대몬화

원문 Go는 언어 레벨에서 daemon화가 지원되지 않으므로 Supervisor 이나 systemd로 daemon화 한다. Supervisor 도입 sudo apt-get install supervisor Go 애플리케이션 빌드 go build hoge supervisord.conf 편집 sudo vim /etc/supervisor/supervisord.conf 아래 내용을 기록 [program:hoge] command = /path/to/hoge autostart = true startsecs...
더 읽기

golang - 고루틴과 콜스택

고루틴이 기동한 시점에서 함수의 콜스택이 분리된다. panic은 고루틴의 콜스택을 돌아간다. 즉 defer & recover는 panic이 발생한 고루틴 내에서 사용해야 한다. 일바 함수 호출 고루틴을 포함한 함수 호출
더 읽기

MS 기술 문서 번역하기

MS의 기술 문서는 예전에는 MSDN을 통해서 제공했지만 몇년 전부터는 https://docs.microsoft.com 을 통해서 제공하고 있다. (이전에 만든 문서는 아직 MSDN에 있다) https://docs.microsoft.com 의 장점은 한글로 번역되어 있지 않는 문서를 MS가 번역 해주기만을 기다리지 않고, 커뮤니티에서 직접 번역해서 반영할 수 있다는 것이다....
더 읽기

golang - 추첨 기능 라이브러리 lottery

github 추첨 기능 라이브러리 random을 랩핑 지정한 확률 20%의 확률로 ~ 같은 처리를 하고 싶을 때 lot : = lottery.New (rand.New (rand.NewSource (time.Now () UnixNano ()))) if lot.Lot ( 20 ) { // 20% 일 때의 처리 } 추첨 목록에서...
더 읽기

C++ - segmentation fault를 보완해주는 로그를 출력하자

출처 C++ 서버(Linux)가 크래쉬 되는 버그로 고생해서 segmentation fault를 보완해주는 로그를 출력하는 기능을 만들어 보았다. 코드 CrashReporter.hpp #pragma once class ICrashReporter { public: virtual void CrashReport() = 0; }; class CCrashReporter { public: static void Setup(); static void AddReporter(ICrashReporter*); static...
더 읽기