Go语言基础(十)—— Go语言接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/The_Reader/article/details/84348794

Go语言提供了另外一种数据类型即接口,他把所有的共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口

/* 定义接口 */ 
type interface_name interface { 
   method_name1 [return_type] 
   method_name2 [return_type] 
   method_name3 [return_type] 
   ... 
   method_namen [return_type] 
} 
 
/* 定义结构体 */ 
type struct_name struct { 
   /* variables */ 
} 
 
/* 实现接口方法 */ 
func (struct_name_variable struct_name) method_name1() [return_type] {    /* 方法实现 */ 
} 
... 
func (struct_name_variable struct_name) method_namen() [return_type] {    /* 方法实现*/ 
} 

案例:

假设某公司有两个员工,一个普通员工和一个高级员工, 但是基本薪资是相同的,高级员工多拿奖金。计算公司为员工的总开支。

package main

import (
	"fmt"
)

// 薪资计算器接口
type SalaryCalculator interface {
	CalculateSalary() int
}
// 普通挖掘机员工
type Contract struct {
	empId  int
	basicpay int
}
// 有蓝翔技校证的员工
type Permanent struct {
	empId  int
	basicpay int
	jj int // 奖金
}

func (p Permanent) CalculateSalary() int {
	return p.basicpay + p.jj
}

func (c Contract) CalculateSalary() int {
	return c.basicpay
}
// 总开支
func totalExpense(s []SalaryCalculator) {
	expense := 0
	for _, v := range s {
		expense = expense + v.CalculateSalary()
	}
	fmt.Printf("总开支 $%d", expense)
}

func main() {
	pemp1 := Permanent{1,3000,10000}
	pemp2 := Permanent{2, 3000, 20000}
	cemp1 := Contract{3, 3000}
	employees := []SalaryCalculator{pemp1, pemp2, cemp1}
	totalExpense(employees)
}

类型断言

类型断言用于提取接口的基础值,语法:i.(T)

package main

import(
"fmt"
)

func assert(i interface{}){
    s:= i.(int)
    fmt.Println(s)
}

func main(){
  var s interface{} = 55
  assert(s)
}

类型判断

package main

import (  
    "fmt"
)

func findType(i interface{}) {  
    switch i.(type) {
    case string:
        fmt.Printf("String: %s\n", i.(string))
    case int:
        fmt.Printf("Int: %d\n", i.(int))
    default:
        fmt.Printf("Unknown type\n")
    }
}
func main() {  
    findType("Naveen")
    findType(77)
    findType(89.98)
}

猜你喜欢

转载自blog.csdn.net/The_Reader/article/details/84348794