일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Callback
- package
- http
- write
- windows
- 책
- Linux
- API
- 리뷰
- Golang
- Sync
- json
- FOR
- tcp
- Close
- Python
- install
- bitcoin
- channel
- c++
- JavaScript
- go
- range
- GO 언어
- File
- go언어
- window
- 영화
- mutex
- C
- Today
- Total
목록전체 글 (203)
Code Habit
채널에 버퍼 개수를 지정할 수 있다. 이를 채널 버퍼링이라 한다. make(chan 자료형, 버퍼개수) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(1) done := make(chan bool, 3) // 버퍼가 2개인 비동기 채널 생성 count := 20 // 반복할 횟수 go func() { for i:=0; i
채널은 고루틴끼리 데이터를 주고받고, 실행 흐름을 제어하는 기능이다. 모든 타입은 채널로 사용할 수 있다. 그리고 채널 자체는 값이 아닌 레퍼런스 타입이다. 채널은 다음과 같이 공간을 할당 후 사용해야 한다. 이렇게 생성하면 동기 채널( synchronous channel )이 생성된다. make(chan 자료형) 채널은 다음과 같이 사용한다. 채널
함수 안에서 클로저를 정의한 뒤 고루틴으로 실행할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(1) // 사용할 CPU 개수 1 설정 s := "Hello world !" for i := 0; i
고루틴은 함수를 동시에 실행시키는 기능이다. 스레드보다 문법이 간단하고 리소스를 적게 사용한다. 사용 예제이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package main import ( "fmt" "math/rand" "time" ) func hello(n int) { r := rand.Intn(100) // 랜덤한 숫자 생성 time.Sleep(time.Duration(r))// 랜덤한 시간 동안 대기 fmt.Println(n) } func main() { for i:=0; i

"달리면서 무기를 주워라" 책을 읽는 동안 이 한마디가 가슴에 와닿았다. 생각해보면 난 열심히는 살지만 실행력이 있는 사람은 아니었다. 무슨 일을 하든 준비되어 있지 않으면 시작을 잘 못했던 것 같다. 심할땐 학생 때 모의고사를 볼때도 앞시간 (언어 영역)을 망치면 뒤에 과목들도 망치거나 종국에는 반쯤 포기한 채로 시험을 봤던 것 같다. 현재도 코딩을 할 때 무언가를 짜기 전에 앞에 생각이 많아 들이는 시간 대비 효율이 잘 나오지 않는 경우가 많았는데 ( 물론 덕분에 그래도 조금은 꼼꼼한 이점은 있었다...! ) 요즘 들어 점점 이런 방식이 옳지 못하다는 생각이 점점 들구 있었다. 그런데 마침 이 책에서 해답을 제시해준 것 ! 사실 생각해보면 코딩 전 설계 단계에서도 아직 경험이 부족해서 그런지 어떤식으..
각 값이나 인스턴스의 실제 타입은 상관하지 않고 구현된 메서드로만 타입을 판단하는 방식을 덕 타이핑(Duck typing)이라 한다. 이는 go 언어에만 국한된 것은 아니고 다른 언어에도 공용되는 개념이다. ex ) c++의 상속개념 사용 예제이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 package main import "fmt" type Duck struct { } func (d Duck) quack() { // 오리의 quack 메서드 정의 fmt.Println("오리 : 꽥 ~ !") } func (d Duck) feath..
윈도우 프로그램 종료시 사용되는 함수에 따른 차이점을 정리해 보겠다. TerminateProcess 자기 자신이 아닌 다른 프로세스를 종료시킬 수 있음. 정리 작업을 하지 않기 때문에 되도록 사용하지 않는 것이 좋음. 메모리릭 발생 위험 있음. PostQuitMessage 단지 메시지 맵에 WM_QUIT 메시지만 전달하는 것이기 때문에 이 명령의 다음 코드도 실행이 됨. 메모리릭 발생 위험 있음. ExitProcess 프로세스와 연결된 모든 DLL을 종료시키기 위해 각 DLL의 DllMain함수가 호출되며 DLL들은 스스로 정리작업을 시도함. 모든 열려진 핸들을 닫음.(핸들 테이블 제거) 프로세스 커널 객체와 쓰레드 객체의 상태가 신호상태로 되며 이 신호를 기다리는 다른 프로세스 대기 상태를 해제할 수 ..
인터페이스는 메서드 집합이다. 단 인터페이스는 메서드 자체를 구현하지는 않는다. type 인터페이스명 interface {} 인터페이스 정의 예제이다. 1 2 3 4 5 6 7 8 9 10 11 package main import "fmt" type hello interface { // 인터페이스 정의 } func main() { var h hello // 인터페이스 선언 fmt.Println(h) // nil: 빈 인터페이스이므로 nil이 출력됨 } 메서드를 가지는 인터페이스를 정의해 보자. type 인터페이스명 interface { 메서드 } 인터페이스 활용 예제이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28..