当前位置: 首页 > news >正文

02 Golang面向对象编程_20240727 课程笔记

视频课程

最近发现越来越多的公司在用Golang了,所以精心整理了一套视频教程给大家,这个是其中的第二部,后续还会有很多。

视频已经录制完成,完整目录截图如下:
在这里插入图片描述

课程目录

  • 01 结构体的声明.mp4
  • 02 使用var根据结构体创建对象.mp4
  • 03 使用new根据结构体创建对象.mp4
  • 04 使用取地址符根据结构体创建对象.mp4
  • 05 结构体的顺序初始化.mp4
  • 06 通过工厂函数创建结构体对象.mp4
  • 07 将结构体对象转换为JSON字符串.mp4
  • 08 将JSON字符串转换为结构体对象.mp4
  • 09 结构体的标签.mp4
  • 10 结构体的嵌套.mp4
  • 11 结构体的方法.mp4
  • 12 接口的基本用法.mp4
  • 13 通过接口实现多态.mp4
  • 14 练习:求三角形的面积.mp4
  • 15 面向对象的封装性.mp4
  • 16 练习:多态求几何图形的面积.mp4
  • 17 接口的组合.mp4
  • 18 接口的类型推断.mp4
  • 19 通过反射获取变量的类型.mp4
  • 20 通过反射判断变量的类型.mp4
  • 21 通过反射修改变量的值.mp4

每节课的代码

01 结构体的声明.mp4

package main// 使用type进行声明
// 使用struct说明这是一个结构体,类似于Java中的class声明一个类
type User struct {name string // 小写的说明是内部使用,类似于Java的privateAge  int    // 大小的说明是外部使用,类似于Java的public
}

02 使用var根据结构体创建对象.mp4

package mainimport "fmt"// 使用type进行声明
// 使用struct说明这是一个结构体,类似于Java中的class声明一个类
type User struct {name string // 小写的说明是内部使用,类似于Java的privateAge  int    // 大小的说明是外部使用,类似于Java的public
}func main() {var u Userfmt.Println(u)u.name = "张三"u.Age = 23fmt.Println(u)
}

03 使用new根据结构体创建对象.mp4

package mainimport "fmt"// 使用type进行声明
// 使用struct说明这是一个结构体,类似于Java中的class声明一个类
type User struct {name string // 小写的说明是内部使用,类似于Java的privateAge  int    // 大小的说明是外部使用,类似于Java的public
}func main() {var u = new(User)fmt.Println(u)u.name = "张三"u.Age = 23fmt.Println(u)
}

04 使用取地址符根据结构体创建对象.mp4

package mainimport "fmt"// 使用type进行声明
// 使用struct说明这是一个结构体,类似于Java中的class声明一个类
type User struct {name string // 小写的说明是内部使用,类似于Java的privateAge  int    // 大小的说明是外部使用,类似于Java的public
}func main() {var u = &User{name: "",Age:  0,}fmt.Println(u)u.name = "张三"u.Age = 23fmt.Println(u)
}

05 结构体的顺序初始化.mp4

package mainimport "fmt"// 使用type进行声明
// 使用struct说明这是一个结构体,类似于Java中的class声明一个类
type User struct {name string // 小写的说明是内部使用,类似于Java的privateAge  int    // 大小的说明是外部使用,类似于Java的public
}func main() {var u = User{"张三", 33}fmt.Println(u)
}

06 通过工厂函数创建结构体对象.mp4

package mainimport "fmt"// 使用type进行声明
// 使用struct说明这是一个结构体,类似于Java中的class声明一个类
type User struct {name string // 小写的说明是内部使用,类似于Java的privateAge  int    // 大小的说明是外部使用,类似于Java的public
}func NewUser(name string, age int) *User {return &User{name, age}
}func main() {var u = NewUser("张三", 33)fmt.Println(u)
}

07 将结构体对象转换为JSON字符串.mp4

package mainimport ("encoding/json""fmt"
)type User struct {name stringAge  int
}func main() {var u = User{"张三", 33}data, err := json.Marshal(u)if err != nil {fmt.Println(err)return}fmt.Println(string(data))
}

08 将JSON字符串转换为结构体对象.mp4

package mainimport ("encoding/json""fmt"
)type User struct {name stringAge  int
}func main() {var s = `{"Age":33}`var u Usererr := json.Unmarshal([]byte(s), &u)if err != nil {fmt.Println(err)return}fmt.Println(u)fmt.Println(u.name, u.Age)
}

09 结构体的标签.mp4


package mainimport ("encoding/json""fmt"
)type User struct {Name string `json:"name"`Age  int    `json:"age"`
}func main() {var u = User{"张三", 33}data, err := json.Marshal(u)if err != nil {fmt.Println(err)return}fmt.Println(string(data))
}

10 结构体的嵌套.mp4

package mainimport ("encoding/json""fmt"
)type Address struct {Province string `json:"province"`City     string `json:"city"`
}type User struct {Name     string  `json:"name"`Age      int     `json:"age"`UAddress Address `json:"address"`
}func main() {var u = User{"张三", 33, Address{"四川", "成都"}}data, err := json.Marshal(u)if err != nil {fmt.Println(err)return}fmt.Println(string(data))
}

11 结构体的方法.mp4

package mainimport ("fmt"
)type User struct {Name string `json:"name"`Age  int    `json:"age"`
}
type UserManager struct {Users []User `json:"users"`
}func NewUserManager() *UserManager {return &UserManager{Users: make([]User, 0),}
}func (um *UserManager) AddUser(u User) {um.Users = append(um.Users, u)
}func main() {um := NewUserManager()um.AddUser(User{"张三", 33})fmt.Println(um.Users)
}

