
golang
记录学习golang基础、golang Web等;
xgnaful
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
signintech/gopdf功能介绍与代码示例
使用golang生成pdf的代码示例原创 2022-12-08 19:23:02 · 1584 阅读 · 1 评论 -
gin+redis+websocket实现简单的消息推送
目录结构:websocket├── mq│ ├── redis.go│ └── redis_test.go└── main.gomain.gopackage mainimport ( "daily/websocket/mq" "fmt" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "github.com/sirupsen/logrus" "log" "net/http" "time")v原创 2022-04-17 00:21:59 · 4050 阅读 · 3 评论 -
解决viper读取yaml配置存在下划线时无法映射
适用场景:使用viper读取``yaml文件时候,遇到yaml文件中存在下划线,映射到结构体之后,结构体无法取到yaml`文件中对应的值。conf.yaml文件如下:mysql: rds_host: "rds_xxxxxx.com" rds_port: 3306config.go部分内容如下:type Mysql struct { RdsHost string `yaml:"rds_host" mapstructure:"rds_host"` RdsPort string `yaml:"r原创 2022-04-05 18:47:11 · 4370 阅读 · 0 评论 -
gopdf使用注意事项及常见问题
signintech/gopdf生成pdf使用注意事项及常见问题原创 2021-11-30 23:59:24 · 2380 阅读 · 0 评论 -
使用go语言生成PDF
go语言生成PDF最近由于工作需要,将之前用phantomjs生成PDF报告的部分重构(phantomjs在数据量较大时候,占用太高的服务器资源),改用go代码直接生成,在GitHub上搜索相关第三方库, 关键词:pdf language:Go,按照star排序如图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rZdlhOy2-1638114264294)(/Users/ellipses/Pictures/markdown/images/gopdf_github.png原创 2021-11-28 23:45:49 · 10976 阅读 · 9 评论 -
使用golang加密算法的示例
需求:先使用自定义的盐key对data进行sha1加密,然后对加密后的结果进行base64转码,再将转码后的结果转大写,最后再将转大写后的结果进行url编码:代码示例:package mainimport ( "crypto/hmac" "crypto/sha1" "encoding/base64" "net/url" "strings")// Sha1Encrypt sha1加密,base64转码,转大写,url编码func Sha1Encrypt(key, data stri原创 2020-12-17 20:02:10 · 498 阅读 · 0 评论 -
golang使用gorm连接mysql数据库
官方文档:http://gorm.book.jasperxu.com/下载gorm包到本地go get go get -u github.com/jinzhu/gorm代码示例:package mainimport ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql")func main() {db, err := gorm.Open("mysql", "root:mysql@tcp原创 2020-08-15 12:17:39 · 3576 阅读 · 1 评论 -
go语言---爬虫入门
go语言—爬虫用到的包: net/http(用于发送请求), io/ioutil(用于读取响应内容);基本步骤:构建请求url, string类型;使用net/http包提供的Get()方法发送请求, 获取响应对象response;处理异常,解析响应内容;进阶步骤(适用于有反爬机制的网站):构建请求url,string类型;使用net/http包提供的Client{}结构...原创 2020-04-19 12:56:03 · 521 阅读 · 0 评论 -
go语言---socket网络编程
go语言—socket网络编程(适合有基础计算机网络知识的)服务端总体思路:创建服务器地址;创建监听器;通过监听器监听客户端传递过来的数据;(这一步会阻塞)转换数据;关闭连接;// 这里是服务端代码package mainimport ( "fmt" "net")func main() { // 1. 创建服务器地址;(暂不处理错误信息) addr, _ :...原创 2020-04-11 19:12:17 · 230 阅读 · 0 评论 -
go语言---反射-reflect
go语言—反射reflect在go语言标准库中reflect包提供了运行时反射机制,所谓的运行时反射,就是程序运行过程中动态操作结构体;当变量存储结构体属性名称,想要对结构体这个属性赋值或查看时,就可以使用反射;反射还可以用作判断变量类型;reflect中最重要的两个类型:reflect.Type和reflect.Value;获取到Type和Value的函数: reflect.Type...原创 2020-04-06 23:04:44 · 299 阅读 · 0 评论 -
go语言---输出流Writer
go语言—输出流Writer输出流(Output Stream)就是将应用程序中的数据写出到外部资源;go语言中io包下的Writer接口表示输出流,只要实现这个接口就属于输出流;Writer的源码:type Writer interface { Write(p []byte) (n int, err error)}注意构建字节切片的时候如果需要读取文件,不要使用os.Open(...原创 2020-04-03 19:33:01 · 1513 阅读 · 0 评论 -
go语言---输入流Reader
go语言—ReaderReader即输入流,那么什么又是流? 流(stream)是应用程序和外部资源进行数据交互的纽带;流又分为输入流和输出流;这里的输入和输出都是相对于应用程序而言的,把外部资源输入到应用程序称之为输入流,反之为输出流;输入流即Input Stream,输出流即Output Stream,二者合称为I/O流;go语言中标准库的io包下Reader接口表示输入流,只要实现...原创 2020-04-03 19:30:38 · 948 阅读 · 0 评论 -
go语言---panic与recover
go语言中的panic和recoverpanic类似于其他编程语言中的throw或者raise,用于抛出异常;当执行到panic后终止执行剩余代码,并打印错误堆栈信息;panic并不是像os.Exit(0)一样立即停止程序的运行,panic如果有defer还是会被执行的;recover用于处理panic,一是返回panic的信息,二是恢复panic的状态;recover只能恢复当前函数...原创 2020-03-29 19:01:17 · 606 阅读 · 0 评论 -
go语言---defer
go语言的defergo语言中defer可以完成延迟功能,当前函数执行完成后再执行defer的代码块;defer常用于关闭文件,关闭数据库等;代码中如果有defer, 代码就可能不是按照顺序执行的,即使defer写在最前面,也可能会最后执行;("可能"用于多个defer的情况)多重defer采用栈结构执行,即先进后出,先产生的defer后执行;defer与return连用时,要把ret...原创 2020-03-29 17:48:56 · 579 阅读 · 0 评论 -
go语言---接口
go语言接口类型 interface接口是一组行为规范的定义;接口中只能有方法声明,方法只能有名称、参数、返回值,不能有方法体;每个接口中可以有多个方法声明,结构体把接口中所有方法都重写后,结构体就属于接口类型;重写的方法要求必须和接口中方法名称、方法参数(参数名可以不同)、返回值列表完全相同;接口可以继承接口,go语言推荐把接口中的方法拆分成多个接口;使用interface关键字来...原创 2020-03-29 17:46:24 · 508 阅读 · 0 评论 -
go语言---方法
go语言的方法:方法与函数语法基本类似,区别是函数属于包,通过包调用函数,包在物理层面上就是文件夹;而方法属于结构体,通过结构体变量来调用;方法在定义的时候需要指明这个方法属于哪个结构体;定义语法:func (变量名 结构体类型) 方法名(参数列表) 返回值列表 { 方法体}在使用结构体的方法时,如果需要改变结构体属性的值,需要在定义方法时,传递结构体的指针,也就是在结构体前面...原创 2020-03-29 12:29:37 · 205 阅读 · 0 评论 -
go语言---结构体及结构体指针
结构体(struct),是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。 (可以理解为其他编程语言中的类)结构体既可以定义在函数内,也可以定义在函数外,函数外为全局结构体可以跨包访问(前提是结构体首字母大写)结构体变量是值类型,可以使用fmt.Printf("%p", &结构体变量)来查看其内存地址;由于结构体是值类型,在方法传递时,希望传递的是结构体地址,这时就可以使...原创 2020-03-29 12:02:16 · 2143 阅读 · 0 评论 -
go语言---闭包
什么是闭包?闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。闭包包含自由(未绑定到特定对象)变量,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:...原创 2020-03-29 10:30:20 · 665 阅读 · 0 评论 -
go语言---函数
函数就是一段具有特定功能的代码块go语言中常用函数声明的格式:函数声明: func 函数名(参数列表) 返回值 { // 函数体}函数可以有参数,也可以没有参数,可以有返回值,也可以没有返回值;go语言中的引用类型: slice map channel interface func();传递的是地址;引用类型作为参数时,称为浅拷贝,形参改变,实参也跟随改变,因为传递的是地址...原创 2020-03-29 10:20:51 · 659 阅读 · 0 评论 -
go语言---goland开发环境设置
goland集成开发环境项目配置实际开发中,一个项目包含多个包,一个包又包含多个.go文件,一个.go文件里面包含多个函数或代码块;包的本质就是文件夹,同一个文件夹中多个文件的package必须相同,一般package和所在的文件夹名称相同;在goland中创建标准go项目:-- 项目名 -- src // 所有的源代码都存放到这个目录; -- 文件夹1 // 文...原创 2020-03-27 18:50:51 · 3258 阅读 · 0 评论 -
go语言---map容器
map容器map以散列表方式存储键值对集合map中每个元素都是键值对map[key]Value map中的key和value类型要和定义时候一致key是操作map的唯一标准,可以通过key对map中的元素进行增/删/改/查key是唯一的,添加已经存在的key会覆盖之前的元素map与数组一样,是值类型,只声明时为空指针(nil)map读写数据时并不是并发安全的,可以结合RWMute...原创 2020-03-26 23:12:47 · 596 阅读 · 0 评论 -
go语言---copy()函数
copy函数通过copy函数可以把一个切片内容复制到另一个切片中copy(目标切片, 源切片)拷贝时严格按照脚标进行拷贝package mainimport "fmt"func main() { copySlice() //copyDel() s13 := copyDelEle([]int {1, 2, 3, 4, 5, 6, 7, 8}, 2) fmt.Println...原创 2020-03-26 23:11:11 · 7437 阅读 · 0 评论 -
go语言---goto结构
goto跳转结构goto 可以跳到指定标签所在的位置,执行标签下面的代码如果标签定义了但是没有调用,编译不通过如果标签没有被执行到,定义的标签名会被忽略,但是标签内的代码会在特定情况下被执行;goto和label 不建议日常使用package mainimport "fmt"func main() { for i := 0; i < 5; i++ { if i ...原创 2020-03-26 23:09:17 · 1239 阅读 · 0 评论 -
go语言---切片类型
切片 slice切片是具有可变长度相同类型的元素序列, 数组是不可变的;切片与数组在声明时的最主要区别就是长度;切片 var slice []string数组 var array [5]string数组是值类型,切片是引用类型切片声明后默认为nil,没有开辟内存空间,不能直接操作切片,需要先初始化,切片只能和nil判等package mainimport "fmt"...原创 2020-03-26 23:06:32 · 647 阅读 · 0 评论 -
go语言---sort()排序
切片排序 sortgo语言标准库sort只对int,string,float64进行了封装,自己可以参考对其他的类型封装sortTest1中对比了封装前后的使用方法,可以点进源码看package mainimport ( "fmt" "sort")func main() { sortTest1() sortTest2() sortTest3()}func sortT...原创 2020-03-26 23:02:59 · 1768 阅读 · 0 评论 -
go语言---随机数math/rand
go语言中的随机数应该说是伪随机math/rand实现了伪随机数生成器在go语言中随机数需要设置种子,如果不设置种子,随机数每次运行的结果相同默认种子是1,且相同种子产生的随机数是相同的为了保证种子不是固定的,可以采用当前时间的纳秒作为种子来生成随机数package mainimport ( "fmt" "math/rand" "time")func main()...原创 2020-03-25 22:10:39 · 1765 阅读 · 0 评论 -
go语言---时间类型
go语言的时间相关操作package mainimport ( "fmt" "time")// 时间类型func main() { test1()}func test1() { var t time.Time fmt.Println(t) // 0001-01-01 00:00:00 +0000 UTC, 这是声明Time时候的默认值,没有实际意义 // 使...原创 2020-03-25 22:07:45 · 1265 阅读 · 0 评论 -
go语言---指针
package mainimport "fmt"// 指针// 变量的本质就是内存中一块数据的标记,把值储存到变量中的实质是把值储存到内存中// 每次对变量重新赋值就是修改变量地址中的内容// 在go语言中,可以通过"&变量名"的形式来获取变量的地址值// 重新创建一个非引用型变量(即使是把已有变量直接赋值给新变量)也会开辟新的内存地址func main() { a...原创 2020-03-22 23:07:44 · 622 阅读 · 0 评论 -
go语言--数据类型与输入输出
输入输出输入与输出都需要导入fmt包,输入使用的是fmt.Scanf("verb", &变量名),其中,&是取地址符,比如下面示例代码中,将输入的值分别用name与age接收,就需要使用&。输出使用的是fmt.Println(),其中,Println()表示按行输出,也就是每输出一次,就会换一行,相当于自动加上了\n,另外还有Printf()、Print();packa...原创 2020-03-22 21:04:11 · 888 阅读 · 0 评论 -
go语言---初识
Go语言GO语言的优点语法简单import "fmt"var a, b = 1, 2a, b = b, afmt.Println(a,b)静态数据类型、编译语言a:=1b:=false内置支持并发可以直接编译成机器码下载与安装(注意不要安装在有中文的目录)下载地址官方网站: https://golang.google.cn/中文网...原创 2020-03-22 10:14:02 · 690 阅读 · 0 评论