Go语言
追_梦_者
搬砖码农一位
展开
-
Go 语言标准库 text/template 包深入浅出
模板什么是模板?官方定义:Package template implements data-driven templates for generating textual output.template 包是数据驱动的文本输出模板,其实就是在写好的模板中填充数据。下面是一个简单的模板示例:// 模板定义tepl := "My name is {{ . }}"// 解析.转载 2020-07-05 19:14:39 · 726 阅读 · 0 评论 -
ETCD 部署并启用证书认证
证书生成证书生成的方式非常多,同类的文档也很容易找到,这里推荐此篇文章:https://coreos.com/os/docs/latest/generate-self-signed-certificates.html,但是由于etcd的特殊性,server端配置的证书,也会被用于去进行客户端认证,因此需要在 server 的 usages 里面加上:client auth选项,否则会出现此种问题:certificate specifies an incompatible key usage下面是完整的c原创 2020-06-29 09:23:07 · 4620 阅读 · 0 评论 -
ETCD出现:certificate specifies an incompatible key usage 解决方案
问题描述:在安装etcd 3.3.22 版本的时候,需要启用证书认证,于是我按此教程:Generate self-signed certificates 来生成自签名证书,用于etcd 各节点间、etcd server 与 client间的认证当我按教程生成证书,配置etcd,启动服务后,etcd服务端则报出如下警告:WARNING: 2020/06/28 15:58:05 grpc: addrConn.createTransport failed to connect to {0.0.0.0:50原创 2020-06-28 20:26:36 · 4213 阅读 · 1 评论 -
Gin请求参数校验
gin参数校验使用的是 validator库,因此本文的内容同样适用于使用validator来做参数校验的地方校验规则完整的校验规则可参考 https://godoc.org/github.com/go-playground/validator,下面分享常用的校验规则规则:数字值限制注:如果限制之间存在冲突,如 eq=10,ne=10,则会根据先后顺序,后面的会覆盖前面的定义,已后面定义的为准,eq=10,ne=10定义方式,只会生效ne=10限制范围max=10 # 最大值为1.原创 2020-06-10 07:35:26 · 13575 阅读 · 1 评论 -
Go的CSP并发模型
Go实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。另外一种是Go语言特有的,也是Go语言推荐的:CSP(communicating sequential processes)并发模型。CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,由 Tony Hoare 于 1977 年提出。简单来说,CSP 模型由并发执行的实体(线程或者进程)所组成,实体之间通过发送消息进转载 2020-05-27 08:13:17 · 490 阅读 · 0 评论 -
Golang反射入门
什么是反射?反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。应用能够通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。其含义就是我们可以通过语言提供的反射功能,在程序运行过程中动态的调用方法、获...原创 2020-04-27 11:49:14 · 287 阅读 · 0 评论 -
Go reflect包中Type接口函数全解析
Align / FieldAlign函数描述:Align:获取变量在内存中的对的字节齐值(通用)FieldAlign:获取Struct在内存中的字节对齐值(针对结构体)关于Go的内存对齐可以参考:https://studygolang.com/articles/19663使用示例:func HelloWorld() string { return "hello world"}...原创 2020-04-21 20:07:35 · 1687 阅读 · 0 评论 -
关于Go语言中的go:linkname
在阅读time包源码的时候,遇到了一个特别奇怪的函数定义,类似于C语言中的函数声明一样,只有函数定义,没有函数体,代码如下:func startTimer(*runtimeTimer)func stopTimer(*runtimeTimer) bool我当时非常惊讶,以为自己学的是假的go语法,当问了万能的谷歌之后,我得到的答案是如下,参见 go中的定时器timerAfterFunc...原创 2019-12-18 07:41:11 · 1625 阅读 · 0 评论 -
系统线程和goroutine的区别
从栈空间上,goroutine的栈空间更加动态灵活。每个OS的线程都有一个固定大小的栈内存,通常是2MB,栈内存用于保存线程执行期间的局部变量,且大小是固定不变的,在多变的场景下,这样固定大小的栈,既太大,又太小,往往不能满足多变的场景。2MB固定大小的栈,对于执行简单操作的goroutine来说,是一种巨大的浪费;但对于执行高度复杂的goroutine来说,又太过于小了。为了适应不同场景,g...原创 2019-09-04 08:20:40 · 418 阅读 · 0 评论