12 接口的基本用法.mp4

package mainimport ("fmt"
)type IAnimal interface {Walk()Talk()
}type Cat struct{}func (cat *Cat) Walk() {fmt.Println("蹦蹦跳")
}
func (cat *Cat) Talk() {fmt.Println("喵喵喵")
}
func main() {var animal IAnimal = new(Cat)animal.Walk()animal.Talk()
}

13 通过接口实现多态.mp4

package mainimport ("fmt"
)type IAnimal interface {Walk()Talk()
}type Cat struct{}func (cat *Cat) Walk() {fmt.Println("蹦蹦跳")
}
func (cat *Cat) Talk() {fmt.Println("喵喵喵")
}type Dog struct{}func (cat *Dog) Walk() {fmt.Println("四脚着地跑")
}
func (cat *Dog) Talk() {fmt.Println("汪汪汪")
}func main() {var animal IAnimal = new(Cat)animal.Walk()animal.Talk()animal = new(Dog)animal.Walk()animal.Talk()
}

14 练习:求三角形的面积.mp4

package mainimport "fmt"type Triangle struct {Bottom float32Height float32
}func (t *Triangle) Area() float32 {return (t.Height * t.Bottom) / 2
}func main() {t := &Triangle{8, 12}fmt.Println(t.Area())
}

15 面向对象的封装性.mp4

package usertype User struct {name string
}func (u *User) SetName(name string) {u.name = name
}func (u *User) GetName() string {return u.name
}
package mainimport ("fmt""hello_go/c15_user/user"
)func main() {zs := &user.User{}zs.SetName("张三")fmt.Println(zs.GetName())
}

16 练习:多态求几何图形的面积.mp4

package mainimport "fmt"type IShape interface {Area() float32
}type Triangle struct {Bottom float32Height float32
}func (t *Triangle) Area() float32 {return (t.Height * t.Bottom) / 2
}type Square struct {Width  float32Height float32
}func (s *Square) Area() float32 {return s.Height * s.Width
}func main() {var s IShapes = &Triangle{8, 12}fmt.Println(s.Area())s = &Square{8, 12}fmt.Println(s.Area())
}

17 接口的组合.mp4

package maintype IRead interface {Read(path string)
}
type IWrite interface {Write(p []byte)
}// 既拥有IRead相关的接口,也拥有IWrite相关的接口
type IFile interface {IReadIWrite
}

18 接口的类型推断.mp4

package mainimport "fmt"func main() {var a interface{} = 33switch a.(type) {case int:fmt.Println("int")case string:fmt.Println("string")default:fmt.Println("unknown")}
}

19 通过反射获取变量的类型.mp4

package mainimport ("fmt""reflect"
)func main() {var a interface{} = 33fmt.Println(reflect.TypeOf(a))
}

20 通过反射判断变量的类型.mp4

package mainimport ("fmt""reflect"
)func main() {var a interface{} = 33ra := reflect.ValueOf(a)fmt.Println("type:", ra.Type())fmt.Println(ra.Kind())fmt.Println(ra.Kind() == reflect.Int)
}

21 通过反射修改变量的值.mp4

package mainimport ("fmt""reflect"
)func main() {a := 33fmt.Println("修改之前:", a)// 如果要修改,一定要传引用ra := reflect.ValueOf(&a)rae := ra.Elem()rae.SetInt(333)fmt.Println("修改之后:", a)
}

代码截图

在这里插入图片描述

总结

本套教程作为Go语言的零基础入门课程,主要讲解了Go语言的一些入门级别的简单基础知识,每节课都附上了完整的源码,以实战为主。

如果您需要完整的源码,打赏20元即可。

人生苦短,我用Python,我是您身边的Python私教~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Day10--mybatis多表连接查询学习(一对一、一对多、多对多)
  • Mongodb文档和数组的通配符索引
  • JAVA小白学习日记Day10
  • maven引入了jar包但在class文件里找不到jar包里的类
  • windows上启动Kafka
  • 暑期C++ 缺省参数
  • 视觉-语言大模型应用
  • 大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)
  • 20240730 每日AI必读资讯
  • 使用easypoi读取Excel模板
  • JAVA8中的Stream API是什么及其用法
  • 数据结构(二叉树-2)
  • TCP/IP的三次握手和四次握手
  • 【MetaGPT系列】【MetaGPT完全实践宝典——多智能体实践】
  • 【Opencv】色彩空间 color space
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • input实现文字超出省略号功能
  • Java 内存分配及垃圾回收机制初探
  • Laravel5.4 Queues队列学习
  • Making An Indicator With Pure CSS
  • Python打包系统简单入门
  • React+TypeScript入门
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 官方解决所有 npm 全局安装权限问题
  • 力扣(LeetCode)56
  • 使用putty远程连接linux
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 06-01 点餐小程序前台界面搭建
  • FaaS 的简单实践
  • ​​​​​​​​​​​​​​Γ函数
  • ​如何使用QGIS制作三维建筑
  • ​什么是bug?bug的源头在哪里?
  • ​香农与信息论三大定律
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • (13):Silverlight 2 数据与通信之WebRequest
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (笔试题)合法字符串
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (一)Java算法:二分查找
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .Net IOC框架入门之一 Unity
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .net网站发布-允许更新此预编译站点
  • .net下简单快捷的数值高低位切换
  • @Autowired注解的实现原理
  • @RequestBody的使用
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @Transactional 竟也能解决分布式事务?
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor
  • @取消转义