有没有办法在Go中重载函数?
问题描述:
我读过,没有办法在Go中重载函数。我的意思是重载,一种具有相同名称但具有不同参数的两个函数的方法。有没有办法在Go中重载函数?
我所看到的东西在围棋的内置功能奇特:
我们假设ch1
是一个通道变量:
ch1 := make(chan string)
它可以从这样的通道读取财产以后:
result := <-ch1
但它也可以得到这样一个状态:
result, status := <-ch1
那么,有没有办法重载像内置函数的函数?
答
没有。
出于显而易见的原因,这就是所谓的逗号OK成语(不是函数重载):
result, status := <-ch1
1-尝试this为渠道:
package main
import (
"fmt"
)
func main() {
ch1 := make(chan string, 1)
ch1 <- `Hi`
result, status := <-ch1
fmt.Println(result, status) // Hi true
ch1 <- `Hi`
close(ch1)
result, status = <-ch1
fmt.Println(result, status) // Hi true
result, status = <-ch1
fmt.Println(result, status) // false
}
输出:
Hi true
Hi true
false
2-尝试this为图:
package main
import (
"fmt"
)
func main() {
m := map[string]int{"One": 1, "Two": 2}
result, status := m["One"]
fmt.Println(result, status) // 1 true
result, status = m["Two"]
fmt.Println(result, status) // 2 true
result, status = m["Zero"]
fmt.Println(result, status) // 0 false
}
输出:
1 true
2 true
0 false
3-尝试this为interface
转换并输入的断言:
package main
import (
"fmt"
)
func main() {
var s interface{} = `One`
result, status := s.(string)
fmt.Println(result, status) // One true
i, status := s.(int)
fmt.Println(i, status) // 0 false
}
输出:
One true
0 false
答
The Go Programming Language Specification
内置函数是预先声明。它们被称为像其他任何 函数,但其中一些接受类型而不是第一个参数为 的表达式。
内置函数没有标准的Go类型,所以它们只能在调用表达式中出现 ;它们不能用作函数值。
转到编程语言不允许除了围棋函数重载内置函数。你无法超载你的函数。