NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • Java视角看Go

    • 前言
    • 环境安装
    • 介绍
    • 基本语法
    • 集合
    • 面向对象
      • struct结构体(类似POJO)
        • 定义
        • 封装
        • 命名规范
        • 继承
        • 多态
      • interface接口
        • 通用万能类型(类似Object)
        • 类型断言
    • 反射
    • 协程
    • 常见库
  • other

  • 笔记

  • 代码片段

  • Golang
  • Java视角看Go
NipGeihou
2022-12-31
目录

面向对象

# struct 结构体(类似 POJO)

# 定义

type Person struct {
	name string
	age  int
}

func main() {
	var person1 Person
	person1.name = "张三"
	person1.age = 18

	person2 := Person{
		name: "李四",
		age:  20,
	}

	person3 := Person{"王五", 22}

	fmt.Println(person1)
	fmt.Println(person2)
	fmt.Println(person3)
}

# 封装

type Person struct {
	name string
	age  int
}

func (this *Person) GetName() string {
	return this.name
}

func (this *Person) GetAge() int {
	return this.age
}

func (this *Person) SetName(name string) {
	this.name = name
}

func (this *Person) SetAge(age int) {
	this.age = age
}

# 命名规范

  • 类名、方法名、属性名首字母大写,表示 public
  • 类名、方法名、属性名首字母小写,表示 private

# 继承

// 定义Person类
type Person struct {
	name string
	age  int
}

func (this *Person) Eat() {
	fmt.Println("吃饭")
}

func (this *Person) Sleep() {
	fmt.Println("睡觉")
}


// 定义Student类
type Student struct {
	Person // 表示继承Person
	score int
}

func (this *Student) Study() {
	fmt.Println("学习")
}

// 重写
func (this *Student) Sleep() {
	fmt.Println("学生睡觉")
}


func main() {
	// 声明方式1
	var student Student
	student.name = "张三"
	student.age = 18
	student.score = 100

	// 声明方式2
	student2 := Student{
		Person: Person{
			name: "李四",
			age:  20,
		},
		score: 99,
	}

	fmt.Println(student)
	student.Eat()
	student.Sleep()
}

# 多态

基于接口实现多态

// 定义AnimalIF接口,本质上是一个指针
type AnimalIF interface {
	Sleep()
	GetName() string
}

// 定义Dog类
type Dog struct {
	name string
}

func (this *Dog) Sleep() {
	fmt.Println("狗睡觉")
}

func (this *Dog) GetName() string {
	return this.name
}

// 定义Cat类
type Cat struct {
	name string
}

func (this *Cat) Sleep() {
	fmt.Println("猫睡觉")
}

func (this *Cat) GetName() string {
	return this.name
}

func main() {
	var animal AnimalIF
	animal = &Dog{"旺财"}
	animal.Sleep()
	fmt.Println(animal.GetName())

	animal = &Cat{"小花"}
	animal.Sleep()
	fmt.Println(animal.GetName())
}

接口的实现

  • 只要实现了接口中的所有方法,就实现了该接口,不需要显式声明实现了哪个接口
  • 如果只实现了接口中的部分方法,那么该类就没有实现该接口,赋值给该接口的变量会报错

# interface 接口

# 通用万能类型(类似 Object)

func main() {
	var a interface{}
	a = 10
	fmt.Println(a)

	a = "hello"
	fmt.Println(a)

	a = true
	fmt.Println(a)

	a = Person{"张三", 18}
	fmt.Println(a)
}

# 类型断言

func main() {
	var a interface{}
	a = 10
	fmt.Println(a)

	// 类型断言
	value, ok := a.(int)
	if ok {
		fmt.Println(value)
	} else {
		fmt.Println("类型断言失败")
	}
}
  • 类型断言的本质是类型转换
  • 类型断言的结果是两个值,第一个值是转换后的值,第二个值是转换是否成功
上次更新: 2022/12/31, 03:13:11
集合
反射

← 集合 反射→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式