一个键盘码代码,两只黄鹂名翠柳

goland The selected directory is not a valid home for Go SDK 解决

The selected directory is not a valid home for Go SDK 解决方案Navigate to the Go SDK root (execute go env and find GOROOT entry), then navigate to src/runtime/internal/sys inside the Go SDK root.Edit zversion.go file and add an entry on a new line: const theVersion = `go1.17`zversion.go// Code generated by go too 查看全文

GO值复制

GO语言本身是值传递,先给结论,再看case.标量类型是赋值是值传递,如int float string数组和结构体赋值也是值传递,如[2]string  struct{}指针赋值也是值传递,只不过传递的是地址而已map和slice赋值是引用传递,如map[string][string] []string字符串遍历,得到值是字符,索引是不连续的。如下标量类型func TestInt(t *testing.T) {    num1 := 123    num2 := num1    num1 = 456    fmt.Println(& 查看全文

Go扩容

切片扩容容量如果期望的容量是当前容量的两倍则使用期望容量如果期望容量小于1024则扩容到当前容量的2倍如果期望容量大于1024则扩容当前容量的25%直到满足当前容量需求出触发条只有添加新元素后的cap不满足时才会触发扩容, 扩容后返回一个新的slice结构体处理方式slice=append(slice, one)        扩容后新的slice结构体赋给原sliceappend(slice, one)        则返回一个新slicehash扩容初始化当map中的桶的数量多于24时才会有溢出桶的存在,数量为2^B-4个,B为正常桶的数量hash桶最多存储8个对象,如果超出则需要存储在溢 查看全文

GO-GMP线程模型

介绍G用户态线程M系统线程P处理器,作为M和G的桥梁,负责G的调度和执行.调度器启动时就会创建GOMAXPROCS个处理器。每个处理器都有一个本地空闲队列和运行队列,全局环境各维护着一个空闲队列和运行队列。调度流程获取可用的G首先从P的本地空闲队列获取可用的G 如果没有则从全局空闲队列获取,从全局队列获取时,则会最多同步32个free的G到P的本地free队列.如果没有则创建一个G拿到G后,如果next设置为true, 会有1/2的机会将G放在P的本地队列的next上执行,否则放在P的本地运行队列队末,此时如果本地队里已满,则会触发本地运行队列向全局运行队列迁移动作,期间本地运行队列的一半将迁移到全局运行队列调度首先以1/60的概率从全局运行列获取可用的G。 期间可能会触发全局运行队列向本地运行队列迁移的动作,此时会拿全局队列的 1/GOM 查看全文

go语言开源的项目

使用Go语言开发的开源项目非常多。早期的Go语言开源项目只是通过Go语言与传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等;后期的很多项目都使用Go语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用Go语言原生开发项目的出现。Go 实现的存储服务器[minio] - Minio 是一个与 Amazon S3 APIs 兼容的开源对象存储服务器,分布式存储方案[rclone] - “用于云存储的 Rsync” - Google Drive, Amazon Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Cloudfile…[Camlistore] - Camlistore 是你的个人存储系统:一种存储、同步、共享、建模和备份内容的方式[torus] 查看全文
加载更多
redis ( 8 )
php ( 6 )
go ( 5 )
源码 ( 5 )
index ( 5 )
ssl ( 4 )
数据结构 ( 4 )
hql ( 3 )
字体 ( 3 )
https ( 3 )
awk ( 3 )
http ( 3 )
测试 ( 2 )
php:// ( 2 )
chrome ( 2 )
链表 ( 2 )
firefox ( 2 )
跳跃表 ( 2 )