Go 언어에서의 서식화 출력과 fmt 패키지 활용

서식 지정자 이해하기 Go는 다양한 데이터 타입을 출력할 때 사용할 수 있는 강력한 포맷팅 기능을 제공합니다. 이는 주로 fmt 패키지의 Printf 계열 함수와 함께 사용됩니다. 카테고리서식 코드설명 일반형%v값의 기본 형식으로 출력 %+v구조체 필드 이름 포함하여 출력 %#vGo 코드 형태로 값 표현 %T값의 타입 출력 %%퍼센트 기호(%) 자체를 출력 불리 ...

6월 8일 22:52에 게시됨

LangChainGo 실전 활용법: Ollama로 Llama3를 로컬에서 구동해 OpenAI 비용 없애기

최근 몇몇 독립 개발자들과 대화를 나누면서 공통적인 고민을 발견했습니다. 대규모 언어 모델(LLM)을 활용한 애플리케이션 개발을 원하지만, OpenAI의 API 비용이 부담스럽다는 점입니다. 호출할 때마다 비용을 계산해야 하고, 프로젝트가 조금만 커져도 청구서가 급증합니다. 더군다나 민감한 데이터를 처리해야 하는 상황에서는 데이터 보안이 큰 문제입니다. 비용을 통 ...

6월 8일 21:30에 게시됨

다중 작업 스케줄링 최적화: 최단 완료 시간 계산

문제 설명 공장은 m개의 생산 라인을 운영하며, n개의 독립적인 작업을 병렬 처리해야 합니다. 시스템은 항상 처리 시간이 가장 짧은 작업부터 우선 배치합니다. 각 작업의 처리 시간이 주어졌을 때, 모든 작업이 완료되는 총 소요 시간을 구하세요. 작업 수가 라인 수를 초과하면, 처음에 처리 시간이 짧은 m개의 작업이 라인에 할당되고, 이후 한 라인이 작업을 완료할 ...

6월 8일 19:40에 게시됨

Go 언어의 핵심 데이터 타입과 변수 시스템

기본 및 복합 데이터 타입 Go는 정형화된 타입 시스템을 기반으로 하며, 변수 선언 시 타입이 명확하게 지정되어야 합니다. 기본적으로 다음과 같은 데이터 타입들을 제공합니다. 기본 타입 bool: 불리언 값 (true/false) 정수형: int8, int16, int32, int64, uint8(byte), uint32, uint64 등 실수형: float32, float64 복소수형: complex64, complex128 문자 ...

6월 6일 17:01에 게시됨

gRPC-Gateway V2를 활용한 클라우드 네이티브 API 게이트웨이 개발 소개

gRPC는 모든 상황에서 최적의 솔루션은 아닙니다. 특정 경우엔 전통적인 HTTP/JSON API를 제공해야 할 수 있습니다. 이는 호환성 유지, 특정 언어 지원 부족 또는 gRPC가 효과적으로 처리하지 못하는 클라이언트 지원 등 다양한 이유에서 발생할 수 있습니다. 하지만 HTTP/JSON API를 별도로 구현하는 일은 시간과 노력을 많이 요구합니다. 이러한 문제를 해결하기 위한 ...

6월 4일 20:30에 게시됨

Go 언어에서 변수와 상수 다루기

변수 선언의 기본 Go에서는 var 키워드를 사용해 변수를 선언할 수 있습니다. 이 방식은 변수 이름과 자료형을 명시하며, 초기값을 동시에 할당할 수도 있습니다. package main import "fmt" func main() { var name string = "kim" fmt.Println(name) } 여기서 name은 문자열 타입의 변수이며, 값으로 "kim"을 가지게 됩니다. Go는 정적 타입 언어 ...

6월 4일 17:09에 게시됨

Go 프로세스 메모리 사용량 분석 (2)

가장 간단한 Go 프로그램 package main import ( "fmt" "time" ) func main() { fmt.Println("hello") for { time.Sleep(1 * time.Second) } } 디버깅 심볼을 제외한 바이너리 크기는 1,229,464 바이트 (약 1.2 MiB) 입니다. 컴파일된 바이너리를 readelf 도구로 확인해보면, Program Header에 3개의 로드 가능한 세그먼트가 있음을 알 수 있습니다. Program Hea ...

6월 4일 02:47에 게시됨

Go 언어 핵심 개념 정리

메서드 접근 제한 Go에서는 메서드 이름의 첫 글자가 소문자면 패키지 내부에서만 접근 가능하며, 대문자로 시작하면 외부 패키지에서도 사용 가능하다. 시간 처리 기법 // 현재 시간 타임스탬프 가져오기 timestamp := strconv.Itoa(int(time.Now().Unix())) // 특정 시간 이전 타임스탬프 계산 (예: 30분 전) var seconds int64 switch duration { case "15m": sec ...

6월 3일 21:19에 게시됨

Go 언어로 직접 구현하는 컨테이너 런타임: run 명령어와 Namespace 격리

컨테이너 기술의 핵심인 docker run과 유사한 기능을 Go 언어로 직접 구현해 봅니다. Linux Namespace를 활용하여 프로세스를 격리하고, 자체적인 init 프로세스를 통해 컨테이너 환경을 초기화하여 사용자 지정 프로세스를 PID 1로 실행하는 과정을 다룹니다. CLI 프레임워크 구성 커맨드 라인 인터페이스를 구축하기 위해 urfave/cli 라이브러리를 사용합니다. 이 라이 ...

6월 2일 23:51에 게시됨

Go 언어 타이밍 제어: Timer, Ticker 및 이벤트 루프 설계 패턴

서론: Go 의 시간 기반 제어 메커니즘 Go 프로그램에서 시간 관련 로직을 구현할 때 time 패키지는 두 가지 주요 접근 방식을 제공합니다. 첫 번째는 특정 시간이 경과한 후 단 한 번만 실행되는 Timer, 두 번째는 설정된 간격으로 지속적으로 이벤트를 발생시키는 Ticker입니다. 이 둘은 채널 (Channel) 기반의 통신 모델을 사용하여 고루틴 간의 동기화를 가능하게 합니 ...

6월 2일 16:00에 게시됨