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私教~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS基础---多线程:GCD、NSThread、NSOperation

系列文章目录 iOS基础—多线程:GCD、NSThread、NSOperation 文章目录 系列文章目录一、GCD1.GCD的任务、函数、队列a.任务b.函数c.队列 2.GCD的使用a.同步函数并发队列b.异步函数并发队列c.同步函数串行队列d.异步函数串行队列e.同步函数主队列f.异步函数主队列 3.…

FastAPI(七十五)实战开发《在线课程学习系统》接口开发-- 创建课程

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 上次我们分享了,FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言 从本篇文章开始,…

如何学习Doris:糙快猛的大数据之路(从入门到专家)

引言:大数据世界的新玩家 还记得我第一次听说"Doris"这个名字时的情景吗?那是在一个炎热的夏日午后,我正在办公室里为接下来的大数据项目发愁。作为一个刚刚跨行到大数据领域的新手,我感觉自己就像是被丢进了深海的小鱼—周围全是陌生的概念和技术。 就在这时,我的…

嵌入式Python、ROS、SLAM、WebSocket和Node.js:智能巡逻监控安防机器人设计流程(代码示例)

项目概述 随着智能技术的发展,智能巡逻机器人在安防、监控和巡逻等领域的应用越来越广泛。本文将介绍一个结合嵌入式系统、机器人技术和后端开发的智能巡逻机器人。该机器人能够自主导航,实时检测异常情况(如火灾或入侵者)&#…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十七章 Linux中断实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

AI绘画:艺术与科技融合的新篇章

随着人工智能(AI)技术的飞速发展,AI绘画作为一种新兴的艺术形式,正逐步改变着传统艺术创作的格局。从早期的简单模仿到如今的个性化创作,AI绘画不仅提升了艺术创作的效率和质量,还开辟了全新的应用场景和商…

C++模板——泛型编程

目录 1. 什么是泛型编程 2. 函数模板 2.1 定义格式 2.2 实例化及原理 2.3 参数匹配原则 3. 类模板 3.1 定义格式 3.2 实例化 4. 非类型模板参数 5. 模板的特化 5.1 概念 5.2 函数模板和类模板特化 6. 模板的分离编译 1. 什么是泛型编程 如何实现一个通用的加…

【Java算法专场】二分查找(下)

目录 山脉数组的峰顶索引 算法分析 算法步骤 算法代码 算法示例 寻找峰值 算法分析 算法步骤 算法代码 算法示例 寻找旋转排序数组中的最小值 算法分析 算法步骤 算法代码 算法示例 点名 算法分析 算法步骤 算法代码 算法示例 山脉数组的峰顶索引 …

TCP/IP协议(全的一b)应用层,数据链层,传输层,网络层,以及面试题

目录 TCP/IP协议介绍 协议是什么,有什么作用? 网络协议为什么要分层 TCP/IP五层网络协议每层的作用 应⽤层 DNS的作用及原理 DNS工作流程 数据链路层 以太⽹帧格式 MAC地址的作用 ARP协议的作⽤ ARP协议的工作流程 MTU以及MTU对 IP / UD / TCP 协议的影响 传输层…

数据结构之判断二叉树是否为搜索树(C/C++实现)

文章目录 判断二叉树是否为搜索树方法一:递归法方法二:中序遍历法总结 二叉树是一种非常常见的数据结构,它在计算机科学中有着广泛的应用。二叉搜索树(Binary Search Tree,简称BST)是二叉树的一种特殊形式&…

自动化测试--WebDriver API

1. 元素定位方法 通过 ID 定位:如果元素具有唯一的 ID 属性,可以使用 findElement(By.id("elementId")) 方法来定位元素。通过 Name 定位:使用 findElement(By.name("elementName")) 来查找具有指定名称的元素。通过 Cl…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 5键键盘(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

Linux常用操作

软件安装 CentOS 系统使用: yum [install remove search] [-y] 软件名称 install 安装 remove 卸载 search 搜索 -y ,自动确认 Ubuntu 系统使用 apt [install remove search] [-y] 软件名称 install 安装 remove 卸载 search 搜索 -y…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十六章 自动创建设备节点

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

前端播放rtsp视频流(最后使用WebRtc)

前端播放rtsp视频流(最后使用WebRtc) 前言: ​ 项目需要将实验室里的摄像头画面引入到前端页面中,故对目前常见的几种方法进行了尝试,虽然过程坎坷但结局是好的。 一些尝试: RTSPtoWebRtc工具 由于RTSPt…

opengl 写一个3D立方体——计算机图形学编程 第4章 管理3D图形数据 笔记

计算机图形学编程(使用OpenGL和C) 第4章 管理3D图形数据 笔记 数据处理 想要绘制一个对象,它的顶点数据需要发送给顶点着色器。通常会把顶点数据在C端放入 一个缓冲区,并把这个缓冲区和着色器中声明的顶点属性相关联。 初始化立…

力扣 二分查找

二分查找基础篇。 题目 class Solution {public int searchInsert(int[] nums, int target) {int l 0, r nums.length - 1;while(l < r) {int mid l((r-l)>>1);//(lr)/2if(nums[mid]<target)lmid1;else rmid-1;}return l;//处理边界&#xff0c;设定数组的左半…

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起&#xff0c;返回一个可迭代的 zip 对象&#xff0c;其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组&#xff0c;最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

论文阅读——Design of Environmental backscatter tag antenna for 5G Internet of things

文章目录 摘要一、背景二、系统模型三、天线设计A. 指标B. 天线结构描述C. 天线结构优化D. 天线结构确定 四、仿真结果总结 论文来源&#xff1a;https://ieeexplore.ieee.org/document/9379395 摘要 文章针对传统设备识别在电力物联网场景中存在的可靠性低和读取距离不足的问…

Java智慧养老养老护理帮忙代办陪诊陪护小程序系统源码

&#x1f31f;智慧养老新风尚&#xff0c;护理代办陪诊小程序来帮忙✨ &#x1f3e1;【开篇&#xff1a;关爱老人&#xff0c;从智慧养老开始】&#x1f3e1; 随着社会的进步&#xff0c;智慧养老已成为新时代孝心的体现。面对忙碌的生活节奏&#xff0c;如何更好地照顾家中长…