Gobyexample
Go by Example - Kor Edition Go언어는 프로그램을 단순하게 작성하고, 빠르고, 안정적인 오픈소스 프로그래밍 언어입니다. Go by Example(영문)은 예제를 통해서 빠르
Hello World 첫 번째예제는 화면에 Hello world메세지를 출력하는 예제입니다. 다음은 코드입니다… package main import "fmt" func main() { fmt.Println("Hello world") } 프로그램을 실행하려면, 상기
Values Go언어는 다양한 데이터값을 다룰수 있습니다. 문자열, 정수형, 실수형, 불 등을 지원합니다. 몇가지 예를 통해서 알아보겠습니다. package main import "fmt" func main() { fmt.Println("go" + "lang") //
Variables Go언어에서는 반드시 명시적으로 변수를 선언해서 사용해야 합니다. 또한 선언만 하고 사용하지 않는다면 컴파일 에러가 발생합니다. 번거로울 수 있겠지만, 이것
Constants Go언어에서는 문자열, 불, 숫자에 대하여 상수형 변수를 지원합니다. 상수는 선언시에 초기화 해야하며, 한번 값을 지정하면 값을 변경할 수 없는 변수를 의미합니
For for 키워드는 Go언어에서 제공하는 유일한 반복문입니다. 3가지 형식으로 사용할 수 있습니다. package main import "fmt" func main() { i := 1 for i <= 3 { // [1] fmt.Println(i) i = i + 1 } for j := 7;
If / Else Go에서는 다른 언어와 같은 방법으로, if문과 else문으로 분기를 수행할 수 있습니다. 하지만, 다른언어와는 향상된 방법으로 사용할 수 있습니다. 예
Switch switch문장은 여러개의 조건 분기를 처리할 경우에 사용하면, 읽기도 편하고 이해하기도 쉽습니다. package main import "fmt" import "time" func main() { i := 2 fmt.Print("write ", i, " as ") switch i { // [1] case
Arrays Go언어에서 배열은 크기가 정해진 동일한 타입의 변수의 집합니다. package main import "fmt" func main() { var a [5]int // [1] fmt.Println("emp:", a) a[4] = 100 // [2] fmt.Println("set:", a) fmt.Println("get:", a[4]) fmt.Println("len:", len(a)) // [3] b := [5]int{1, 2, 3, 4, 5} // [4] fmt.Println("dcl:", b) var twoD[2][3]int
Slices Go언어에서는 슬라이스라는 특수항 데이터 타입이 존재합니다. 배열과 유사하지만 좀더 유연하게 데이터를 처리할 수 있습니다. package main import "fmt" fucn main() { s := make([]string, 3) // [1] fmt.Println("emp:",
Maps 맵(Map)은 Go언어에서 기본적으로 제공하는 연관된 데이터를 다룰 수 있는 자료구조입니다. 이 자료형은 다른언어에서는 해쉬(hash)값이나 사전(D
Range range키워드는 복합데이터구조(배열,슬라이스, 맵등)의 데이터를 나열할때 유용하게 사용할 수 있는 키워드입니다. 이미 배운 이러한 데이터구조의 항목
Functions 함수는 Go언어의 핵심중의 핵심 입니다. 몇가지 예제를 통해서 간단하게 함수에 대해서 알아보도록 하겠습니다. package main import "fmt" func plus(a int, b int) int { // [1] return a + b // [2] } func
Multiple Return Values Go언어에서는 다수개의 결과값을 리턴 할 수 있는 기능을 기본적으로 제공합니다. 이 기능이 Go언어를 특징짓는 기능 중 하나이기도 합니다. 예를들면, 특정
Variadic Functions 가변함수라는 것은, 함수를 호출할때 불특정 다수개의 인자를 전달할 수 있는 기능입니다. 대표적인 것이, 지금까지 무심코 사용해왔던, fmt.Printl
Closures Go언어는 익명함수를 지원하며, 이것을 클로저(Closures)라고 부릅니다. 익명함수는 함수 내부에서 이름없는 1회용 함수를 임시로 만들어서 사용하
Recursion Go언어는 재귀함수(Recursive Function)를 지원 합니다. 고전적인 예제인 팩토리얼값을 구하는 예제로 설명하겠습니다. package main import "fmt" func fact(n int)
Pointers Go언어는 c/c++언어와 같이 포인터를 언어차원에서 지원합니다. 프로그램에서 값이 저장된 실제 주소값(Reference`)을 전달할 수 있으며, 함
Structs Go언어에서는 필드의 집합체인 구조체(struct)를 지원합니다. 레코드 단위로 데이들을 한개의 단위로 다뤄서 처리할 경우 아주 유용한 자료 구조입니다.
Methods Go언어에서는 객체지향 프로그래밍언어에서 지원하는 메소드를 구조체와 함께 사용해서 처리할 수 있도록 지원합니다. package main import "fmt" type rect struct { width, height int } func (r *rect) area() int {
Interfaces 인터페이스(Interfaces)는 메소드 집합에 붙여진 이름이라고 생각하시면 됩니다. package main import "fmt" import "math" type geometry interface { // [1] area() float64 perim() float64 } type rect struct { // [2] width, height float64 } type
Errors Go언어에서는 에러또한 명시적으로 사용하는 하나의 형태입니다. 암시적으로 함수의 반환값으로 포함되기도 합니다. Java / Ruby와 같은 언어의 예외와 C언어
Goroutines goroutine은 경량적인 실행 스레드이며, Go언어차원에서 지원하는 병렬실행 기능입니다. package main import "fmt" func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } func main() {
Channels 채널(Channels)은 동시 실행중인 두개의 고루틴사이에 연결된 통신용 파이프라고 생각하시면 됩니다. 특정값을 채널을 통해서 동시 실행중인 고루틴간에
Channel Buffering 기본적으로 채널은 버퍼를 사용하지 않습니다. (unbuffered) 이말은 특정값을 채널에 보낸 후(chan <-), 정상적으로 수신할때만(<- chan) 다른 메세지를 전송할 수 있
Channel Synchronization 고루틴들 간에 동기화를 채널을 통해서 제어할 수 있습니다. 다음예제는 특정 고루틴이 작업을 완료할때까지 대기하는 방법에 대해서 설명합니다. package main import "fmt" import "time" func
Channel Directions 함수의 인자로 채널을 전달할때는, 채널로부터 메세지를 받는 용도인지 보내는 용도인지를 정할 수 있습니다. 이것은 프로그램의 용도를 분명하게하고 보다 안전하
Select Go언어에는 채널이라는 고루틴간의 통신수단이 제공됩니다. select문은 이러한 채널에서 어떤채널에 어떠한 메세지가 오면 처리할 수 있는 채널전용 분기문
Timeouts Timeouts은 외부자원에 접근하거나 특정시간을 대기할 경우에 중요하게 사용됩니다. Go언어에서 Timeouts은 select와 channel
Non Blocking Channel Operations 기본적으로 채널에 데이터를 보내고 받는 행위는 블럭모드(Blocking Mode)로 작동합니다. 그러나, select문과 default절을
Closing Channels Closing Channels은 더이상 채널을 이용한 작업을 하지 않는다는 표시를 하는 것입니다. 이 기능은 채널 수신자에서 더이상 채널통신을 하지 못하게 할때 유용하게
Range Over Channels for 및 range 장에서 기본적인 데이터 구조에서 요소를 반복적으로 나열해서 처리하는 것을 배웠었습니다. 이제는 같은 기술을 채널에서 사용하는 방법에 대해서 설명하
Timers 프로그램을 작성하다 보면, 간혹 특정 시간 이후에 Go Code가 실행되길 원할때가 있습니다. 또는, 특정시간 대기 후에 계속적으로 실행할 경우도 존재합니다. G
Tickers Timer는 특정시간 뒤에 무엇인가를 처리할때 사용하는 자원입니다. 이에반해 Tickers는 특정 시간차를 두고 계속적으로 무엇인가를 처리할때 사용하는
Worker Pools 다음의 예제는, channel과 goroutine을 이용해서 Worker Pool을 구현하는 예제 입니다. package main import "time" import "fmt" func worker(id int, jobs <-chan int, results chan<- int) { // [1] for j := range jobs