Go 기초 지식 학습 (2) 리 턴 함수
리 턴 함수, 함수 포인터 로 호출 되 는 함수, 본질 적 으로 함수 입 니 다. 응용 장면 으로 인해 리 턴 함수 라 는 명사 가 나타 납 니 다.이것 은 매우 중요 합 니 다. 일부 우수한 C 라 이브 러 리 에서 자주 볼 수 있 습 니 다. 이것 은 함수 의 실현 자 에 의 해 이 루어 지 는 것 이 아니 라 호출 자 에 의 해 이 루어 집 니 다. 이렇게 하면 문제 의 추상 화 에 편리 합 니 다.아래 의 이 예 를 통 해 간단하게 체득 할 수 있다.
예 를 들 어 C 언어 표준 라 이브 러 리 에 서 는 보통 같은 함수 포인터 로 이 루어 집 니 다. 예 를 들 어 C 라 이브 러 리 에서 빠 른 정렬 의 비교 함수 void qsort (void base, size t nitems, size t size, int (compar) (const void, const void) 여기 compar 가 바로 이 반전 함수 입 니 다.
Android 에서 도 리 셋 함 수 를 많이 볼 수 있 습 니 다. 예 를 들 어 버튼 을 누 른 OnClickListener 는 감청 인터페이스 와 유사 하고 본질 도 리 셋 함수 입 니 다.
Golang 리 턴 함수
Golang 역시 리 셋 함 수 를 지원 합 니 다. 리 셋 함 수 를 실현 하 는 예 입 니 다. 한 배열 의 짝수 값 을 더 한 결 과 를 출력 하고 한 배열 의 홀수 값 을 더 한 결 과 를 출력 합 니 다.리 턴 함 수 는 추상 적 인 기능 을 위 한 이기 입 니 다. 여기 서 sum 함 수 는 조건 에 맞 는 slice 값 에 대한 구 합 으로 이해 할 수 있 습 니 다.이러한 추상 이 있 으 면 우 리 는 sum 으로 3 의 배수 에 대한 값 구 화, 4 의 배수 에 대한 값 구 화 를 쉽게 실현 할 수 있 고 sum 함 수 를 다시 작성 할 필요 가 없습니다.
package main
import (
"fmt"
)
func main() {
//create slice
s := make([]int, 10)
fmt.Println(s)
// init
for i, _ := range s {
s[i] = i
}
fmt.Println(s)
// sum all elemets who are even number
fmt.Println(sum(s, isDouble))
// sum all elemets who are single number
fmt.Println(sum(s, isSingle))
}
/**
callback function : elemet who is even number
**/
func isDouble(a int) bool {
if a%2 == 0 {
return true
} else {
return false
}
}
/**
callback function : elemet who is single number
**/
func isSingle(a int) bool {
if a%2 == 0 {
return false
} else {
return true
}
}
/**
sum all element who are func number
**/
func sum(s []int, f func(int) bool) int {
sum := 0
for _, v := range s {
if f(v) {
sum += v
}
}
return sum
}
코드
https://github.com/panyingyun/gostudy/blob/master/exp2.go
참고서
이선 정 은 이 책 에서 '추상' 이라는 단어 에 대한 멋 진 이 해 를 깊이 있 게 했 고 리 셋 함 수 를 능숙 하 게 활용 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.