Métodos con el mismo nombre en Golang

En el lenguaje Go, se permite crear dos o más métodos con el mismo nombre en el mismo paquete, pero el receptor de estos métodos debe ser de diferentes tipos. Esta función no está disponible en la función Go, lo que significa que no puede crear métodos con el mismo nombre en el mismo paquete; si intenta hacerlo, el compilador arrojará un error.

Sintaxis:

func(reciver_name_1 Type) method_name(parameter_list)(return_type){
// Code
}

func(reciver_name_2 Type) method_name(parameter_list)(return_type){
// Code
}

Discutamos este concepto con la ayuda de los ejemplos:

Ejemplo 1:

// Go program to illustrate how to
// create methods of the same name
package main
  
import "fmt"
  
// Creating structures
type student struct {
    name   string
    branch string
}
  
type teacher struct {
    language string
    marks    int
}
  
// Same name methods, but with
// different type of receivers
func (s student) show() {
  
    fmt.Println("Name of the Student:", s.name)
    fmt.Println("Branch: ", s.branch)
}
  
func (t teacher) show() {
  
    fmt.Println("Language:", t.language)
    fmt.Println("Student Marks: ", t.marks)
}
  
// Main function
func main() {
  
    // Initializing values
    // of the structures
    val1 := student{"Rohit", "EEE"}
  
    val2 := teacher{"Java", 50}
  
    // Calling the methods
    val1.show()
    val2.show()
}

Producción:

Name of the Student: Rohit
Branch:  EEE
Language: Java
Student Marks:  50

Explicación: En el ejemplo anterior, tenemos dos métodos con el mismo nombre, es decir, show() pero con diferentes tipos de receptores. Aquí el primer método show() contiene un receptor que es del tipo estudiante y el segundo método show() contiene un receptor que es del tipo profesor. Y en la función main() , llamamos a ambos métodos con la ayuda de sus respectivas variables de estructura. Si intenta crear estos métodos show() con el mismo tipo de receptor, el compilador arroja un error.

Ejemplo 2:

// Go program to illustrate how to
// create the same name methods
// with non-struct type receivers
package main
  
import "fmt"
  
type value_1 string
type value_2 int
  
// Creating same name function with
// different types of non-struct receivers
func (a value_1) display() value_1 {
  
    return a + "forGeeks"
}
  
func (p value_2) display() value_2 {
  
    return p + 298
}
  
// Main function
func main() {
  
    // Initializing the values
    res1 := value_1("Geeks")
    res2 := value_2(234)
  
    // Display the results
    fmt.Println("Result 1: ", res1.display())
    fmt.Println("Result 2: ", res2.display())
}

Producción:

Result 1:  GeeksforGeeks
Result 2: 532

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *