목록Golang (10)
Connecting
TCP 통신 Go 언어에서는 기본 패키지에 다양한 네트워크 프로토콜을 제공합니다. 이중 TCP는 네트워크 전송계층에서 가장 핵심적인 부분이라고 할 수 있을 정도로 많이 사용되며, HTTP 프로토콜도 TCP기반으로 동작합니다. 간단하게 서버 / 클라이언트 통신 서버를 만들어 보고 동작하는지 확인해보도록 하겠습니다. TCP Server package main import ( f "fmt" "net" ) func main() { f.Println("server running 8888 port") ln, err := net.Listen("tcp", ":8888") // 8888 포트로 리스닝하는 tcp 서버를 생성합니다. if err != nil { f.Println(err) return } defer ln.C..
파일 입출력 거의 모든 프로그래밍 언어에서 데이터를 읽기/쓰기 작업 기능이 필요합니다. Go 언어 역시 이러한 기능을 제공하며, 다음 예제를 통해서 확인해 보겠습니다. package main import ( f "fmt" "io/ioutil" "os" ) func main() { CurrentDirectory() data, err := ioutil.ReadFile("hello.txt") check(err) f.Print(string(data)) } func check(e error) { if e != nil { f.Println("파일을 읽을 수 없습니다.") f.Println("Error Code : ", e) } } func CurrentDirectory() { path, _ := os.Getwd()..
고루틴 고루틴 (goroutine)은 가벼운 스레드와 같은 것으로 수행 흐름과 별개로 병렬처리가 가능하게 합니다. OS에서 스케줄링으로 관리되는 스레드(약 1MB)보다 가볍기 때문에 (약 8kbyte) 자신의 코어갯수보다 많이 실행해도 무리 없이 동작한다는 장점이 있습니다. 고루틴은 고 런타임이 관리하고 고채널을 통해 고루틴간의 통신을 할 수 있습니다. Go 언어에서 고루틴을 실행하는 방법은 아래와 같이 매우 간단합니다. go Hello() // 일반함수를 통한 고루틴 실행 for i := 0; i < 3; i++ { go func(n int) { // 익명함수(클로저)를 통한 고루틴 실행 f.Println("goroutine : ", n) oneTime.Do(Hello) }(i) } 고루틴을 사용하고자..
구조체 Go의 structs는 필드들로 이루어진 타입을 갖는 컬렉션입니다. 레코드를 구성하기 위해 데이터들을 그룹핑 하는데 유용합니다. 다음 예제를 통해 구조체 선언을 확인해 보세요. type person struct { name string age int } 위 person 구조체 타입은 name과 age라는 필드를 가지고 있습니다. 같은 자료형을 가지고 있다면 다음과 같이 작성할 수 도 있습니다. type person struct { phone, age int } 구조체를 선언하고 필드명을 초기화 할 수 있으며, 생략된 필드는 0을 가지게 됩니다. 기본적으로 . 을 사용해서 구조체 필드에 접근하여 사용하며, &를 사용하면 구조체 포인터를 사용할 수 있습니다. 다음 예제를 통해 구조체 연습을 진행하도록..
클로저 / 재귀 / 지연호출 클로저 사용하기 Go 언어에서의 클로저란 익명 함수(Anonymous functions)와 비슷한 개념으로 이름 없이 한줄로 함수를 정의하고 싶을때 유용합니다. 이를 통해 함수 안에서 함수를 선언 및 정의할 수 있고, 바깥쪽 함수에 선언된 변수에도 접근할 수도 있습니다. 아래 예제를 통해 클로저 사용 예제를 확인하시길 바랍니다. package main import f "fmt" func main() { f.Println("클로저") sum := func(a int, b int) int { return a + b } result := sum(1, 2) f.Println(result) f.Println("-----------------") cal := voltage() f.Pri..
함수 함수(function)란 어떠한 입력을 통해서 어떠한 출력 매개변수로 맵핑하는 독립적인 코드 영역입니다. Go 언어에서는 main 함수가 기본이지만 필요에 따라서 여러 함수 선언을 통해서 다양한 역할을 담당하는 함수를 선언하여 사용할 수 있습니다. 이렇게 기능별 함수를 선언하면 해당 역할을 담당하는 함수를 재사용 할 수 있으며, 코드를 간결하게 작성할 수 있습니다. 다음 예제는 함수를 사용한 기본 예제입니다. package main import f "fmt" func hello() { f.println("Hello") } func main() { hello() world() } func world() { f.println("world!") } 일부 언어의 경우 함수를 선언하기 위해서는 정의한 함수를..
배열 사용하기 Go 언어에도 다른 프로그래밍 언어와 동일하게 배열이 존재합니다. 배열은 숫자, 문자, 문자열 등을 나열해 놓은 상태로서 다양한 값이 들어갈 수 있습니다. 또한, 배열은 비슷한 데이터들을 한번에 가지고 있을 때 사용되거나, 반복적으로 사용되어야 하는 값들의 집합을 만들 때 사용합니다. Go 언어에서 배열은 길이가 고정되어 있고, 다른 언어와 마찬가지로 배열의 인덱스는 0부터 시작합니다. 다음 예제를 통해 배열을 선언하도록 하겠습니다. var empty [5]int // 크기가 5인 배열을 생성 empty[4] = 5 // empty 배열 4번째 부분에 값을 5로 초기화 한다. f.Println(empty) var a [3]int = [3]int{1, 2, 3} // 정수형의 크기가 3인 배..
조건문 / 분기문 / 반복문 if 사용하기 if 문은 해당 조건이 만족하면 {}안에 코드를 수행합니다. 다만 다른 언어와 다르게 조건식을 ()를 작성하지 않아도 되지만 반드시 Boolean 형식으로 작성해야 하며, 해당 문법을 같은 라인에 두어야 합니다. 이를 어기게 될 경우 에러가 발생합니다. 다음은 기본적인 if 문법을 사용한 예제입니다. package main import f "fmt" func main() { num := 10 if num = 1 && num = 6 && num
Go 설치하기 Go언어는 다음과 같은 대부분의 OS를 지원합니다. 본인의 환경에 맞춰서 설치를 진행하고 버전확인을 통해 정상적으로 설치가 진행되었는지 확인하도록 하겠습니다. 2020.07.04일 기준 Go 최신버전은 1.14.4 입니다. 윈도우 Go 언어는 windows 7 / windows 10을 공식적으로 지원하기 때문에 이전 버전을 사용하고 있다면 OS 업그레이드를 진행하여 주시길 바랍니다. 본 설치는 윈도우 10 2004 빌드에서 진행하였습니다. https://golang.org/ 다음 링크로 접속합니다. 다운로드 링크로 접속하여 Featured downloads 항목에 Microsoft Windows 항목을 클릭하여 설치파일을 다운받습니다. (OS는 64bit 이어야 합니다.) 다운받은 파일을 ..
Go 언어란? 2019년 구글이 개발한 프로그래밍 언어로써, GC (garbage collection)와 병행성 (concurrent)을 잘 지원하는 컴파일 언어입니다. 로버트 그리즈머, 롭 파이크, 케네스 톰슨이 C++의 복잡성이 싫어서 개발되었습니다. 현재도 어떠한 패키지에 무엇을 포함할지는 이 세 사람이 만장일치로 합의해야 이루어진다고 하며, Golang 으로 불리기도 합니다. Go 언어 사용자들을 고퍼(Gopher)라고 부르며, 고퍼들을 위한 연례행사인 고퍼콘(Gophercon)이 열리고 있습니다. Go 언어 특징 Go 언어의 특징은 다음과 같습니다. 컴파일 언어이지만 컴파일러가 소스 코드를 해석하는 pass 수를 줄여서 인터프리터 언어처럼 빠르게 동작합니다. 언어의 문법이 간결하여 접근하기 쉽고..