개요 golang에서 네이티브로 지원하지 않는 자료구조를 구현 다양한 타입 지원을 위해 빈 인터페이스 사용 이후 제네릭과 비교했을 때, 제네릭에 비해 성능이 떨어짐 https://velog.io/@natae/golang-generic-vs-empty-interf
코드 출력 추론 전역 변수와 로컬 변수의 메모리 주소대가 완전히 다름 ex. 0x1023~, 0x140001~ 메모리 영역은 일반 변수, Slice 포인터 변수, 포인터 변수 세 영역으로 나뉨 ex. 0x10239~, 0x102364~, 0x102363~ map,
개요 golang은 가비지 콜렉션으로 인한 성능 저하를 최소화 하기 위해 압축과 세대별GC를 사용하지 않음 java, C# 등 가상머신 기반에서는 압축과 세대별GC를 사용함 압축: 가비지 콜렉션 이후 메모리 단편화를 막기 위해 메모리 빈공간 없이 당겨오는 작업
개요 함수의 일반 리시버와 포인터 리시버의 차이에 대해 여거에 인터페이스까지 사용한다면? 코드 결론 구조체 함수가 일반 리시버의 경우 call by value, 포인터 리시버의 경우 call by reference로 동작 구조체 선언을 일반이든, 포인터든 구조체 함
개요 Go 1.18 버전부터 제네릭을 지원함 제네릭과 유사하게(?) 사용하기위해 빈 인터페이스를 사용했었는데, 제네릭과 직접 성능 비교 빈 인터페이스 방식은 실제 사용하려면 추가적인 타입 변환이 필요하기 때문에, 제네릭이 우세할 것 같음 코드 interface_qu
개요 golang에서 얕은 복사, 깊은 복사 구현 실제 메모리 주소를 출력하여 차이 확인 코드 study/copy.go main.go 추가 설명 깊은 복사는 신규 변수에 기존 변수의 멤버를 일일히 복사하는 방식과 직렬화를 이용해 복사하는 방식이 있음 위 코드는 후자
golang에서 다양한 직렬화 벤치마크 테스트간단한 특징 (golang 기준)gob: 기본 패키지에 포함, 다른 언어에서 지원 안함bson: mongoDB 패키지의 일부protobuf: protoc, protoc-gen-go 등 준비할 게 많음messagepack: 무
고루틴을 통해 동시성 처리시 항상 성능이 좋은지 확인작업이 간단한 경우, 고루틴으로 동시성 처리를 하면 성능이 오히려 떨어짐고루틴이 go 키워드에서 즉시 시작하는게 아닌, 스케줄링 되는 방식이 원인으로 추정작업이 비교적 복잡한 경우(=시간이 걸리는 경우), 성능 측면에
개요 런타임중 panic이 발생했을 경우, stacktrace가 출력되고 프로그램이 종료됨 panic은 다른 언어의 Exception과 유사 recover 및 추가 작업을 통해 프로그램 종료 없이 stacktrace 출력 구현 recover는 다른 언어의 try
go 언어 프로그래밍 연습을 위해, 대기열 시스템을 구현수강신청이나 게임 로그인 대기열 등작업은 멀티쓰레드 환경에서 요청할 수 있다동일한 작업은 처리되기 전까지 다시 요청할 수 없다대신 앞에 남은 대기열을 알려준다 (ex. 수강신청 또는 게임 로그인 대기열)작업이 완료
버퍼 없는 채널 사용시 쓰기, 읽기가 동시에 일어나지 않으면 블락이 발생할 수 있음select를 통해 비동기로 구현아래 예시는 이번 주제를 설명하기에 적절하지 않을 수 있음 (채널과 고루틴 없이 충분히 구현 가능)하지만 핵심 부분만 간단하기 설명하기 위함실제 참고한 코