본문 바로가기

728x90

IT 일기/GO

Go 컨텍스트란? Cancle, Deadline, Timeout, Value Go에서 컨텍스트는 조건과 같은 기능을 한다. 예를 들어 특정 go루틴에게 1. 내가 이 명령어를 사용하면 멈춰! 2. 이 시간까지만 작동해! 3. 이 시간동안만 작동해! 4. 이거 갖고 가! 등의 조건을 달아서 실행할 수 있다. 하나씩 예시와 함께 살펴보자 1. 멈춰!!! WithCancle() package main import ( "context" "fmt" "time" ) func longRunningTask(ctx context.Context) { fmt.Println("background long running task launched") select { case cancelFunc() 실행 => ctx.Done채널에 값 넣어짐 => longRunningTask에서 select로 ctx.Don.. 더보기
Go 채널이란? 동시성 프로그래밍에서 가장 중요한 문제는 같은 메모리 영역에 동시에 접근해서 생기는 race condition 문제이다. 이 문제를 해결하기 위해 mutex, semaphore등 특정 영역에 대한 lock과 unlock을 걸어 특정 메모리 영역에 동시에 접근하지 못하게 한다. Go에서도 mutex.lock, mutex.unlock을 사용할 수 있지만 이 경우 해당 영역을 읽고 쓰는 모든 영역에 lock, unlock을 해줘야 한다. 코드 복잡성을 늘릴 수 있다. 그렇다고 무조건적으로 channel만 사용해야 하는건 아니다. 다음 글들을 통해 channel만 사용하는 것은 좋지 않다는 것을 알 수 있다. https://blog.naver.com/PostView.naver?blogId=sjc02183&log.. 더보기
What is GoRoutine? Go루틴은 고에서 concurrency(동시성)을 다루기 위한 도구이다. concurrency에 대한 설명은 parallelism과의 차이를 통해 설명하는게 이해에 가장 좋은듯 하다. Concurrency VS Parallelism 비유적 표현으로 설명하자면 한 광대가 "저글링 돌리기 => 훌라후프 10개 하기 => 공 타기" 순차적으로 관객에게 보여주면 concurrency이고 "저글링을 돌리면서 훌라후프 10개를 하면서 공 타기"를 동시에 하면 Parallelism이다. 그럼 Go루틴은 왜 Concurrency일까? 이를 이해하기 위해선 Go루틴이 어떤 구조로 동작하는지 살펴볼 필요가 있다. How Go routine work G = Goroutine M = OS Thread P = Processor.. 더보기
Go Slice 사용법, 구조 그리고 append() 원리까지 Deep Dive Go array는 정적 배열이고 동적 배열은 Slice이다. 기본적인 사용법은 간단하다. 선언 및 초기화 방법들 var slice []int //크기가 0이고 요소 타입이 int인 slice 생성 var slice []int = []int{1,2,3} // 크기가 3이고 요소로 1,2,3을 갖는 슬라이스 var slice = []int{1, 5: 2, 10: 3} //[1 0 0 0 0 2 0 0 0 0 3] 5번째에 2를 10번째에 3을 넣어서 초기화 var slice = make([]int, 3) // 크기가 3이고 각 요소는 type별 default로 초기화 (int의 경우 0임)\ var slice = make([]int, 3,5) // len == 3 , cap == 5 순회 for i:=0; .. 더보기
Understand SOLID in Go https://en.wikipedia.org/wiki/SOLID SOLID - Wikipedia From Wikipedia, the free encyclopedia Object-oriented software engineering design principles This article is about the SOLID principles of object-oriented programming. For the fundamental state of matter, see Solid. For other uses, see Solid (disambiguatio en.wikipedia.org SOLID는 Object-oriented design을 더욱 understandable, flexible, and mainta.. 더보기
vscode Terminal 설정 변경 (Go에서 sqlite3 사용하기) Go에서 sqlite3을 사용하는 과정에서 생긴 문제가 있다. sqlite3을 사용하기 위해선 다음의 단계를 거친다. 1. sqlite3 다운로드 2. sqlite3 path 등록 1. sqlite3 다운로드 https://www.sqlite.org/download.html SQLite Download Page Templates (1) and (2) are used for source-code products. Template (1) is used for generic source-code products and templates (2) is used for source-code products that are generally only useful on unix-like platforms. Templa.. 더보기
HTTP/1.1 persistent-connection 사용 예시 네트워크를 공부하다 보면 "그래서 이걸 어디다 써먹지"라는 생각을 할 때가 많다. HTTP에 대해 공부하던 중 1.1 버젼의 persistent-connection을 실제로 구현해서 확인해보는 글이 있어 가져왔다. (가져왔다 == 번역 + 주관적 의견 추가) 구현 언어는 Go다. (최근에 Go를 공부해서 이해할 수 있는 건진 모르지만 코드가 갱장히 짧으니 이해할 수 있을 것이다) 1. HTTP의 stateless HTTP 1.0에 들어서며 http의 구조에 content-type을 적을 수 있는 Header 타입이 추가되며, 인터넷상의 많은 데이터 정보를 url을 통해 주고 받을 수 있게 됐다. 이것이 의미하는 바는, 이전 버전에 비해 server와 data를 주고 받을 일이 많아졌다는 것이다. 하지만 .. 더보기

728x90