有没有办法在Go中重载函数?

有没有办法在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-尝试thisinterface转换并输入的断言:

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

Built-in functions

内置函数是预先声明。它们被称为像其他任何 函数,但其​​中一些接受类型而不是第一个参数为 的表达式。

内置函数没有标准的Go类型,所以它们只能在调用表达式中出现 ;它们不能用作函数值。


转到编程语言不允许除了围棋函数重载内置函数。你无法超载你的函数。