golang

golang gin框架 使用swagger生成api文档

有些话、适合烂在心里 提交于 2019-11-27 07:45:07
github地址: https://github.com/swaggo/gin-swagger 1、下载swag $ go get -u github.com/swaggo/swag/cmd/swag 2、在main.go所在目录执行 $ swag init 生成docs/doc.go以及docs/swagger.json,docs/swagger.yaml 3、下载gin-swagger $ go get -u github.com/swaggo/gin-swagger $ go get -u github.com/swaggo/files 然后在路由文件引入 import ( "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" "github.com/swaggo/gin-swagger" _ "github.com/swaggo/gin-swagger/example/basic/docs" // docs is generated by Swag CLI, you have to import it. ) 并增加swagger访问路由 url := ginSwagger.URL("http://localhost:8080/swagger/doc.json") // The url

博客阅读整理一

邮差的信 提交于 2019-11-27 07:08:08
(部分文章是系列文章,可在原文博客查找) Java ClassLoader, JavaAgent, Aspectj Weaving一站式扫盲帖 :主要总结了ClassLoader、java代理、反射相关的知识点 jdbc实现篇-源码 :介绍了jdbc的源码实现,讲的比较清晰, Java线程池架构原理和源码解析 :讲的很好,有几个地方不看解释的确很难理解,此外这个是系列文章,都很不错。 Java集合框架综述 :系列文章,很有条理,这类文章百看不厌(主要记不住....) 数据库 海量数据存储基础 :讲的都是大路货,但是比较全面 MySQL索引背后的数据结构及算法原理 :好文,面试前多看几遍mysql就够装了 分布式/高并发 亿级Web系统搭建 :单机到分布式集群:介绍了从前端到后端各层的负载均衡策略,比较全面 构建亿级前端读服务 :这类文章不知道是不是跪着看才行,内容不多,但有干货 如何用消息系统避免分布式事务 :分布式中的老问题,讲的简单明了 两阶段提交协议与paxos投票算法 :上文两段式没看懂,就又找了篇看看 图解分布式一致性协议Paxos :我要是说上文的paxos没看懂,会不会显得智商有点低..... 两阶段提交协议 :反正智商都低了,就再补充一片更易懂的啊 The Log :我所读过的最好的一篇分布式技术文章,这不是我说的,标题后边自带的,但当我看完,我觉得他说的没错

IntelliJ IDEA 14安装Golang插件go-lang-idea-plugin

一曲冷凌霜 提交于 2019-11-27 05:56:03
1,下载IntelliJ IDEA旗舰版,我用的是14.1.3版本: http://www.jetbrains.com/idea/download/ 2. 下载golang官方SDK和go-lang-idea-plugin插件源码 http://golang.org/dl/ (要翻==墙) https://github.com/go-lang-plugin-org/go-lang-idea-plugin 3,将下载的 go-lang-idea-plugin压缩包 解压,IDEA点击File -> open 打开该工程。打开后有很多编译错误,先不管,接下来一步一步配置。 4,点击File -> Project Structure 打开项目结构配置窗口。 如图所示,添加JDK和IntelliJ Platform Plugin SDK的路径。JDK最好使用JDK1.8版本,否则后续可能出现编译错误,IntelliJ Platform Plugin SDK路径为IntelliJ的安装路径根目录 5,设置Project SDK 点击File -> Project Structure ->Project,设置Project SDK为刚刚设置好的IDEA sdk, 6,在debug configuration中选中All in intellij-go 7,编译生成jar 点击Build ->

Golang处理前端RSA加密数据

ⅰ亾dé卋堺 提交于 2019-11-27 05:37:47
前后端RSA加密 项目进入代码refine阶段,对登录发送密码进行RSA算法加密 ## 生成公钥私钥 ### 私钥 openssl genrsa -out rsa_1024_priv.pem 1024 ### 根据私钥生成公钥 openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem ### 将公钥保存到后端,私钥发给前端 我这里使用分别使用常量保存私钥 前端 使用 JSEncrypt var encrypt = new JSEncrypt(); encrypt.setPublicKey(publick_key_content); var encrypted = encrypt.encrypt(password_value); 后端 // 解密 发送过来的数据 func RsaDecrypt(ciphertext []byte) ([]byte, error) { block, _ := pem.Decode([]byte(privateKey)) if block == nil { return nil, errors.New("private key error!") } priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil {

golang timeoutHandler解析及kubernetes中的变种

允我心安 提交于 2019-11-27 04:58:27
Golang里的http request timeout比较简单,但是稍不留心就容易出现错误,最近在kubernetes生产环境中出现了的一个问题让我有机会好好捋一捋golang中关于timeout中的所有相关的东西。 Basic golang中timeout有关的设置, 资料已经比较多, 其中必须阅读的就是 The complete guide to Go net/http timeouts ,里面详述了关于http中各个timeou字段及其影响, 写的很详细, 本文就不在重复造轮子了。 所以我们在生产环境中的代码绝对不能傻傻的使用 http.Get("www.baidu.com") 了, 很容易造成client hang死, 默认的http client的timeout值为0, 也就是没有超时。具体的血泪教训可以参见 Don’t use Go’s default HTTP client (in production) 。对于http package中default的设置最后还是仔细review一遍再使用。 Advanced golang http.TimeoutHandler 了解了基本的使用方式后,笔者带领大家解析一下其中的 http.TimeoutHandler , TimeoutHandler 顾名思义是一个handler wrapper, 用来限制 ServeHttp

[喵咪Golang(1)]Go语言开篇

孤者浪人 提交于 2019-11-27 03:49:22
#[喵咪Golang(1)]Go语言开篇# ##前言## 哈喽大家好啊!喵咪我今天又来开坑了,最近学习和使用了go语言了一段时间,也在组合一些好的组件编写phalgo开发框架.在想是不是可以来写一个套关于go语言的文章和一些好的组件的介绍使用,虽然自己也是半桶水但是我相信在编写的过程中能给自己很多收获,最好也能帮助大家了解和熟悉golang这门语言,话不多说那么就开始今天的go语言之旅吧~ 附上: 喵了个咪的博客: w-blog.cn phalgo地址: github.com/wenzhenxi/phalgo Go语言圣经: docs.ruanjiadeng.com/gopl-zh ##1. go语言的诞生 如果是计算机专业出生的童鞋都听过 贝尔实验室 一词,这就是诞生著名的UNIX系统和C语言的地方,经过了40年在同一个地方Google工作的Ken Thompson和Rob Pike还有Robert Griesemer一同设计了Go语言,目的是为了解决在21世纪多核和网络化环境下越来越复杂的编程问题. Go语言是从Ken Thompson发明的B语言、Dennis M. Ritchie发明的C语言逐步演化过来的,是C语言家族的成员,因此很多人将Go语言称为21世纪的C语言。纵观这几年来的发展趋势,Go语言已经成为云计算、云存储时代最重要的基础编程语言。 就笔者玩了一段时间的感受

vim-plug golang定义跳转godef

隐身守侯 提交于 2019-11-27 03:01:30
go get -v github.com/rogpeppe/godef go install -v github.com/rogpeppe/godef ~/.config/nvim/init.vim Plug 'dgryski/vim-godef' 使用快捷键gd做跳转 autocmd FileType go nnoremap < buffer> gd :call GodefUnderCursor() < cr> let g:godef_same_file_in_same_window=1 """函数在同一个文件中时不需要打开新窗口 g:godef_split=0 在光标下定义出打开新窗口 https://github.com/dgryski/vim-godef 文档 来源: https://www.cnblogs.com/thotf/p/11340333.html

golang(59):网络编程 & redis

一世执手 提交于 2019-11-27 01:22:15
网络编程 TCP/IP 协议: 1. TCP(传输控制协议) -- 应用程序之间通信 2. UDP(用户数据包协议)-- 应用程序之间的简单通信 3. IP(网际协议) -- 计算机之间的通信 4. DHCP(动态主机配置协议) -- 针对动态寻址 go服务端的处理流程: a. 监听端口 b. 接收客户端的连接 c. 创建 goroutine,处理该连接 示例代码: package main import ( "fmt" "net" // 网络相关的包都在这个 net 包里面 ) func main(){ fmt.Println("start server...") // 1. 监听ip和端口 listen,err := net.Listen("tcp","0.0.0.0:50000") // 监听端口;第一个参数是监听什么类型的协议,第二个参数是监听的 端口, 0.0.0.0 表示监听这台机器上的所有 ip (监听所有的网卡) if err != nil { fmt.Println("listen failed,err:",err) return } // 2. 接收连接 for { conn,err := listen.Accept() // 接收连接;conn 表示与当前用户之间的通信的管道(连接) if err != nil { fmt.Println("accept

golang的数据类型之基本数据类型的默认值和转换

左心房为你撑大大i 提交于 2019-11-27 01:14:33
默认值: 整型的默认值:0 浮点型的默认值:0 字符串的默认值:"" //空 布尔类型的默认值:false package main import "fmt" func main() {   var a int //0   var b float32 //%f的输出是0.000000,%v的输出是0   var c float64 //%f的输出是0.000000,%v的输出是0   var isMarryied bool //false   var name string //""   //这里的%v 表示按照变量的值输出   fmt.Printf("a=%d,b=%v,c=%v,isMarryied=%v,name=%v",a,b,c,isMarryied,name) } 转换: golang和java / c 不同,Go在不同类型的变量之间赋值时需要显示转换。也就是说Golang中数据类型不能自动转换。 基本语法:   表达式T(v) 将值v转换为类型 T   T: 就是数据类型,比如int32, int64, float32等等   v: 就是需要转换的变量 案例演示:   var i int = 42   var f float64 = float64(i)   var u uint8 = uint8(f)   fmt.Println(i,f,u) 细节说明:   1)

golang的数据类型之字符类型

时光怂恿深爱的人放手 提交于 2019-11-27 01:10:12
字符类型使用细节 1)字符常量是用单引号('')括起来的单个字符。例如:var c1 byte = 'a' var c2 int = '中' var c3 byte = '9' 2) Go中允许使用转义字符'\' 来将其后的字符转变为特殊字符型常量。例如: var c3 char = '\n'   // '\n' 表示换行符 3)Go语言的字符使用UTF-8编码,如果想查询字符对应的utf8码值可以百度搜索。英文字母--1个字节, 汉字--3个字节 4)在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值。 5)可以直接给某个变量赋一个数字,然后按格式化输出时%c, 会输出该数字对应的Unicode字符 6) 字符类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码 [root@node3 shangxuetang]# cat char.go package main import "fmt" func main() {   var c1 byte = 'a'   var c2 byte = '0' //字符的0   //当我们直接输出byte值,就是输出了对应的字符的码值   fmt.Println("c1 = ", c1)   fmt.Println("c2 = ", c2)   //如果我们希望输出对应字符,需要使用格式化输出