English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go 언어에서는 같은 패키지에서 두 개나 더 많은 같은 이름의 메서드를 생성할 수 있지만, 이러한 메서드는여러 가지 다른 타입을 가져야 합니다。이 기능은 Go 함수에서 사용할 수 없으며, 이는 같은 패키지에서 같은 이름의 메서드를 생성할 수 없음을 의미합니다. 이를 시도하면 컴파일러가 오류를 표시합니다。
문법:
func(reciver_name_1 Type) method_name(parameter_list)(return_type){ // Code } func(reciver_name_2 Type) method_name(parameter_list)(return_type){ // Code }
이 개념에 대해 예제를 통해 설명해 보겠습니다:
예시1:
package main import "fmt" //구조체 생성 type student struct { name string branch string } type teacher struct { language string marks int } //이름이 같은 메서드지만 수신자 타입이 다릅니다 func (s student) show() { fmt.Println("학생 이름:", s.name) fmt.Println("Branch: ", s.branch) } func (t teacher) show() { fmt.Println("Language:", t.language) fmt.Println("Student Marks: ", t.marks) } func main() { // 구조체 값을 초기화합니다 val1 := student{"Rohit", "EEE"} val2 := teacher{"Java", 50} //메서드 호출 val1.show() val2.show() }
출력:
학생 이름: Rohit Branch: EEE Language: Java Student Marks: 50
사용 방법:위의 예제에서는 동일한 이름의 두 메서드가 있습니다.show()수신자의 타입은 다릅니다. 여기서, 첫 번째show()메서드는 s student 타입의 수신자를 포함하고, 두 번째show()메서드는 t teacher 타입의 수신자를 포함합니다. 다음에서main()함수에서 각각의 구조체 변수를 사용하여 이 두 메서드를 호출합니다. 이를 통해 동일한 타입의 수신자로 이 메서드를 생성하려고 시도하면show()이 메서드를 사용하면 컴파일러가 오류를 throws.
예시2:
//동일한 이름의 메서드를 생성합니다 //비구조화된 타입 수신자 package main import "fmt" type value_1 string type value_2 int //동일한 이름의 함수를 생성합니다 //다른 타입의 비구조화된 수신자 func (a value_1) display() value_1 { return a + ".com" } func (p value_2) display() value_2 { return p + 298 } func main() { //초기화 값 res1 := value_1("w3codebox") res2 := value_2(234) // 결과를 출력합니다 fmt.Println("Result" 1: "", "res"1.display()) fmt.Println("Result" 2: "", "res"2.display()) }
출력:
결과 1: oldtoolbag.com 결과 2: 532