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...
더 읽기

golang - web

시작 기본적으로 필요한 것은 net/http 패키지에 있다. import "net/http" 이것만으로 기본적인 HTTP 리퀘스트와 리스폰에 관한 처리를 실시할 수 있다 http.Handle("/foo", fooHandler) http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) }) log.Fatal(http.ListenAndServe(":8080", nil)) 여기서 http.Handle, http.HandleFunc을 사용하면 DefaultServerMux 이라는...
더 읽기

golang - new와 make의 차이

원문 정리 차이를 간략하게 설명한다.   new(T) make(T) 대상 임의의 타입 slice, map, channel 만 초기화 초기화 하지 않는다(0 값으로 된다) 초기화 한다 반환 값 *T T 대상 및 초기화에 대해 new()와 make()에서 초기화 하지 않는/하는의 차이는 slice, map, channel이...
더 읽기

golang - 구조체

아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다. 구조체 만들기 package main import ( "log" ) type Money struct { amount uint currency string } func main() { money := &Money{120, "yen"} // 포인터로 생성 log.Printf("%#v", money) }...
더 읽기

C# 오픈 소스 네트워크 라이브러리 FreeNet

FreeNet은 C#으로 온라인 게임 서버 만들기의 저자 이석현님이 Github에 공개한 네트워크 라이브러리이다. 책을 먼저 보면 코드 이해가 쉽다. C# 오픈 소스 네트워크 라이브러리로 SuperSocket이 유명한데 이 라이브러리는 기능이 많은만큼 복잡한데 FreeNet은 필수 기능만 있어서 분석하기도 좋다. 그래서 C# 네트워크 프로그래밍...
더 읽기