Go는 문자열을 다루기 위해서 표준 라이브러리 형식의 strings 패키지를 제공한다. strings 패키지의 몇 가지 사용방법을 살펴보려 한다.자주 사용하는 fmt.Println를 대신하기 위해서 짧은 이름의 변수를 만들었다. strings 패키지가 제공하는 함수는 에서 확인 할 수 있다.다음 예제 ...
Defer은 코드가 종료된 뒤에 수행할 함수를 설정하기 위해서 사용한다. 자원을 정리(cleanup)하기 위한 목적으로 주로 사용한다. 다른 언어의 encure와 finally와 비슷한 일을 한다.이 프로그램은 파일을 /tmp 디렉토리에 파일을 만들고, 간단한 문자열을 쓴 다음에 닫는 일을 한다. 10번째 줄에 defer를 이용해서 closeFile() 함...
panic은 예상치 못한 문제가(unexpected errors) 발생 했음을 알려주기 위해서 사용한다. 보통 우아하게(gracefully)하게 처리할 수 없는 치명적인 에러에 대해서 즉시 처리 하기 위해서 사용한다.예제는 panic()함수를 이용해서, 예상치 못한 문제의 발생을 시뮬레이션했다. panic()은 에러를 평가 할 수 없을 때, 기능을 아예 중...
프로그램을 만들다 보면, 내장된 sort 패키지로는 원하는 정렬을 할 수 없을 때가 있다. 예를 들어 문자열을 알파벳 순서가 아닌 문자열의 길이로 정렬해야 한다면, custom 함수를 구현해야 한다. Custom 정렬 함수를 만들기 위해서는 그에 맞는 타입을 준비해야 한다. 예제에서는 string 타입의 alias인 ByLength타입을 만들었다. 이제 s...
Go 언어의 sort 패키지를 이용해서 내장 자료와 유저 정의 자료를 정렬할 수 있다. 먼저 내장 자료를 정렬하는 것을 살펴보자.string 배열과 int형 배열을 정렬하는 간단한 예제로 In-place(제자리) 정렬이기 때문에, 정렬된 값을 반환하지 않는다. sort.Strings()으로 string 슬라이스를, sort.Ints로 int형 슬라이스를 정...
앞 장에서 원자연산을 이용한 카운터의 구현을 살펴봤다. 여기에서는 뮤텍스(Mutex)를 이용해서 비슷한 구현을 해보려 한다. 애초에 원자적 연산은 뮤텍스를 주로 이용하니, 일반적인 방법이라고 할 수 있겠다. 뮤텍스는 자원에 대한 접근을 한번에 하나씩제어하기 위해서 사용한다. 이 코드에서 관리할 자원은 map자료구조인 state다. 뮤텍스 객체는 sync.M...
지금까지 고루틴간 통신에는 채널을 사용했다. 실제 채널은 고루틴간 커뮤니케이션을 하기 위해서 가장 널리 사용하는 메커니즘이다. 하지만 채널외에도 사용 할 수 있는 몇 가지 옵션들이 있다. aync/atomic을 이용해서 고루틴간 atomic counter을 구현 해보도록 하자. 이 코드는 ops를 카운트 한다. 50개의 고루틴이 for 루프를 돌면서 ops...
Rate Limitng는 주로 NIC(Network Interface Controller)에서 입력과 출력 트래픽의 양(rate)을 제어하기 하기 위해서 사용한다. 이 외에 컴퓨팅 자원을 나눠서 사용해야 하거나 QoS를 위해서 사용 한다. Go에서 제공하는 채널과 tickers를 이용하면 고루틴에 대한 Rate limiting을 손쉽게 구현할 수 있다. 9...
고루틴과 채널을 이용해서 워커풀을 만들어보자.worker 함수는 고루틴을 이용해서 cuncurrent 하게 실행한다. 작업은 jobs 채널로 받고, 결과는 results 채널로 보낸다. job 실행에 드는 비용은 time.Sleep()메서드로 시뮬레이션 했다. main() 고루틴은 jobs 채널과 results 채널을 만들고, 이들을 매개변수로 해서 wor...
429 POSTS HERE
예제로 살펴보는 Go : String Formatting
fmt패키지에서 제공하는 Printf메서드를 이용해서, 형식화된 출력을 할 수 있다.fmt 패키지의 형식화된 출력에는 디버깅 목적으로 사용 할 수 있는 여러가지 출력 옵션들을 가지고 있다....
예제로 살펴보는 Go : String Functions
Go는 문자열을 다루기 위해서 표준 라이브러리 형식의 strings 패키지를 제공한다. strings 패키지의 몇 가지 사용방법을 살펴보려 한다.자주 사용하는 fmt.Println를 대신하기 위해서 짧은 이름의 변수를 만들었다. strings 패키지가 제공하는 함수는 에서 확인 할 수 있다.다음 예제 ...
예제로 살펴보는 Go : Defer
Defer은 코드가 종료된 뒤에 수행할 함수를 설정하기 위해서 사용한다. 자원을 정리(cleanup)하기 위한 목적으로 주로 사용한다. 다른 언어의 encure와 finally와 비슷한 일을 한다.이 프로그램은 파일을 /tmp 디렉토리에 파일을 만들고, 간단한 문자열을 쓴 다음에 닫는 일을 한다. 10번째 줄에 defer를 이용해서 closeFile() 함...
예제로 살펴보는 Go : Panic
panic은 예상치 못한 문제가(unexpected errors) 발생 했음을 알려주기 위해서 사용한다. 보통 우아하게(gracefully)하게 처리할 수 없는 치명적인 에러에 대해서 즉시 처리 하기 위해서 사용한다.예제는 panic()함수를 이용해서, 예상치 못한 문제의 발생을 시뮬레이션했다. panic()은 에러를 평가 할 수 없을 때, 기능을 아예 중...
예제로 살펴보는 Go : Sorting by Functions
프로그램을 만들다 보면, 내장된 sort 패키지로는 원하는 정렬을 할 수 없을 때가 있다. 예를 들어 문자열을 알파벳 순서가 아닌 문자열의 길이로 정렬해야 한다면, custom 함수를 구현해야 한다. Custom 정렬 함수를 만들기 위해서는 그에 맞는 타입을 준비해야 한다. 예제에서는 string 타입의 alias인 ByLength타입을 만들었다. 이제 s...
예제로 살펴보는 Go : Sorting
Go 언어의 sort 패키지를 이용해서 내장 자료와 유저 정의 자료를 정렬할 수 있다. 먼저 내장 자료를 정렬하는 것을 살펴보자.string 배열과 int형 배열을 정렬하는 간단한 예제로 In-place(제자리) 정렬이기 때문에, 정렬된 값을 반환하지 않는다. sort.Strings()으로 string 슬라이스를, sort.Ints로 int형 슬라이스를 정...
예제로 살펴보는 Go : Mutexes
앞 장에서 원자연산을 이용한 카운터의 구현을 살펴봤다. 여기에서는 뮤텍스(Mutex)를 이용해서 비슷한 구현을 해보려 한다. 애초에 원자적 연산은 뮤텍스를 주로 이용하니, 일반적인 방법이라고 할 수 있겠다. 뮤텍스는 자원에 대한 접근을 한번에 하나씩제어하기 위해서 사용한다. 이 코드에서 관리할 자원은 map자료구조인 state다. 뮤텍스 객체는 sync.M...
예제로 살펴보는 Go : Atomic Counter
지금까지 고루틴간 통신에는 채널을 사용했다. 실제 채널은 고루틴간 커뮤니케이션을 하기 위해서 가장 널리 사용하는 메커니즘이다. 하지만 채널외에도 사용 할 수 있는 몇 가지 옵션들이 있다. aync/atomic을 이용해서 고루틴간 atomic counter을 구현 해보도록 하자. 이 코드는 ops를 카운트 한다. 50개의 고루틴이 for 루프를 돌면서 ops...
예제로 살펴보는 Go : Rate Limiting
Rate Limitng는 주로 NIC(Network Interface Controller)에서 입력과 출력 트래픽의 양(rate)을 제어하기 하기 위해서 사용한다. 이 외에 컴퓨팅 자원을 나눠서 사용해야 하거나 QoS를 위해서 사용 한다. Go에서 제공하는 채널과 tickers를 이용하면 고루틴에 대한 Rate limiting을 손쉽게 구현할 수 있다. 9...
예제로 살펴보는 Go : Woerker pool
고루틴과 채널을 이용해서 워커풀을 만들어보자.worker 함수는 고루틴을 이용해서 cuncurrent 하게 실행한다. 작업은 jobs 채널로 받고, 결과는 results 채널로 보낸다. job 실행에 드는 비용은 time.Sleep()메서드로 시뮬레이션 했다. main() 고루틴은 jobs 채널과 results 채널을 만들고, 이들을 매개변수로 해서 wor...