版权声明:本文为博主原创文章,未经博主允许不得转载。 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)
}