본문 바로가기

개발이야기/GO

(10)
GO - 채널(Channel) 이전 글에서 말했듯이 채널은 goroutine을 사용함으로써 main 함수와 goroutine간의 연결을 해주는 파이프 역할을 한다. 이전 글과 동일한 사용 예를 살펴보도록 한다. func main() { // 채널 생성 방법 // make(chan 채널에 보낼 정보의 타입) c := make(chan string) people := [2]string{"SW", "Chris"} for _, person := range people { //goroutine으로 호출 // result := go isNice(person, c)와 같은 형식으로 사용할 수 없다. go isNice(person, c) } } func isNice(person string, c chan) { time.Sleep(time.Secon..
GO - goroutine goroutine은 go의 기본 라이브러리 중 하나로 비동기적 기능을 수행할 때 사용한다. 아래의 예제를 보자. func main() { isNice("SW") isNice("Chris") } func isNice(person string) { for i:=0; i
GO - Map / Struct Map과 Strunct는 Object를 만드는 한 방법이며, 아래에서 생성하는 방법을 아주 간단하게 휙- 적어놓으려고 한다. 웹 강의로만 보고 적는 것이기 때문에 디테일은 떨어질 것이지만 차차 채워나가는 걸로 해야지 MAP map은 key와 value로 이루어진 object와 비슷한 것인데 아래와 같이 생성한다. nico := map[string]string{"name": "nico", "age": "12"} fmt.Println(nico) // map[age:12 name:nico] map[key]value{key:value}의 형식으로 생성하고 표기한 key와 value의 타입을 잘 맞춰서 값을 대입해준다. 위의 age 같은 경우도 value의 타입을 string으로 설정해두었기 때문에 12가 아닌 ..
GO - Arrays / Slices GO에서 배열을 만들고자 할 때 기본적으로 괄호에 해당 배열의 길이를 명시해주어야 한다. ARRAY func main () { names := [5] string {"nico", "lynn", "dal"} fmt.Println(names) //[nice lynn dal] } 하지만 배열의 길이를 정해두지 않고 유동적으로 사용하려한다면 array 대신 slice를 사용한다. SLICE func main() { // 대괄호 안에 배열 길이를 표기하지 않음 // 그 외의 부분은 배열과 비슷하다 names := []string{"nico", "lynn", "dal"} fmt.Println(names) // [nico lynn dal] // 해당 slice에 요소를 추가하고 싶다면 append를 사용한다. // ..
GO - Pointers(포인터) func main() { a := 2 b := 10 fmt.Println(a, b) // 2 10 fmt.Println(&a, &b) //0xc0000120f0 0xc0000120f8 } 변수앞에 &표시를 붙여서 출력(OR 사용)할 경우 해당 변수의 값이 아닌 메모리 주소를 가리킨다. (C에는 포인터가 있는 것으로 아는데 내 주력 언어인 자바에서는 사용할 일이 없어 굉장히 생소한 개념이다.) func main() { a := 2 b := &a fmt.Println(a, b) // 2, a의 메모리 주소가 출력된다. fmt.Println(a, *b) // '*'는 해당 메모리 주소에 무엇이 담겨있는지 살펴보는 거라고 보면 되는데 // 이 경우 출력되는 값은 2 2 이다. fmt.Println(&a, *b)..
GO - if / else / switch GO언어에서 if ~ else 기본 구문은 다른 언어와 크게 다르지 않다. func canIDrink (age int) bool { if age > 18 { return true; } else { return false; } } // GO 언어에서는 if와 return을 쓰라고 권고하고 있기 때문에 else보다는 return으로 쓰는 것이 좋다고 한다. // 그럼 위의 코드는 아래와 같을 것이다. func canIDrink (age int) bool { if age > 18 { return true; } return false; } GO의 if ~ else 문은 한 가지 특이사항이 있는데, if문을 생성하는 그 때! 변수 선언이 가능하다는 점이다. 👆func canIDrink(age int) bool {..
GO - LOOP LOOP GO의 loop는 다른 언어처럼 for in, for each, for of과 같은 표현은 쓰이지 않고 ONLY FOR!! 여기서는 1부터 6까지 loop를 이용하여 더하는 코드를 짜보려고 한다. 기본적인 range의 속성을 아래 주석에서 확인할 수 있다. func superAdd(numbers ...int) int { // range가 numbers 안에서 조건에 맞는 경우 loop를 돌 수 있게 해준다. for number := range numbers { fmt.Println(number) // 0 1 2 3 4 5 } return 1 } func main() { superAdd(1, 2, 3, 4, 5, 6) } 위의 함수에서의 반환값은 '0 1 2 3 4 5'인데 이는 range가 in..
GO 변수 / 함수 기본(다중 값 리턴, 다중 인자 받기) 처음 배우는 GO의 아주 기초적인 변수와 함수 표현 방식을 적어보려한다. (노마드 코더 강의의 흐름대로 정리 중) 기본형 작성 func main(){ var name string = "merry" // name := "merry" // line 6과 7은 동일한 기능이다. // ':=' 와 같이 표기하면 GO는 해당 변수 값에 대한 type을 찾아서 정의한다. // 이 표현은 func 안에서만 가능하다. name = "charlie" fmt.Println(name) } func multiply(a, b) { return a * b } func main(){ fmt.Println(multiply(2, 2)) } 위와 같이 인자를 넣어 함수를 호출할 경우 에러가 발생한다. 메시지를 보면 파라미터의 타입과 리..