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

Основной курс Golang

Управляющие операторы Golang

Функции и методы Golang

Структуры Golang

Срезы и массивы Golang

Строки (String) Golang

Указатели Golang

Интерфейсы Golang

Конкурентоспособность Golang

Исключения (Error) Golang

Прочие темы 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("Факультет: ", s.branch) 
} 
  
func (t teacher) show() { 
  
    fmt.Println("Язык:", t.language) 
    fmt.Println("Оценки студента: ", t.marks) 
} 
  
func main() { 
  
    //Инициализация значений структур
    val1 := student{Rohit, "EEE"} 
  
    val2 := teacher{Java, 50} 
  
    //Вызов методов
    val1.show() 
    val2.show() 
}

Вывод:

Имя студента: Rohit
Факультет: EEE
Язык: Java
Оценки студента: 50

Инструкции по использованию:В примере выше, у нас есть два метода с одинаковыми именами, то естьshow(),Но типы приемников разные. Здесь, первыйshow()Метод содержит приемника типа s student, второйshow()Метод содержит приемника типа t teacher. Вmain()В функции, мы используем переменные各自的 структурных типов для вызова этих двух методов. Если попытаться создать этотshow()Если создать метод с таким же именем, то компилятор выдаст ошибку.

Пример 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("Результат 1: ", res1.display()) 
    fmt.Println("Результат 2: ", res2.display()) 
}

Вывод:

Результат 1: oldtoolbag.com
Результат 2: 532