English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 튜토리얼

Golang 제어 문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 동기

Golang 예외(Error)

Golang 다른 항목

Go同名 메서드

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