Go In Action을 보다 보니까 함수 생성방법이 궁금해져서...
작성해보았다.
36p 에서
func (m defaultMatcher) Search(feed *Feed,searchTerm String) ([]*Result,error){
return nil,nil
}
을 보았다.
내가 알고 있는 함수와는 조금 다른 내용이였다..
기본적으로 Go의 함수 생성 방법은
func 키워드를 이용해 함수임을 선언하고
func 함수 이름(변수 이름 변수 타입,변수 이름 변수 타입 ~) ( 리턴타입,~)
로 구분되는걸 확인할 수 있다.
예시로 보자면
func println(text string) (string){
return text
}
func calc (num1 int,num2 int) (int,string){
return num1+num2 , "calc"
......식으로 정의가 된다.
func (m defaultMatcher) Search
의 부분은 "Search 메서드는 defaultMatcher 타입에 대한 값 수신기를(value receiver)를 선언하고 있다."
메서드를 정의하는 함수 선언부에 값 수신기를 사용하면 해당 메서드는 지정된 수신기 타입에만 연결된다.
즉 Search메서드는 defaultMatcher타입의 값이나 포인터에 대해서만 호출할 수 있다는 의미다.
메서드 호출의 예제
//defaultMatcher 타입의 수신기를 이용해 메서드를 선언한다.
func (m defaultMatcher) Search(feed *Feed,searchTerm string)
//defaultMatcher 타입의 포인터를 선언한다.
dm:=new(defaultMatcher)
//메서드를 호출하면 컴파일러가 알아서 dm 포인터에 대한 역참조를 수행한다.
dm.Search(feed,"test")
//defaultMatcher 타입의 포인터 수신기를 이용해 메서드를 선언한다.
func (m *defaultMatcher) Search(feed *Feed,searchTerm string)
//defaultMatcher 타입의 값을 선언한다
var dm defaultMatcher
//메서드를 호출하면 컴파일러가 알아서 dm 값에 대한 참조 를 수행한다.
dm.Search(feed,"test")
대부분의 메서드는 그 실행 과정에서 값의 상태를 조작해야 하는 경우가 많으므로 메서드를 선언할 때 포인터 수신기를 이용해 선언하는 것이 권장돈다.
보고 있는 책에서는 라고 한다.
어쨋건 결과적으로 보자면..
func (m defaultMatcher) Search(feed *Feed,searchTerm String) ([]*Result,error)
m defaultMatcher로 지정된 타입을 매개변수로 받는것?
defaultMatcher라는 타입에서 Search라는 함수를 선언할 수 있는것 같다.
m.Search()
처럼 사용할 수 있어 보인다... 일단 얕게 알아보고... 추후에 깊게 알아보기로 하자