📜  函数,它接受一个接口类型如Golang值和指针

📅  最后修改于: 2021-10-25 03:02:34             🧑  作者: Mango

函数通常是程序中的代码块或语句块,它使用户能够重用相同的代码,最终避免过度使用内存,节省时间,更重要的是,提供更好的代码可读性。所以基本上,一个函数是一组执行某些特定任务并将结果返回给调用者的语句。一个函数也可以执行一些特定的任务而不返回任何东西。

Go 编程语言或 Golang 中的指针是一个变量,用于存储另一个变量的内存地址。 Golang 中的指针也称为特殊变量。这些变量用于在系统中的特定内存地址存储一些数据。内存地址总是以十六进制格式(以 0x 开头,如 0xFFAAF 等)。

在 Go 语言中,接口是一种自定义类型,用于指定一组一个或多个方法签名,并且接口是抽象的,因此不允许您创建接口的实例。但是您可以创建一个接口类型的变量,并且可以为该变量分配一个具有接口所需方法的具体类型值。或者换句话说,接口是方法的集合,也是自定义类型。

现在您可以创建一个将接口类型作为值和指针的函数。要理解这个概念,请看下面的例子:

// Golang Function that takes an interface
// type as value and pointer
package main
  
import "fmt"
  
// taking an interface
type CoursePrice interface {
    show(int)
}
  
// taking a function that accept
// CoursePrice interface as an value
func show(cp CoursePrice, fee int) {
    cp.show(fee)
}
  
// taking a struct
type Dsa struct {
    Price int
}
  
func (c Dsa) show(fee int) {
    c.Price = fee
}
  
// taking a struct
type Placement struct {
    Price int
}
  
// function accepting a pointer
func (p *Placement) show(fee int) {
    p.Price = fee
}
  
// main function
func main() {
  
    first := Dsa{Price: 2499}
    second := Placement{Price: 9999}
  
    // calling the function
    show(first, 1999)
  
    // calling the function
    // by passing the address
    show(&second, 7999)
  
    fmt.Println("DSA Course Fee:", first.Price)
    fmt.Println("Placement100 Course Fee:", second.Price)
}

输出:

DSA Course Fee: 2499
Placement100 Course Fee: 7999