C# 7.3의 새로운 기능

출처 Overload 해결 버전 1.0의 C#에서 overload의 해결 규칙은 의문이 남는 디자인이었다. 어떤 상황에서 두 개 이상의 메소드가 후보가 되는데, 하나 밖에 사용할 수 없다. 우선 순위에 따라 잘못된 방법을 선택하거나 컴파일러가 일치하는 메소드를 찾지 못하거나 일치하지만 모호한 경우가 있다....
더 읽기

golang - 구조체의 정확한 크기 계산하기

golang의 구조체도 c/c++과 같이 패딩이 있다. type PacketHeader struct { N1 int32 N2 int16 N3 int64 } 위 구조체를 unsafe.Sizeof를 하면 패딩 때문에 크기가 16이 나온다. (sizeof가 기본 기능이 아니고 unsafe 패키지를 사용해야 한다.) 구글링을 해 봐도 #pragma pack(1) 같은...
더 읽기

C++ - 안전한 문자열 조작 함수

문자열 복사 strcpy_s, strcpy, _tcscpy_s, wcscpy, wcscpy_s 대체 추천 함수 strncpy_s(char), _tcsncpy_s(TCHAR) , wcsncpy_s(wchar_t) errno_t wcsncpy_s( wchar_t *strDest, strDest의 크기, const wchar_t *strSource, 복사할 문자 수 ); wchar_t szDest[256] = {0,}; wchar_t szSource[] = L"TEST"; wcsncpy_s( szDest, 256, szSource, 4...
더 읽기

C++ - C++/CLI

클래스(class), 핸들(^) C++/CLI에서 관리 클래스는 ‘ref’라는 키워드를 사용하여 만든다. 비 관리 클래스 class Test { }; 관리 클래스 ref class Test { }; 관리 클래스는 ‘ref’를 제외하고는 외관상으로는 비 관리 클래스와 비슷하지만 관리와 비 관리가 많이 다르듯이 관리 클래스는 비...
더 읽기

golang - 패닉 발생 시 stack trace 출력

아래 코드는 어떤 오픈 소스에서 본 것을 아주 약간 변경한 것이다. 보기 좋게 출력하기 위해 go-spew 라는 오픈 소스 라이브러리를 사용하였다. import ( "fmt" "runtime" "github.com/davecgh/go-spew/spew" ) func PrintPanicStack(extras ...interface{}) { if x := recover(); x != nil { fmt.Println("%v",...
더 읽기

ASP.NET Core 하나의 호스트에서 http와 socket 통신 같이 하기

Github ASP.NET Core의 Kestrel을 사용하여 TCP Socket 프로그래밍을 할 수 있다. MultiProtocolAspNetCore 프로젝트의 Program.cs 파일의 내용은 아래와 같다. public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseKestrel(options => { // TCP 8007 options.ListenLocalhost(8007, builder => { builder.UseConnectionHandler<MyEchoConnectionHandler>(); }); // HTTP 5000...
더 읽기