面向对象
工程结构
新建一个oop.go
package _oop // Package _oop 引用名称
import (
"fmt"
"strconv"
)
// GIRL 常量
const (
// GIRL 自增
GIRL Gender = iota
FIRST
SECOND
THIRD
)
type Gender uint8 // 无符号的8位整数类型
// User 结构体
type User struct {
Name string
Age uint8
Gender Gender
}
/**
方法参数中带*意思是传递的是结构体的指针,如果修改会影响外部的值,如果不带星则是传入了一个复制出来的值
*/
// AddAge 方法
func (u *User) AddAge() {
u.Age++
}
// Run 方法
func (*User) Run() {
fmt.Println("user run")
}
// Sleep 方法
func (*User) Sleep() {
fmt.Println("user sleep")
}
func UserCase() {
u := new(User) // &为取地址符号
u.Run()
u.Sleep()
fmt.Println(GIRL)
fmt.Println(THIRD)
fmt.Println("修改前的Age" + strconv.FormatInt(int64(u.Age), 10)) // strconv.FormatInt(int64(u.Age), 10) 这里是将十进制的数字转为了string类型
u.AddAge()
fmt.Println("修改前的Age" + strconv.FormatInt(int64(u.Age), 10))
}
再写一个main主程序掉用
package main
import _study "study/oop" // 引入另一个go文件 _study为package名称 后边是他的存在路径以根目录为开始
func main() {
_study.UserCase()
}
多态
工程结构
编写一个新的go文件,在go中只要是实现了接口的方法就算是实现
package polymorphism
import (
"fmt"
)
type Person interface {
Run()
Sleep()
}
// Teacher 结构体
type Teacher struct {
}
// Student 结构体
type Student struct {
}
/**
方法参数中带*意思是传递的是结构体的指针,如果修改会影响外部的值,如果不带星则是传入了一个复制出来的值
*/
// Run Teacher方法
func (*Teacher) Run() {
fmt.Println("Teacher run")
}
// Sleep Teacher方法
func (*Teacher) Sleep() {
fmt.Println("Teacher sleep")
}
// Run Student方法
func (*Student) Run() {
fmt.Println("Student run")
}
// Sleep Student方法
func (*Student) Sleep() {
fmt.Println("Student sleep")
}
func Process(person Person) {
person.Run()
person.Sleep()
}