목록언어/Go (11)
공대생 정리노트
https://go.dev/doc/effective_go#defer Effective Go - The Go Programming Language Effective Go Introduction Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs different in character from programs written in its relatives. A straightforward translation of a C go.dev Effective Go를 보면 defer가 실행하는 함수의 인자에 들어가는 값은 defer가 실..
레퍼런스 https://dave.cheney.net/2015/12/07/are-go-maps-sensitive-to-data-races https://stackoverflow.com/questions/19148809/how-to-use-rwmutex 문제 상황 상황을 한번 가정해보자. 아무 key-value도 가지지 않는 Map을 가지고 있다고 해보자. 이 Map에 수많은 고루틴들이 랜덤으로 key를 넣어 Read를 시도한다. 만약 value가 있으면 그대로 가져오고, value가 없다면 랜덤으로 만든 value를 key-value 쌍으로 만들어 Map에 넣는다. 즉 각 고루틴은 1. Read를 시도 2. 없으면 Write 을 반복한다. 그렇다면 여기서 Write을 할 때는 Lock을 거는 것이 확실하다..
Go에서는 동시성을 다룰 수 있는 고루틴이라는 훌륭한 기능이 있다. 다만 여러 고루틴이 한 변수에 동시에 접근할 일이 있을 때 race condition이 생길 수 있다. 이번 포스팅에서는 race condition을 제거하는 방법 3가지의 성능을 비교하려고 한다. Mutex chan atomic 채널은 고루틴 간 통신을 할 수 있는 자료구조이다. 채널의 버퍼가 가득차게 되면 다른 고루틴이 채널에서 받아가기 전까지 블락이 되는 것을 이용하여 race condition을 해결한다. atomic 패키지는 lock을 하지 않고 한번에 operation을 할 수 있도록 도와준다. 예를 들어 변수 A의 값을 증가시키고 싶을 때 어셈블리어 명령에서는 A의 값을 로드하고, 증가시키고, 저장하는 3개의 스텝으로 이루어..
코드를 짜다가 여러 파일 디스크립터가 한 파일에 write을 할 때 디스크립터가 close를 하지 않으면 다른 파일 디스크립터로 쓰지 못하는지 햇갈렸다. 찾아보니 학교 전공 시간에 배웠던 것인데 까먹었었다.. 이번 기회에 글로 남겨 확실히 이해하고 넘어가려고 한다. 실험 package main import ( "fmt" "os" "sync" "time" ) func createFileDescriptor(filename string) (*os.File, func()){ fp, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) if err != nil { fmt.Println("err to open file") } close :=..
Functions 다중 반환 값 Go에서는 함수나 메서드가 여러 개의 값을 반환할 수 있다. func (file *File) Write(b []byte) (n int, err error) func nextInt(b []byte, i int) (int, int) { for ; i < len(b) && !isDigit(b[i]); i++ { } x := 0 for ; i < len(b) && isDigit(b[i]); i++ { x = x*10 + int(b[i]) - '0' } return x, i } Named result parameters Go 함수에서는 return에 일반 변수처럼 이름을 줄 수 있다. 이름이 지어지면, 함수가 시작될 때 0으로 초기화가 된다. 만약 함수가 인수 없이 return 구..
원글 https://golang.org/doc/effective_go Effective Go - The Go Programming Language Effective Go Introduction Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs different in character from programs written in its relatives. A straightforward translation of a C golang.org Formatting gofmt가 Go 프로그램을 들여쓰기, 수직 줄맞춤, 주석 refo..
참고자료 www.yes24.com/Product/Goods/24759320 디스커버리 Go 언어 실전에서 쓰는 Go 언어를 익히는 가장 확실한 방법Go는 범용 프로그래밍 언어로, 깔끔하고 간결하게 생산성 높은 프로그래밍이 가능하다. 작성한 코드를 빠르게 컴파일하고 가비지 컬렉션을 지 www.yes24.com 파이프라인 패턴 // PlusOne returns a channel of num + 1 for nums received from in func PlusOne(in
참고자료 medium.com/the-polyglot-programmer/what-are-goroutines-and-how-do-they-actually-work-f2a734f6f991 What are goroutines? And how do they actually work? One of the main reasons that the Go Language has gained incredible popularity in the past few years is the simplicity it deals with… medium.com www.yes24.com/Product/Goods/24759320 디스커버리 Go 언어 실전에서 쓰는 Go 언어를 익히는 가장 확실한 방법Go는 범용 프로그래밍 언어로, 깔끔하고..