阅读目录
- 场景
- 接口示例
- 接口实现
场景
A、一个公司要计算所有职员的薪水。
B、每个职员的薪水计算方式不同。
接口示例
Animal 接口可以存储任何实现对象。
package main
import "fmt"
type Animal interface {
Talk()
Eat()
Name() string
}
type Dog struct {
}
func (d Dog) Talk() {
fmt.Println("汪汪汪")
}
func (d Dog) Eat() {
fmt.Println("我在吃骨头")
}
func (d Dog) Name() string {
fmt.Println("我的名字叫旺财")
return "旺财"
}
// 接口实现
func main() {
var d Dog
var a Animal
a = d
// b 需要实现 a 的所有方法,否则报错
a.Eat()
a.Talk()
a.Name()
var p Pig
a = p
a.Talk()
a.Eat()
a.Name()
}
type Pig struct{}
func (p Pig) Talk() {
fmt.Println("哼哼哼")
}
func (p Pig) Eat() {
fmt.Println("我造吃吃吃...")
}
func (p Pig) Name() string {
fmt.Println("我的名字是八戒")
return "八戒"
}
PS E:\TEXT\test_go\one> go run .\main.go
我在吃骨头
汪汪汪
我的名字叫旺财
哼哼哼
我造吃吃吃...
我的名字是八戒
PS E:\TEXT\test_go\one>
接口实现
package main
import "fmt"
type Employer interface {
CalculateSalary() float32
}
// 程序员
type Programmer struct {
Name string
Base float32
Achievements float32
}
func NewProgrammer(Name string, Base float32, Achievements float32) Programmer {
return Programmer{
Name: Name,
Base: Base,
Achievements: Achievements,
}
}
func (p Programmer) CalculateSalary() float32 {
return p.Base + p.Achievements*p.Base*0.5
}
func main() {
p1 := NewProgrammer("wg程序员", 50000.00, 0)
p2 := NewProgrammer("chen程序员", 15000.00, 0)
var empList []Employer
empList = append(empList, p1)
empList = append(empList, p2)
s1 := NewSale("A销售", 1500.00, 0.003)
empList = append(empList, s1)
cost := calcAll(empList)
fmt.Printf("这个月的人力成本是:%f\n", cost)
}
// 计算人力成本
func calcAll(e []Employer) float32 {
var cost float32
for _, v := range e {
cost += v.CalculateSalary()
}
return cost
}
// 销售
type Sale struct {
Name string
Base float32
Achievements float32
}
func NewSale(Name string, Base float32, Achievements float32) Sale {
return Sale{
Name: Name,
Base: Base,
Achievements: Achievements,
}
}
func (p Sale) CalculateSalary() float32 {
return p.Base + p.Achievements*p.Base*0.5
}
PS E:\TEXT\test_go\one> go run .\main.go
这个月的人力成本是:66502.250000
PS E:\TEXT\test_go\one>