随笔分类 -  go

摘要:首先没有安全的data race go build -race ./1.go 它涉及两个操作 原子性 该操作不是一条汇编语句 可以实现的 。 可见性 每个核心的数据 当加载到寄存器中,并不会立马加载到内存中。 因此,当存在多个核心,加载了数据到寄存器,但都没有加载到内存,可能会导致对方读不到数据内存 阅读全文
posted @ 2021-01-02 21:53 慕沁
摘要:Reader type Reader struct { buf []byte //缓冲区。虽然它是切片类型的,但是其长度却会在初始化的时候指定,并在之后保持不变。 rd io.Reader //底层读取器。缓冲区中的数据就是从这里拷贝来的。 r int //对缓冲区进行下一次读取时的开始索引。我们可 阅读全文
posted @ 2020-05-05 21:19 慕沁
摘要:接口实现 type LimitedReader struct { R Reader // underlying reader N int64 // max bytes remaining } func (l *LimitedReader) Read(p []byte) (n int, err err 阅读全文
posted @ 2020-05-05 15:07 慕沁
摘要:新增 DWORD 类型的 IGMPLevel 字段为 2 , DWORD 类型的 IGMPVersion 字段为 3。 IGMPVersion 字段中 2 表示 IGMPv1, 3 为 IGMPv2, 4 为 IGMPv3(默认)。IGMPLevel 字段中 0 表示不支持组播, 1 表示只支持发送 阅读全文
posted @ 2020-04-27 21:50 慕沁
摘要:1、Micro API (Gateway) 2、Micro CLI 3、Micro Web 4、Micro Proxy (服务代理) 5、Micro 工具集的发展(Auth、Network、Run、Tunnel、Platform) Micro工具集 Go-Micro 与Micro 两个项目的关联 G 阅读全文
posted @ 2020-04-05 15:04 慕沁
摘要:package main import ( "fmt" "sync" "time" ) func main() { rw := sync.RWMutex{} //可以让多个协程同时读取某对象 //初始值为解锁状态,通常作为其他结构体的匿名字段使用 //可以安全的在多个协程中并行使用 rw.Lock( 阅读全文
posted @ 2020-02-11 21:35 慕沁
摘要:Pool 1、用于存储拿些被分配了但是没有被使用,而未来可能会被使用的值,以减小垃圾回收的压力 2、协程安全,应该用于管理协程共享的变量,不推荐用于非协程间的对象管理 3、调动New函数,将使用函数创建一个新对象返回 4、从Pool中取出对象时,如果Pool中没有对象,将执行New(),如果没有对N 阅读全文
posted @ 2020-02-11 20:34 慕沁
摘要:& 位与 | 位或 ^ 异或 0011 1001 1010 &^ 位清空, 0011 1001 0010 a&^b == a^ (a&b) 阅读全文
posted @ 2020-01-31 13:25 慕沁
摘要:1、string 16字节 2、byte 1 3、bool 1 4、int 看机器5、channel 86、slice 24字节(ptr,len,cap) 5、所有的空结构体都是同一个地址;结构体8字节对齐-->加速内存读取速度 结构体 runtime/string.go type stringSt 阅读全文
posted @ 2020-01-30 20:42 慕沁
摘要:Go mod模块是相关Go包的集合.modules源代码交换和版本控制的单元。在GOPATH目录之外新建一个目录,并使用go mod init初始化生成go.mod文件 ;对归档文件进行操作go mod init [项目名] 1 设置GO111MODULE;设置功能 off on auto set 阅读全文
posted @ 2020-01-30 20:37 慕沁
摘要:简化对于处理单个请求的多个goroutine之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个API调用 对服务器传入的请求应该创建上下文、而对服务器的传出调用应该接受上下文,他们之间的函数调用链必须传递上下文, 或者可以使用withChannel\withdeadline\wi 阅读全文
posted @ 2020-01-27 16:05 慕沁
摘要:// switch 默认值func p() bool { return false } func main() { switch p() // 这种情况下会打印true;原因:这种情况下相当于 switch p();true { true 是默认的 { case true: fmt.Println( 阅读全文
posted @ 2020-01-17 17:41 慕沁
摘要:非常强大的管理goroutine和系统内核线程的调度器M(achine):操作系统的主线程(物理线程) P(processor):协程执行需要的上下文(中介) G(oroutine): 协程 在宏观上说,Goroutine与Machine因为Processor的存在,形成了多对多的(M:N)关系,M 阅读全文
posted @ 2020-01-12 14:12 慕沁
摘要:1、序列化的时候指定key的名字2、 1、在运行时动态获取变量的各种信息,比如变量的类型(type)类别(kind) 2、如果是结构体变量,还可以获取到结构体本身的信息(字段、方法) 3、通过反射们可以修改变量的值,可以调用关联的方法 4、reflect 类型(Type)和种类(Kind)的区别。编 阅读全文
posted @ 2019-12-26 10:40 慕沁
摘要:编译 一步编译: gcc -o hello.exe code.c 分步编译: gcc -E hello.c -o hello.i gcc -S hello.i -o hello.s gcc -c hello.s -o hello.o gcc hello.o -o hello.exe -E 预处理,去 阅读全文
posted @ 2019-12-25 22:31 慕沁
摘要://建议使用float64代替float32 //a := 3.14 //float64 var a float64 = 3.14 var b float32 = 3.14 //小数点后保留20位 默认保留六位 会对第7位进行四舍五入 fmt.Printf("%.20f\n",a) fmt.Prin 阅读全文
posted @ 2019-12-25 22:22 慕沁
摘要:defer s.Add(1).Add(2).Add(5) s.Add(3) > 1,2,3,5 defer会执行压栈操作,最后一个延迟调用 new(type) 堆区返回type类型的指针 make(type,len,cap) 堆区声明一个type类型的变量,当初始化时,len>0,接着append会 阅读全文
posted @ 2019-11-03 12:24 慕沁