Gobyexample


Go by Example: Perface

Go by Example - Kor Edition Go언어는 프로그램을 단순하게 작성하고, 빠르고, 안정적인 오픈소스 프로그래밍 언어입니다. Go by Example(영문)은 예제를 통해서 빠르

Go by Example: [01] Hello World

Hello World 첫 번째예제는 화면에 Hello world메세지를 출력하는 예제입니다. 다음은 코드입니다… package main import "fmt" func main() { fmt.Println("Hello world") } 프로그램을 실행하려면, 상기

Go by Example: [02] Values

Values Go언어는 다양한 데이터값을 다룰수 있습니다. 문자열, 정수형, 실수형, 불 등을 지원합니다. 몇가지 예를 통해서 알아보겠습니다. package main import "fmt" func main() { fmt.Println("go" + "lang") //

Go by Example: [03] Variables

Variables Go언어에서는 반드시 명시적으로 변수를 선언해서 사용해야 합니다. 또한 선언만 하고 사용하지 않는다면 컴파일 에러가 발생합니다. 번거로울 수 있겠지만, 이것

Go by Example: [04] Constant

Constants Go언어에서는 문자열, 불, 숫자에 대하여 상수형 변수를 지원합니다. 상수는 선언시에 초기화 해야하며, 한번 값을 지정하면 값을 변경할 수 없는 변수를 의미합니

Go by Example: [05] For

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;

Go by Example: [06] If / Else

If / Else Go에서는 다른 언어와 같은 방법으로, if문과 else문으로 분기를 수행할 수 있습니다. 하지만, 다른언어와는 향상된 방법으로 사용할 수 있습니다. 예

Go by Example: [07] Switch

Switch switch문장은 여러개의 조건 분기를 처리할 경우에 사용하면, 읽기도 편하고 이해하기도 쉽습니다. package main import "fmt" import "time" func main() { i := 2 fmt.Print("write ", i, " as ") switch i { // [1] case

Go by Example: [08] Arrays

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

Go by Example: [09] Slices

Slices Go언어에서는 슬라이스라는 특수항 데이터 타입이 존재합니다. 배열과 유사하지만 좀더 유연하게 데이터를 처리할 수 있습니다. package main import "fmt" fucn main() { s := make([]string, 3) // [1] fmt.Println("emp:",

Go by Example: [10] Maps

Maps 맵(Map)은 Go언어에서 기본적으로 제공하는 연관된 데이터를 다룰 수 있는 자료구조입니다. 이 자료형은 다른언어에서는 해쉬(hash)값이나 사전(D

Go by Example: [11] Range

Range range키워드는 복합데이터구조(배열,슬라이스, 맵등)의 데이터를 나열할때 유용하게 사용할 수 있는 키워드입니다. 이미 배운 이러한 데이터구조의 항목

Go by Example: [12] Functions

Functions 함수는 Go언어의 핵심중의 핵심 입니다. 몇가지 예제를 통해서 간단하게 함수에 대해서 알아보도록 하겠습니다. package main import "fmt" func plus(a int, b int) int { // [1] return a + b // [2] } func

Go by Example: [13] Multiple Return Values

Multiple Return Values Go언어에서는 다수개의 결과값을 리턴 할 수 있는 기능을 기본적으로 제공합니다. 이 기능이 Go언어를 특징짓는 기능 중 하나이기도 합니다. 예를들면, 특정

Go by Example: [14] Variadic Functions

Variadic Functions 가변함수라는 것은, 함수를 호출할때 불특정 다수개의 인자를 전달할 수 있는 기능입니다. 대표적인 것이, 지금까지 무심코 사용해왔던, fmt.Printl

Go by Example: [15] Closures

Closures Go언어는 익명함수를 지원하며, 이것을 클로저(Closures)라고 부릅니다. 익명함수는 함수 내부에서 이름없는 1회용 함수를 임시로 만들어서 사용하

Go by Example: [16] Recursion

Recursion Go언어는 재귀함수(Recursive Function)를 지원 합니다. 고전적인 예제인 팩토리얼값을 구하는 예제로 설명하겠습니다. package main import "fmt" func fact(n int)

Go by Example: [17] Pointers

Pointers Go언어는 c/c++언어와 같이 포인터를 언어차원에서 지원합니다. 프로그램에서 값이 저장된 실제 주소값(Reference`)을 전달할 수 있으며, 함

Go by Example: [18] Structs

Structs Go언어에서는 필드의 집합체인 구조체(struct)를 지원합니다. 레코드 단위로 데이들을 한개의 단위로 다뤄서 처리할 경우 아주 유용한 자료 구조입니다.

Go by Example: [19] Methods

Methods Go언어에서는 객체지향 프로그래밍언어에서 지원하는 메소드를 구조체와 함께 사용해서 처리할 수 있도록 지원합니다. package main import "fmt" type rect struct { width, height int } func (r *rect) area() int {

Go by Example: [20] Interfaces

Interfaces 인터페이스(Interfaces)는 메소드 집합에 붙여진 이름이라고 생각하시면 됩니다. package main import "fmt" import "math" type geometry interface { // [1] area() float64 perim() float64 } type rect struct { // [2] width, height float64 } type

Go by Example: [21] Errors

Errors Go언어에서는 에러또한 명시적으로 사용하는 하나의 형태입니다. 암시적으로 함수의 반환값으로 포함되기도 합니다. Java / Ruby와 같은 언어의 예외와 C언어

Go by Example: [22] GoRoutines

Goroutines goroutine은 경량적인 실행 스레드이며, Go언어차원에서 지원하는 병렬실행 기능입니다. package main import "fmt" func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } func main() {

Go by Example: [23] Channels

Channels 채널(Channels)은 동시 실행중인 두개의 고루틴사이에 연결된 통신용 파이프라고 생각하시면 됩니다. 특정값을 채널을 통해서 동시 실행중인 고루틴간에

Go by Example: [24] Channel Buffering

Channel Buffering 기본적으로 채널은 버퍼를 사용하지 않습니다. (unbuffered) 이말은 특정값을 채널에 보낸 후(chan <-), 정상적으로 수신할때만(<- chan) 다른 메세지를 전송할 수 있

Go by Example: [25] Channel Synchronization

Channel Synchronization 고루틴들 간에 동기화를 채널을 통해서 제어할 수 있습니다. 다음예제는 특정 고루틴이 작업을 완료할때까지 대기하는 방법에 대해서 설명합니다. package main import "fmt" import "time" func

Go by Example: [26] Channel Directions

Channel Directions 함수의 인자로 채널을 전달할때는, 채널로부터 메세지를 받는 용도인지 보내는 용도인지를 정할 수 있습니다. 이것은 프로그램의 용도를 분명하게하고 보다 안전하

Go by Example: [27] Select

Select Go언어에는 채널이라는 고루틴간의 통신수단이 제공됩니다. select문은 이러한 채널에서 어떤채널에 어떠한 메세지가 오면 처리할 수 있는 채널전용 분기문

Go by Example: [28] Timeouts

Timeouts Timeouts은 외부자원에 접근하거나 특정시간을 대기할 경우에 중요하게 사용됩니다. Go언어에서 Timeouts은 select와 channel


Go by Example: [30] Closing Channels

Closing Channels Closing Channels은 더이상 채널을 이용한 작업을 하지 않는다는 표시를 하는 것입니다. 이 기능은 채널 수신자에서 더이상 채널통신을 하지 못하게 할때 유용하게

Go by Example: [31] Range Over Channels

Range Over Channels for 및 range 장에서 기본적인 데이터 구조에서 요소를 반복적으로 나열해서 처리하는 것을 배웠었습니다. 이제는 같은 기술을 채널에서 사용하는 방법에 대해서 설명하

Go by Example: [32] Timers

Timers 프로그램을 작성하다 보면, 간혹 특정 시간 이후에 Go Code가 실행되길 원할때가 있습니다. 또는, 특정시간 대기 후에 계속적으로 실행할 경우도 존재합니다. G

Go by Example: [33] Tickers

Tickers Timer는 특정시간 뒤에 무엇인가를 처리할때 사용하는 자원입니다. 이에반해 Tickers는 특정 시간차를 두고 계속적으로 무엇인가를 처리할때 사용하는

Go by Example: [34] Worker Pools

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