Go 优秀文章收集
Go并发调度器解析之实现一个协程池 深入golang之---goroutine并发控制与通信 night-reading-go Go语言·听说你想让程序运行的更快? 年终盘点!2017年超有价值的Golang文章 飞雪无情的博客 鸟窝 Go 命令详解 goroutine 实现原理
Go并发调度器解析之实现一个协程池 深入golang之---goroutine并发控制与通信 night-reading-go Go语言·听说你想让程序运行的更快? 年终盘点!2017年超有价值的Golang文章 飞雪无情的博客 鸟窝 Go 命令详解 goroutine 实现原理
让我们执行如下代码: package main import "fmt" func main() { v := []int{1, 2, 3} for i := range v { println(i) } fmt.Println(v) } 我们可能会得到如下结果(但每次都未必一样): 0 1 [1 2 3] 2 为什么呢? fmt.Println把结果输出到标准错误(standard error)中,println把结果输出到标准输出(standard output),因为两个输出的目标不一样,所以顺序是不固定的。
定义 搜索引擎(search engine)是一种信息检索系统,旨在协助搜索存储在计算机系统中的信息。搜索结果一般被称为“hits“,通常以表单的形式列出。网络搜索引擎是常见、公开的一种搜索引擎,其功能为搜索互联网上储存的信息。 工作方式 搜索引擎为一组项目提供一个接口,使用户可以指定关于感兴趣的项目的标准,并让引擎找到匹配的项目。搜索查询通常表示为识别一个或多个文档kennel包含的期望概念的一组单词。有多种样式的搜索查询语法在严格性上有差异。它也可以在以前的站点中搜索搜索引擎中的名称。而一些文本搜索引擎要求用户输入由白色空格分割的两个或三个字,其他搜索引擎可以使用户能够指定整个文档,图片,
数据库优化有哪些?分别需要注意什么? 数据库设计 尽可能地使用最有效(最小)的数据类型 tinyint(1Byte) smallint(2Byte) mediumint(3Byte) int(4Byte) bigint(8Byte) bad case:int(1)/int(11) 不要将数字存储为字符串,字符转化为数字,用int存储ip而非char(15) 优先使用enum或set,sex enum (‘F’, ‘M’) 避免使用NULL字段 NULL字段很难查询优化 NULL字段的索引需要额外空间 NULL字段的复合索引无效 bad case:`name` char(32) default
免密码登录配置 在需要免密钥登录其他机器的机器上生成ssh公钥,并复制到需要被登录的机器上 ssh-keygen scp ~/.ssh/id_rsa.pub 目标机器用户名@目标机器ip:/home/目标机器用户名/ 在目标机器处理,首先用目标用户登录机器 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys //ssh免密钥登录会检测文件的权限,过于开放和保守都不行~ chmod 700 ~/.ssh 设置 SSH,打开密钥登录功能(默认一般是开通的,不需要修改) 修改/etc/
golang中字符串格式化输出 package main import ( "fmt" "os" ) type point struct { x, y int } func main() { // Go提供了几种打印格式,用来格式化一般的Go值,例如 // 下面的%v打印了一个point结构体的对象的值 p := point{1, 2} fmt.Printf("%v\n", p) // 如果所格式化的值是一个结构体对象,那么`%+v`的格式化输出 // 将包括结构体的成员名称和值 fmt.Printf("%
自增和自减 golang里包含其他语言常用的自增i++ 和自减i--,但是在golang里他们是语句而不是表达式,所以j=i++这种是错误的写法,而且golang也不支持++和--放在变量前面如++i的形式。 i++ // i的值+1 i-- // i的值-1 ++i //错误 --i // 错误 j = i-- //错误 短变量声明只能在函数内部不能再外部 s := "" //错误 func main() { s := "" prinltln(s) } new只是一个预定义的函数,它并不是一个关键字 func delta(old, new int) int { return
三个工具介绍 go fmt是用来规范go文件格式,比如格式化单个文件 go fmt xxx.go goimports 用来检查导入包,导入依赖包,删除不依赖的包 gometalinter 集成go语言几乎所有检测工具,静态分析代码,包含功能如下 go vet -工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前return的逻辑,struct的tag是否符合标准等。 go tool vet --shadow -用来检查作用域里面设置的局部变量名和全局变量名设置一样导致全局变量设置无效的问题 gotype -类型检测用来检测传递过来的变量和预期变量类型一致 gotype -x
入门docker书籍推荐:docker-从入门到实践 查看image、container、volume占用的空间大小 docker system df image image本地导入 docker import - [name] < /path/to/image/file 例如导入/tmp/test.export.tar并命名image名为demo docker import - demo < /tmp/test.export.tar image重命名 docker tag oldname:oldversion newname:newversion docker image rm
目的 不关闭现在的链接 启用新的代码并处理新的请求 中间不能出现拒绝服务 流程 替换可执行程序 发送 SIGUSR2 信号 停止老进程继续接受新请求,并在处理完已有请求后停止 启动新的进程并接受新请求 实现 我根据上面要求写了一个简单的库gracefulServer,可以参考下 比如以gin为例使用该库实现优雅重启,代码如下: package main import ( "github.com/gin-gonic/gin" "time" "net/http" "github.com/yushuailiu/gracefulServer" ) func