go_进阶用法
文章平均质量分 87
go 函数式编程、面向对象、错误处理
Sunny_Future
微笑面对人生。
展开
-
Goroutine通道通信channel
1、channel 简介协程是独立执行的,他们之间没有通信。他们必须通信才会变得更有用:彼此之间发送和接收信息并且协调/同步他们的工作。协程可以使用共享变量来通信,但是很不提倡这样做,因为这种方式给所有的共享内存的多线程都带来了困难。而 Go 有一种特殊的类型,通道(channel),就像一个可以用于发送类型化数据的管道,由其负责协程之间的通信,从而避开所有由共享内存导致的陷阱;这种通过通道进行通信的方式保证了同步性。数据在通道中进行传递:在任何给定时间,一个数据被设计为只有一个协程可以对其访问,所以不原创 2021-08-19 21:53:26 · 469 阅读 · 0 评论 -
Go 反射reflect空接口与反射结构体属性方法
1、空接口反射1.0、空接口回顾空接口默认可以接收 任何数据类型的数据,那么,如何判断 空接口 接受的值呢?除了 类型断言 switch case遍历排除外,还有内置方法,可以实现获取 空接口数据的类型、值及其修改值。// 空接口作为函数参数func show(a interface{}) { fmt.Printf("type:%T value:%v\n", a, a)}// 类型断言 switch case 获取空接口参数类型func justifyType(x interface原创 2021-08-15 23:34:47 · 507 阅读 · 0 评论 -
Go 序列化json及反序列化结构体
http协议前后端的交互通过json字符串交互,在Go语言中,序列化与反序列化 需要结构体 的转化。1、序列化为 Json 字符串1.1 json.Marshl 序列化func Marshal(v interface{}) ([]byte, error) // 定义 Student类结构体type Student struct { Code int `json:"code"` // 使用tag,表示对应json的字段名 Message string `j原创 2021-08-13 00:12:21 · 1530 阅读 · 1 评论 -
Go 接口(interface)实现、空接口用法分析
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。0、接口类型在Go语言中,接口(interface)是一种类型,一种抽象的类型。Go语言试图让程序员能在安全和灵活的编程之间取得一个平衡。它在提供严格的类型检查的同时,通过接口类型实现了对鸭子类型的支持,使得安全动态的编程变得相对容易。Go的接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让对象更加灵活和更具有适应能力。很多面向对象的语原创 2021-08-11 22:50:52 · 1130 阅读 · 0 评论 -
Go 结构体匿名嵌套与方法指针接收者
Golang没有对象和继承的概念,也没有很多与面向对象相关的概念,例如继承、多态和重载。But,通过结构体的内嵌再配合接口,可以实现比面向对象更高的扩展性和灵活性。0、初识常见的数据类型数组、切片、字符串、字典、指针等都是指定某一类的数据类型,而结构体则是一种可以包含多种数据类型的数据类型。在Go语言特性下,若是要对标java、python面向对象,那么对应关系如下:结构体(struct),对应面向对象的初始化字段信息,是一个包含多种类型的集合方法(method),对应类的方法,一种作用于特定类型原创 2021-07-16 03:42:49 · 2289 阅读 · 1 评论 -
Go 函数签名、可变参数、装饰器、匿名函数及闭包
1、函数定义无需声明原型支持不定变参支持多返回值支持命名返回参数支持匿名函数和闭包函数也是一种类型,一个函数可以赋值给变量不支持 嵌套 (nested) 一个包不能有两个名字一样的函数不支持 重载 (overload)不支持 默认参数 (default parameter)Go为编译型语言,即函数编写的顺序与执行顺序无关~鉴于可读性,good coder 最好把 main() 函数写在文件的前面,其他函数按照一定逻辑顺序进行编写(例如函数被调用的顺序)1.1 函数签名函数参数、原创 2021-07-15 01:19:56 · 1049 阅读 · 3 评论