예제로 살펴보는 Go : 정규표현

Go는 정규표현(regular expressions)기능을 내장하고 있다.Go에서 제공하는 regexp패키지를 이용해서 정규표현식을 이용 할 수 있다. MatchString()메서드는 정규표현에 일치하는 문자열이 있는지를 검사한다. 일치할 경우 true를 반환한다.MatchString()에서는 문자열에 대한 패턴매칭을 즉시수행 했다. 하지만 많은 경우 패턴...

예제로 살펴보는 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 : Stateful Goroutines

앞의 예제에서는 뮤텍스를 이용해서, 여러 개의 고루틴이 공유하는 영역을 보호했다. 영역 보호는 잠금의 형식으로 이루어지기 때문에, 뮤텍스 잠금이라고 부르기도 한다. 다음 예제 ...

예제로 살펴보는 Go : Mutexes

앞 장에서 원자연산을 이용한 카운터의 구현을 살펴봤다. 여기에서는 뮤텍스(Mutex)를 이용해서 비슷한 구현을 해보려 한다. 애초에 원자적 연산은 뮤텍스를 주로 이용하니, 일반적인 방법이라고 할 수 있겠다. 뮤텍스는 자원에 대한 접근을 한번에 하나씩제어하기 위해서 사용한다. 이 코드에서 관리할 자원은 map자료구조인 state다. 뮤텍스 객체는 sync.M...

예제로 살펴보는 Go : Atomic Counter

지금까지 고루틴간 통신에는 채널을 사용했다. 실제 채널은 고루틴간 커뮤니케이션을 하기 위해서 가장 널리 사용하는 메커니즘이다. 하지만 채널외에도 사용 할 수 있는 몇 가지 옵션들이 있다. aync/atomic을 이용해서 고루틴간 atomic counter을 구현 해보도록 하자. 이 코드는 ops를 카운트 한다. 50개의 고루틴이 for 루프를 돌면서 ops...