- 博客(22)
- 资源 (23)
- 收藏
- 关注
原创 Golang 标准库 tips -- context
本文目录结构:gls假如没有 Contextcontext 的实现原理context 主要功能 实现超时控制 实现错误取消 防止 groutine 泄露 实现数据同步获取 context 里面所有的元素context 案例分析 http.Requstcontext 案例分析 gin.Contextcontext 调用栈太深问题context 的最佳实践glsGo 没有 gls(goroutine local storage) 协程本地存储的概念,不能将数据和 groutine
2021-07-22 00:13:01 747 2
原创 Golang 标准库 tips -- waitgroup
WaitGroup 用于线程同步,很多场景下为了提高并发需要开多个协程执行,但是又需要等待多个协程的结果都返回的情况下才进行后续逻辑处理,这种情况下可以通过 WaitGroup 提供的方法阻塞主线程的执行,直到所有的 goroutine 执行完成。本文目录结构:WaitGroup 不能被值拷贝Add 需要在 Wait 之前调用使用 channel 实现 WaitGroup 的功能Add 和 Done 数量问题WaitGroup 和 channel 控制并发数WaitGroup 和 channe
2021-07-21 23:43:48 596
原创 Golang 标准库 tips -- error
本文分析一下 error 的演进历程以及最佳实践,从而对 error 有一个整体的认识以及标准库里面 error 使用上的一些问题。本文目录结构error 的演进历程 1.13 之前的 error pkg/errors 1.13 error pkg/errors 适配 1.13 error 2.0 error 提议error 最佳实践
2021-07-21 19:45:05 579
原创 Golang 标准库 tips -- defer
defer 关键字用来标记最后执行的 Go 语句,一般用在资源释放、关闭连接等操作,会在函数返回前调用,defer 的执行顺序是先进后出,当同时定义了多个 defer 代码块时,golang 按照先定义后执行的顺序依次调用 defer。defer 与参数解析defer 在被声明的时候,defer 中执行的参数就已经被实现解析确定了而不是在 return 之后,如下代码定义了 i 之后,接着通过 defer 打印 i,后面的操作对 i 进行自增,程序会在结束的时候打印 0 而不是 1。func main
2021-07-21 00:54:03 242 1
原创 Golang 标准库 tips -- select
Golang 的 select 语句的作用是用来监听多个 channel 的读写操作,当 channel 读写操作发生时,会触发对于的 case 执行。在实际使用过程中,有以下需要注意的地方。for-select 循环退出我们在普通的 for 循环中,如果想退出循环,可以使用 break 语法退出,想要忽略本地循环继续下一次迭代可以通过 continue 来控制,但是在 selet 的 for 循环中,continue 的作用作用还是忽略本地循环继续下次循环。但是 break 的作用却是跳出本次 sel
2021-07-18 23:34:21 802 1
原创 Golang 安装以及升级版本脚本
官方会经常发布 Golang 新版来修复一些补丁,所以版本有更新的话,我们也需要了解新版本的特性以及在服务器上升级 Golang 版本到最新,以下介绍以源码的方式来安装以及更新 Golang 版本。第一步:到官网上下载对应的操作系统的最新的 Golang 版本:https://studygolang.com/dl在 home 目录下建立 goinstall 目录,然后在该目录下创建升级部署...
2018-03-03 18:21:58 30789 1
原创 Golang 项目部署实战
一直认为不懂部署的开发工程师不是好的开发工程师,以下以一些实例讲解自己在项目中的 Golang 后端部署的情况。一般部署脚本应该具有构建、启动、停止、回滚已经查看记录日志等功能,以下分别将这些功能以单个脚本的形式给出,当然也可以写成Makefile 的形式。单个部署脚本的形式,在一个目录下建立如下文件:bin # 目录,用于存放每次 build 之后存放的二进制文件app.log #...
2018-03-03 16:54:14 19328 1
原创 Nginx 线上配置实例
1 /etc/nginx/nginx.conf,在主配置下设置 /etc/nginx/conf.d/*.confuser nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections...
2018-03-02 15:01:44 11310
原创 Golang 位操作符总结
位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见,下面先回顾一下位操作符的基础:与操作:& 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0或操作:! 1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 & 0 = 0异或:^ 1 ^ 1 = ...
2018-02-11 11:10:01 5123
原创 Golang 验证 struct 字段的数据格式
假设我们有如下结构体:type User struct { Id int Name string Bio string Email string }我们需要对结构体内的字段进行验证合法性:Id的值在某一个范围内。 Name的长度在某一个范围内。 Email格式正确。 我们可能会这么写:user := User{ Id:
2017-11-14 10:53:48 3109
原创 Nginx 常见配置总结
以下总结的都是自己项目中用到的关于 nginx 的配置知识点,了解了以下的关于 nginx 的配置对于一些常见关于 nginx 的配置应该是没有什么问题的,后续项目中如果有遇到新的知识点会来补充:1. nginx 的匹配规则 关于 nginx 的匹配规则是学习 nginx 必须要了解的,也可以说懂了 nginx 的匹配规则就相当于打通了 nginx 学习的仍督二脉,以下直接给到一些总结: ...
2017-10-22 16:54:45 3764
原创 Golang 闭包的理解
和变量的声明不同,Go语言不能在函数里声明另外一个函数。所以在Go的源文件里,函数声明都是出现在最外层的。 “声明”就是把一种类型的变量和一个名字联系起来。 Go里有函数类型的变量,这样,虽然不能在一个函数里直接声明另一个函数,但是可以在一个函数中声明一个函数类型的变量,此时的函数称为闭包(closure)。
2017-05-14 19:13:35 4759 2
原创 Golang 中操作 Mongo Update 的方法
这篇博客主要记录下 Golang 中引入 Mongo 数据库对 Mongo 的修改操作的方法。使用gopkg.in/mgo.v2库操作,修改操作主要使用mongodb中Collection对象的Update、UpdateAll、UpdateId、Upsert、UpsertId方法。统一封装下getDB方法package mainimport ( "fmt" "gopkg.in/mgo.
2017-05-07 01:39:26 11518
原创 Golang 向 Templates 插入对象的值
Go对象可以插入到template中,然后把对象的值表现在template中,你可以一层层的分解这个对象,去找他的子字段,当前对象用’.’来表示,所以当当前对象是一个string的时候,你可以用{{.}}。这个包默认使用fmt包来把插入的对象转成string插入某个对象字段的值,我们在字段名字前面加上一个’.’前缀就可以了,例如我们定义一个structtype Person struct {
2017-04-07 14:21:03 961
原创 MongoDB 关于索引操作命令实例详解
1.查看索引: db.COLLECTION_NAME.getIndexes()[ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "mars.COLLECTION_NAME" }]2.创建索引: 数字 1 表
2017-02-03 16:32:30 2241
原创 Golang 关于通道 Chan 详解
首先我们来看线程,在golang里面也叫goroutine在读这篇文章之前,我们需要了解一下并发与并行。golang的线程是一种并发机制,而不是并行。它们之间的区别大家可以上网搜一下,网上有很多的介绍。下面我们先来看一个例子吧import( "fmt")funcmain(){ go fmt.Println("1") fmt.Println("2") }在go
2017-01-15 20:34:20 60282 11
原创 Golang Cron 定时任务分析
1、cron 表达式的基本格式 用过 linux 的应该对 cron 有所了解。linux 中可以通过 crontab -e 来配置定时任务。不过,linux 中的 cron 只能精确到分钟。而我们这里要讨论的 Go 实现的 cron 可以精确到秒,除了这点比较大的区别外,cron 表达式的基本语法是类似的。(如果使用过 Java 中的 Quartz,对 cron 表达式应该比较了解,而且它和这里
2017-01-14 23:25:45 10340
原创 一篇文章详解请求头Host的概念
我们知道Http请求头信息里面会带有一个Host字段,很多人不是很清楚这个字段具体的作用或者用法,包括我被很多人问过也曾经有些迷茫,这里具体扫盲下。我们知道一个IP地址可以对应多个域名,比如假设我有这么几个域名www.qiniu.com,www.taobao.com和www.jd.com然后在域名提供商那通过A记录或者CNAME记录的方式最终都和我的虚拟机服务器IP 111.111.111.111关
2016-04-20 01:48:14 37506 3
原创 有关 dig 命令的实用脚本
这里直接给出脚本以及执行的效果图,主要判断了一下cdn然后可以直接过滤url,默认就是dig +域名 +short。 脚本qdig(随便可以取一个名字)如下:#!/usr/bin/env bashc=$(echo $1 | awk -F '://' '{print $1}')if [ "$c" = "http" ] || [ "$c" = "https" ]; then b=$(ech
2016-01-22 17:02:59 2874
原创 CentOS 定时运行脚本配置
很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如使用七牛的工具上传,如果同步文件里面有新增加一个文件,这个时候我们可以提供定时脚本去完成我们需要的同步命令(七牛的qrsbox工具是自动会同步的,只需要在同步文件夹里面增加一个文件就会自动监听上传)。1.安装crontab[root@CentOS ~]# yum install vixie-cron[root@CentOS ~]# yu
2016-01-22 16:30:30 30802
原创 vi/vim 复制剪切粘贴以及常用命令小结
接触linux操作系统之后使用vi/vim编辑器用的就比较多,其实vi/vim编辑文件特别方便,但是一些常见的指令模式下的命令确很容易忘,特别是复制剪切粘贴经常忘,所以小结下以后查用起来比较方便。1.复制剪切粘贴撤销 复制: 复制一行则:yy 复制三行则:3yy,即从当前光标+下两行。 复制当前光标所在的位置到行尾:y$ 复制当前光标所在的位置到行首:y^剪切: 剪切一行:dd 前切三
2016-01-21 10:34:24 63040
Go Web编程 郑兆雄[带目录]pdf
2018-05-03
Go并发编程实战 第2版[带目录]pdf
2018-05-03
深度学习 中文版.pdf
2018-03-30
解析卷积神经网络——深度学习实践手册.pdf
2018-03-30
TensorFlow实战_黄文坚[带书签].pdf
2018-03-30
Tensorflow 实战Google深度学习框架[带书签].pdf
2018-03-30
神经网络与机器学习.pdf
2018-03-30
白话深度学习与TensorFlow[带书签].pdf
2018-03-30
Head+First+Java.第二版.中文完整高清版.pdf
2017-12-29
持续交付-发布可靠软件的系统方法
2017-11-24
人人都是架构师(带目录)pdf
2017-11-24
微服务设计中文(带目录)pdf
2017-11-24
JavaScript 高级程序设计(第3版)
2017-11-24
Go语言·云动力中文版(带目录)pdf
2017-11-24
学习 Go 语言中文版(带目录)pdf
2017-11-24
Go 学习笔记中文 pdf
2017-11-24
Go并发编程实战pdf
2017-11-24
Go语言编程(带目录)pdf
2017-11-24
Go语言圣经中文版(带目录)
2017-11-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人