摘要: Go语言提供了一种机制,在编译时不知道类型的情况下,可更新变量、在运行时查看值、调用方法以及直接对它们的布局进行操作,这种机制称为反射(reflection) 为什么使用反射 reflect.Type和reflect.Value 反射功能由reflect包提供,它定义了两个重要的类型:Type和Va 阅读全文
posted @ 2020-06-10 17:28 LinBupt 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 只运行一次 懒汉式,线程安全 var once sync.Once var obj *SingletonObj func GetSingletonObj() *SingletonObj { once.Do(func() { fmt.Println("Create Singleton obj.") o 阅读全文
posted @ 2020-06-10 16:03 LinBupt 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 竞态 考虑一个能在串行程序中正确工作的函数,如果这个函数在并发调用时仍然能正确工作,那么这个函数是并发安全(concurrency-safe)的,在这里并发调用是指,在没有额外同步机制的情况下,从两个或者多个goroutine同时调用这个函数 对于绝大部分变量,如要回避并发访问,要么限制变量只存在于 阅读全文
posted @ 2020-06-10 14:36 LinBupt 阅读(316) 评论(0) 推荐(0) 编辑
摘要: goroutine Go有两种并发编程的风格 goroutine和通道,它们支持通信顺序进程(CSP),CSP是一个并发的模式,在不同的执行体(goroutine)之间传递值,但是变量本身局限于单一的执行体 当一个程序启动时,只有一个goroutine来调用main函数,称它为主goroutine。 阅读全文
posted @ 2020-06-10 13:30 LinBupt 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 接口类型是对其他类型行为的概括与抽象。通过使用接口,可以写出更加灵活和通用的函数,这些函数不用绑定在一个特定的类型实现上 Go语言的接口是隐式实现,对于一个具体的类型,无须声明它实现了哪些接口,只要提供接口所必需的方法即可。这种设计可以无需改变已有类型的实现,就可以为这些类型创建新的接口,对于那些不 阅读全文
posted @ 2020-06-10 13:29 LinBupt 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 方法声明 方法的声明和普通函数的声明类似,只是在函数名字前面多了一个参数,这个参数把这个方法绑定到这个参数对应的类型上 package geometry import ( "fmt" "math" ) type Point struct { X, Y float64 } //普通的函数 func D 阅读全文
posted @ 2020-06-10 13:28 LinBupt 阅读(153) 评论(0) 推荐(0) 编辑