在golang中支持同名方法吗?答案是肯定的,Go语言中允许在同一包中创建两个或多个具有相同名称的方法,但是这些方法的接收者必须具有不同的类型;注该功能在Go函数中不可用,这意味着不允许用户在同一包中创建相同名称的方法,如果尝试这样做,则编译器将抛出错误。
本文适用于windows7系统、GO 1.18版本、Dell G3电脑。
在golang中能否支持同名方法之简析
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()
}
在上面的示例中,我们有两个相同的名称方法,即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("nhooo")
res2 := value_2(234)
// 打印显示结果
fmt.Println("Result 1: ", res1.display())
fmt.Println("Result 2: ", res2.display())
}
在golang中能否支持同名方法之简析就到这里,翼速应用平台内有更多相关资讯,欢迎查阅!
我来说两句