일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Redux
- Go
- Node
- docker
- 기초 수학
- Machine Learning
- mariadb
- fastapi
- SQL
- React
- Redis
- Backbone.js
- laravel
- rabbitmq
- AWS
- For
- nodejs
- linux
- nginx
- deep learning
- php
- Switch
- Babel
- javascript
- 블레이드 템플릿
- NCP
- CentOS
- python
- webpack
- phpredis
- Today
- Total
목록Go (16)
개발일기
다른 고루틴들과 데이터를 주고 받거나 코드의 흐름을 조절하는 등의 제어를 하기 위해 채널을 사용한다. 고루틴 안에 생성된 채널은 해당 채널에 데이터가 전달될 때 까지 데이터를 받는 채널은 대기하게 된다. 이러한 동시적인 특징으로 인해 채널은 고루틴의 데드락을 방지하며 함수의 흐름을 제어할 수 있다. 1. 채널 생성법 // 채널명 := make(chan 자료형) c := make(chan int) 채널을 생성할 때는 make 함수를 사용하여 생성해야 한다. make 함수로 채널의 주소 공간을 할당한 후, make() 파리미터 안에 채널을 나타내는 chan을 써주고, 채널에 대입될 값의 자료형을 추가하면 된다. 1-1. 채널에 데이터 전송 // 채널 생성 c := make(chan int) // 데이터 전달 c
Go는 스레드와 비슷한 기능을 가진 고루틴(goroutine)을 제공한다. 고루틴은 함수를 동시에 여러개 실행시킬 수 있는 기능으로써 스레드 보다 언어 문법이 더 간단하며 OS의 리소스를 덜 사용하는 장점을 가지고 있다. 1. 호출법 고루틴을 호출 할 때는, 단순히 함수 앞에 go라는 키워드를 붙여주면 된다. package main import "fmt" // 함수 생성 func test() { fmt.Println("고루틴 test 함수 실행") } func main() { fmt.Println("main 함수 실행") go test() // test 함수 앞에 go라는 키워드를 붙여준다. } /* 실행 결과 : main 함수 실행 */ 위의 코드를 실행했을 때, 예상하는 결과와는 다르게 main 함수..
인터페이스는 구조체와는 다르게 메서드들의 집합을 나타낸다. 인터페이스에서는 메서드 자체의 내부 로직을 구현하지는 않지만 해당 메서드를 호출하여 사용한다. 1. 인터페이스 정의 package main import "fmt" type IFruit interface { // 메서드 나열 // setFruitInfo() int // 해당 메서드의 반환값이 존재할 경우 setFruitInfo() // 반환값이 존재하지 않을 경우 } /* type [인터페이스명] interface { 메서드 나열... } */ func main() { } 인터페이스를 선언할 때는, 위와 같이 자료형 부분에 interface라고 써주며 메서드들을 나열하면 된다. 반환값이 존재할 경우, 해당 메서드 뒤에 반환 자료형을 입력하면 된다...
구조체는 서로 다른 타입의 필드 또는 동일한 타입을 가진 필드들을 하나로 묶은 것을 뜻한다. 1. 구조체 정의 type fruitStruct struct { name string price int } /* type 구조체명 struct { [구조체 변수명1] [구조체 변수 타입1] [구조체 변수명2] [구조체 변수 타입2] } */ 위와 같은 fruitStruct라는 구조체 변수를 정의하고 해당 구조체 안에 name(이름)과 price(가격)의 각각 다른 자료형을 가진 필드들을 포함하고 있다. 2. 구조체 선언 pacakge main import "fmt" type fruitStruct struct { name string price int } func main() { var fruit fruitStru..
1. 포인터란? Go에서는 메모리의 주소값을 변수에 저장하는 포인터 변수를 직접 활용할 수 있도록 지원한다. 메모리 주소는 항상 16진수로 이루어지며 포인터 변수로 메모리 주소를 저장하면 0x 형식의 16진수로 값이 저장된다. 기존에 변수를 선언할 때는 변수명을 지정한 후, 변수값을 할당하여 변수를 선언하였다. 하지만 포인터를 선언할 때는, &와 * 연산자를 사용하여 변수값의 주소를 포인터에 저장시킨다. 2. 포인터 선언 var test *int // 포인터 선언 변수를 포인터로 선언할 때는 자료형 앞에 * 연산자를 붙이면 된다. 단순히 포인터 선언을 했을 경우에는 nil 값이 들어가게 된다. nil은 다른 언어들의 null과 같은 개념이다. 2-1. 메모리 할당 var test *int = new(in..
Go에서는 Java, PHP의 try / catch와 비슷하게 에러를 처리해주는 panic() / recover()가 존재한다. panic() : 에러를 직접 발생시킬 때 사용한다. recover() : 에러 또는 panic()으로 인한 에러가 발생했을때, 예외처리를 해준다. 1. panic()을 사용한 에러 발생 package main import "fmt" func panicStart() { panic("Error Start!") } func main() { panicStart() fmt.Println("panicStart Func End") } /* 실행 결과 : panic: Error Start! */ panic()의 괄호 안에 에러 문구를 추가하면 된다. panic()을 통해 에러가 발생한 경우..
1. defer란? defer란 특정한 함수를 실행할 때, 해당 부분을 함수가 종료되기 직전에 실행시키는 기능을 뜻한다. 2. defer 정의법 defer test() // test는 함수명 defer test(a int, b int) // 매개변수로 추가할 수 있다. 함수를 정의할 때와 똑같은 방식이다. 함수를 정의했을 때 사용했던 func 대신에 defer라는 키워드를 사용한다는게 다른점이다. 3. 사용법 package main import "fmt" func test() { fmt.Println("test 함수 실행") } func initial() { fmt.Println("init 함수 실행") } func main() { defer test() initial() initial() initial..
1. 함수 정의 Go에서 함수를 선언할 때는, 다른 언어에서 사용하는 키워드 function이 아니라 func를 사용하여 함수를 정의한다. func test() { ... } 2. 함수의 값 반환 func test(a int, b int) int { // 매개변수 괄호 뒤에 반환할 값의 자료형을 써준다. ... return a + b } 함수에 반환값이 존재할 경우, 매개변수를 나열한 괄호 뒤에 반환할 값의 자료형을 써주면 된다. return에 들어가는 부분의 자료형이 위와 같이 정수형이 아닌 경우 오류가 발생한다. 2-1. 여러개의 값 반환하기 다른 언어들과는 다르게 다양한 값을 반환할 수 있다. 다수의 값을 반환하려면 반환할 자료형을 괄호로 묶은 후, 순서대로 나열한다. 그 후, return에 반환할..