0
点赞
收藏
分享

微信扫一扫

golang接口实例一个公司要计算所有职员的薪水


阅读目录

  • ​​场景​​
  • ​​接口示例​​
  • ​​接口实现​​

场景

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>


举报

相关推荐

0 条评论