Golang 11

[GoLang 시작하기 10] Channels

Go 채널은 데이터를 주고 받는 통로이다. Go 채널은 Go루틴들 사이의 데이터를 주고받는 데에 사용된다. 이 파이프라인을 통해서 메세지를 보내거나 받을 수 있다. 이 채널을 이용하여 동시성 구현 시 락 등을 이용하지 않고도 할 수 있다. 또 교착 상태나 경쟁 상태를 파악하기 쉽도록 지원된다. 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package main import ( "fmt" ) func main() { ch:=make(chan bool) nums:=[2]string{"one","two"} for _, n :=range nums{ go isReady(n,ch) } fmt.Prin..

Golang 2020.04.10

[GoLang 시작하기 9] Go루틴

Go루틴 Go에서 "go" 키워드를 사용하여 함수를 호출하면, 런타임시 새로운 goroutine을 실행한다. 고루틴은 비동기적으로(asynchronously) 함수 루틴을 실행하여 여러 코드를 동시에(concurrently) 실행하는데 사용된다. 다음 그림은 main함수가 실행될 때 함수 1, 2, 3이 순차적으로 실행되는 것을 표현한 것이다. 함수 하나가 실행되는 데에 10초가 소요된다고 가정하면, 완료하는 데에는 30초가 필요할 것이다. 그런데 고루틴을 활용하여 이렇게 병렬적으로 처리할 수 있으면 함수는 10초밖에 소요되지 않는다. 다음 예제들을 살펴보자. #1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package main import ( "fmt"..

Golang 2020.04.09

[GoLang 시작하기 8] map을 활용한 Dictionary

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package main import ( "fmt" "github.com/gogo-yooyeon/project1/myDict" ) func main() { dictioinary := myDict.Dictionary{} baseword := "Hello :D" //딕셔너리에 단어 추가하기 dictioinary.Add("First", baseword) dictioinary.Add("Second", "Bye :(") //Second를 키로하는 단어 찾기 word, _ := dictioinary.Search("Second") fmt.Println(word) /..

Golang 2020.03.28

[GoLang 시작하기 7] Simple Bank - Method 연습

은행의 계좌 Account는 Owner(string)와 Balance(int) 속성을 가지고 있는 객체이다. 계좌에 Deposit(입금)하거나 Withdraw(출금)할 수 있다. 속성을 public으로 하여 바로 접근하면 외부에서 임의로 조정 가능하므로 Deposit, Withdraw과 같은 함수를 만들어 접근하도록 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package main import ( "fmt" "projects_yooyeon/src/accounts" ) func main() { account := accounts.NewAccount("yooyeon") account.Deposit(100) fmt.Println(account...

Golang 2020.03.26

[GoLang 시작하기 6] Array, map, struct

Arrays and Slice 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package main import ( "fmt" ) func main() { // 배열의 크기를 정해두는 경우 alpha := [5]string{"aaaa", "bbbb", "cccc"} //추가 alpha[3] = "dddd" fmt.Println(alpha) //배열의 크기를 정해두지 않는 경우 alpha2 := []string{"aaaa", "bbbb", "cccc"} //append 함수를 사용해서 추가 alpha2 = append(alpha2, "DDDD") fmt.Println(alpha2) } map 1 2 3 4 5 6 7 8 9 10 ..

Golang 2020.03.20

[Golang 시작하기 5] 포인터

포인터 C언어나 C++에 포인터가 있듯이 Go에서 포인터가 있다. 포인터는 대용량의 데이터를 다룰 때 유용하다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package main import ( "fmt" ) func main() { a := 20 b := a a = 10 fmt.Println("a 값: ", a, "a 주소: ", &a) fmt.Println("b 값: ", b, "b 주소: ", &b) } (결과) &(앰퍼샌드)를 변수 앞에 붙여주면 그 변수의 주소를 볼 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package main import ( "fmt" ) func main() { c := 20 d := &c fmt.Printl..

Golang 2020.03.20

[GoLang 시작하기 2] 함수의 기본 형태, 변수와 상수

함수 형태 다른 프로그래밍 언어와 비슷하게 함수를 다음과 같이 작성해서 실행할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package main import ( "fmt" ) func main() { fmt.Println("Hello World") sayHello() sayBye() } func sayBye() { fmt.Println("Bye") } func sayHello() { fmt.Println("Hello") } 변수 vs 상수 여느 프로그래밍 언어와 같이 변수와 상수 개념이 있다. 변수로 선언한 name을 바꾸어도 괜찮다. 상수로 선언한 name을 바꾸면 오류가 발생한다. 한 가지 재미있는 점은 var name string="y..

Golang 2020.03.15

[GoLang 시작하기] Go Download 및 프로젝트 실행하기

1. Go Download Downloads - The Go Programming Language Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases golang.org 이 사이트에서 자신의 OS 환경에 맞는 파일을 다운받아 설치한다. 2. 하위 폴더 구성 C:/Go 로 이동한다. Go 안에 src 폴더..

Golang 2020.03.15