일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- GIT
- onDestory
- cron
- apiTest
- 번역
- golang
- 도커
- mock
- PostgreSQL
- testing
- GraphQL
- docker-network
- JavaScript
- IAC
- :=
- svelte
- react
- docker
- reactjs
- Terraform
- nestjs
- bitwiseNot
- go
- githook
- TypeScript
- 도커컨테이너
- smui
- Svelte LifeCycle
- ...$$restProps
- 인라인핸들러
Archives
- Today
- Total
Den`s blog
Functions 본문
반응형
Function
Go 에서는 꽤 유용한 기능들이 많고 Go 만의 특이점도 많다.
아래에서 천천히 살펴보자.
1. 모든 타입 설정
정적 언어이다 보니 당연하게도 파라미터 타입과 리턴 타입을 설정해 주어야 한다. 그런데 만약, multiply 와 같은 곱셈 함수처럼 모든 파라미터가 같을 때 어느 정도 생략이 가능하다.
func multiply(a int, b int) int {
return a * b
}
function multiply2(a, b int) int {
return a * b
}
2. 여러 값 반환
다른 언어에서 여러 값들을 반환 하려면 보통 Array / Object 를 이용해서 반환하며, 리턴 타입이 Array / Object 가 된다.
그러나 Go 에서는 여러 값 반환이 가능하다..!?
func lenAndUpper(name string) (int, string) {
return len(name), strings.ToUpper(name)
}
func main() {
stringLength, upperName := lenAndUpper("den")
fmt.Println(stringLength) // 3
fmt.Println(upperName) // DEN
}
3. Args 받기
갯수를 알 수 없는 파라미터들을 받을 때는 타입에 ...을 사용한다.
func repeatPrint(words ...string) {
fmt.Println(words)
}
func main() {
repeatPrint("den", "shin", "garlic") // [den shin yeong]
}
4. 리턴 타입에 변수 지정 후 아무 것도 리턴하지 않기
제목을 어떻게 지어야 할지 애매한데, 아무것도 리턴하지 않았는데 리턴이 되는 magic 이 있다. 이를 naked function 이라 한다. Return 타입(들)에 변수명을 미리 지정하기만 하면 된다.
func lenAndUpper(name string) (length int, uppercase string) {
length = len(name)
uppercase = strings.ToUpper(name)
return
}
func main() {
stringLength, upeprName := lenAndUpper("den")
fmt.Println(stringLength) // 3
fmt.Println(upperName) // DEN
}
신기해… 근데 사용은 안 할 듯
5. 끝날때 까지 끝난게 아니다
함수가 끝난 뒤에 실행이 되어야 하는 것들이 있다면 보통은 리턴 받고 나서 로직을 넣는데, 이거를 함수 내에서 설정할 수 있다, 즉 함수 자체에서 “내가 끝난 뒤에는 이것을 실행할거야!” 같은 건데,,,
너무 멋있다…
func lenAndUpper(name string) (length int, uppercase string) {
defer fmt.Println("I'm Done")
length = len(name)
uppercase = strings.ToUpper(name)
return
}
func main() {
totalLength, upperName := lenAndUpper("den")
fmt.Println(totalLength)
fmt.Println(upperName)
}
// I'm Done
// 3
// DEN
이거 너무 멋있지 않나 ? 이거 때문이라도 go 에 빠질듯…
728x90
반응형
'GoLang' 카테고리의 다른 글
Array / Slice (0) | 2021.01.31 |
---|---|
For, If, Switch Statement (0) | 2021.01.31 |
Defer (0) | 2021.01.31 |
Setting ~ Variables & Constant (0) | 2021.01.30 |
Why Go ? (0) | 2021.01.30 |
Comments