기존 java 개발에서는 볼 수 없었던 독특한 golang만의 특징 몇가지를 소개하고자 한다.
- 아래 내용들은 Jetbrains사의 GoLand IDE를 사용하였습니다.
- Jetbrains사의 GoLand IDE사용하여 Golang 실행하기 포스트 바로가기
A declared are not used
- Golang은 variable을 선언해놓고 쓰지 않으면 compile이 불가하다.
Multiple return values
- Java에서는(적어도 java 8 이전) 1개의 method 혹은 function에 대해서 return은 1개의 값만 가능하다.
private int sum(int a, int b){
return a + b;
}
private int multiple(int a, int b){
return a * b;
}
- Golang에서는 2개 이상의 multiple return에 대해서 지원한다.
package main
import (
"fmt"
)
func sumAndMultiply(a int, b int) (int, int) {
return a + b, a * b
}
func main() {
sum, multiply := sumAndMultiply(4,5)
fmt.Println("sum : ",sum)
fmt.Println("multiply : ",multiply)
}
- Golang에서 multiple return을 지원하더라도, 사용하지 않는 값이라면 아래와 같이 사용안하는 것을 under bar(_)로 명시적으로 선언이 가능하다.
- 아래와 같이 명시적으로 선언하지 않고, multiple return value를 받고 사용하지 않는다면 A declared are not used 오류가 뜰 것이다.
package main
import (
"fmt"
)
func sumAndMultiply(a int, b int) (int, int) {
return a + b, a * b
}
func main() {
_, multiply := sumAndMultiply(4,5)
fmt.Println("multiply : ",multiply)
}
Timeout
- Timeout은 외부 통신 혹은 외부 자원을 사용할때 적용할 수 있는 중요한 개념이다.
- Golang에서의 timeout은 channel과 select라는 개념을 사용하여 간단하면서도 강력하게 적용가능하다.
- Channels are the pipes that connect concurrent goroutines.
(Groutine이란 Golang의 경량 thread execution이다.)
- Select lets you wait on multiple channel opertations.
package main
import "time"
import "fmt"
func main() {
c1 := make(chan string, 1) // string 1개 버퍼를 가지는 channel 생성
go func() {
time.Sleep(2 * time.Second) // 2초가 걸린 뒤 c1에 "result 1"을 전송
c1 <- "result 1"
}() // function생성과 함께 바로 goroutine 실행됨)
select {
case res := <-c1:
fmt.Println(res)
case <-time.After(1 * time.Second): // 1초의 timeout 생성
fmt.Println("timeout 1")
}
c2 := make(chan string, 1)
go func() {
time.Sleep(2 * time.Second) // 2초가 걸린 뒤 c1에 "result 1"을 전송
c2 <- "result 2"
}() // function생성과 함께 바로 goroutine 실행됨)
select {
case res := <-c2:
fmt.Println(res)
case <-time.After(3 * time.Second): // 3초의 timeout 생성
fmt.Println("timeout 2")
}
}
Golang의 Timeout을 사용한 결과물
- Golang의 timeout을 사용하면 외부 통신에 대해서 유연하게 대체 가능하다.
- Golang을 사용하여 Http get 통신 timeout 구현 포스트 바로가기
참고사이트 : gobyexample.com 사이트
End of Document
'Programming Language > golang' 카테고리의 다른 글
goroutine 함수 여러번 실행 결과값 기다리는 2가지 방법 - js callback 처럼 (1) | 2023.03.03 |
---|---|
go gin framework graceful shutdown 예제 (0) | 2023.03.03 |
intellij에서 golang 프로젝트 인식이 잘 안될때 (0) | 2023.02.22 |
golang 동시성 예제 (0) | 2021.03.22 |
Golang backend programming - Http get 호출 + timeout 처리 (615) | 2018.05.20 |
Jetbrains사의 GoLand로 Go언어 시작하기 (1108) | 2018.05.20 |