Go面向对象编程1——面向对象编程 Go 语言的代码是以包结构来组织的,且如果标示符(变量名,函数名,自定义类型等)如果以大写字母开头那么这些标示符是可以导出的,可以在任何导入了定义该标示符的包的包中直接使用。Go 语言中的面向对象和 C++,Java 中的面向对象不同,因为 Go 语言不支持继承,Go 语言只支持组合。 自定义类型 Go 语言的中结构体 struct 与 C++、JAVA 中的类 class 相似,但 Go 放弃 2023-10-27 B_Code > GO > Go简明手册 > 面向对象编程 > 面向对象编程 #Code/Go #Go #Go简明手册 #手册/Go简明手册
【Go简明手册】Go面向对象编程3——组合 Go 语言虽然抛弃了继承,但是却提供了一个更加方便的组合特性。相对于继承的编译期确定实现,组合的运行态指定实现,更加灵活。下面通过一段代码来了解组合的基本属性以及它与继承的不同之处。 先定义一个结构体 Base, 并为它添加两个方法 Foo() 和 Bar(): 1234567891011121314151617type Base struct{ Name string} 2023-10-27 B_Code > GO > Go简明手册 > 面向对象编程 > 组合 #Code/Go #Go #Go简明手册 #手册/Go简明手册
【Go简明手册】Go面向对象编程2——方法 Demo 方法 方法是作用在自定义类型上的一类特殊函数,通常自定义类型的值会被传递给该函数,该值可能是以指针或者复制值的形式传递。定义方法和定义函数几乎相同,只是需要在 func 关键字和方法名之间必须写上接接受者。例如我们给类型 Count 定义了以下方法: 12345type Count intfunc (count *Count) Increment() { *count+ 2023-10-27 B_Code > GO > Go简明手册 > 面向对象编程 > 方法
Go面向对象编程5——接口变量值的类型 Demo 接口 在 Go 中,接口是一组方法签名。当一个类型为接口中的所有方法提供定义时,它被称为实现该接口。它与 oop 非常相似。接口指定类型应具有的方法,类型决定如何实现这些方法。 接口基础 之所以说 Go 语言的面向对象很灵活,很大一部分原因是由于接口的存在。接口是一个自定义类型,它声明了一个或者多个方法签名,任何实现了这些方法的类型都实现这个接口。infterface{ 2023-10-27 B_Code > GO > Go简明手册 > 面向对象编程 > 接口变量值的类型 #Code/Go #Go #手册/Go简明手册 #Go 简明手册
【Go简明手册】Go面向对象编程4——接口 Demo 接口 在 Go 中,接口是一组方法签名。当一个类型为接口中的所有方法提供定义时,它被称为实现该接口。它与 oop 非常相似。接口指定类型应具有的方法,类型决定如何实现这些方法。 接口基础 之所以说 Go 语言的面向对象很灵活,很大一部分原因是由于接口的存在。接口是一个自定义类型,它声明了一个或者多个方法签名,任何实现了这些方法的类型都实现这个接口。infterface{ 2023-10-27 B_Code > GO > Go简明手册 > 面向对象编程 > 接口 #Code/Go #Go简明手册 #手册/Go简明手册
Go面向对象编程6——嵌入 interface 在前面的课程中我们已经知道在结构体中可以嵌入匿名字段,其实在接口里也可以再嵌入接口。如果一个 interface1 作为 interface2 的一个嵌入字段,那么 interface2 隐式的包含了 interface1 里的方法。如下例子中,Interface2 包含了 Interface1 的所有方法。 123456789type Interface1 interface { 2023-10-27 B_Code > GO > Go简明手册 > 面向对象编程 > 嵌入interface #Code/Go #Go #Go简明手册 #手册/Go简明手册
Go简明手册——词频统计综合案例 IMG-20240814102207036.go 实现 词频统计的程序逻辑很简单。我们首先会创建一个映射,然后读取文件的每一行,提取单词,然后更新映射中单词所对应的数量即可。 为了演示面向对象和 goroutine 的使用,我们将基础映射类型封装成了一个统计单词频率的包。我们在基础映射类型上创建了类型 WordCound,然后为该类型了实现了关键方法 UpdateFreq() 和 WordF 2023-10-27 B_Code > GO > Go简明手册 > 词频统计综合案例 #Go简明手册 #Code #GO #面向对象编程
Go并发编程——超时机制 通过前面的内容我们了解到,channel 的读写操作非常简单,只需要通过 <- 操作符即可实现,但是 channel 的使用不当却会带来大麻烦。我们先来看之前的一段代码: 123a := make(chan int)a <- 1z := <-a 观察上面三行代码,第 2 行往 channel 内写入了数据,第 3 行从 channel 中读取了数据,如果程序运行正常当然不会出什么 2023-10-27 B_Code > GO > Go简明手册 > 并发与并行 > 超时机制 #Code/Go #Go #Go简明手册 #手册/Go简明手册
Go并发编程——select select 用于处理异步 IO 问题,它的语法与 switch 非常类似。由 select 开始一个新的选择块,每个选择条件由 case 语句来描述,并且每个 case 语句里必须是一个 channel 操作。它既可以用于 channel 的数据接收,也可以用于 channel 的数据发送。如果 select 的多个分支都满足条件,则会随机的选取其中一个满足条件的分支。 新建源文件 channe 2023-10-27 B_Code > GO > Go简明手册 > 并发与并行 > select #Go
Go并发编程——goroutine goroutine 是 Go 语言并行设计的核心。goroutine 是一种比线程更轻量的实现,十几个 goroutine 可能在底层就是几个线程。 不同的是,Golang 在 runtime、系统调用等多方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或者进行系统调用时,会主动把当前 goroutine 的 CPU (P) 转让出去,让其他 goroutine 能被调度并执行, 2023-10-27 B_Code > GO > Go简明手册 > 并发与并行 > goroutine #Code/Go #Go #Go简明手册 #手册/Go简明手册