Go
文章平均质量分 75
Go相关知识
蜗牛^_^
学无止境
展开
-
golang控制台输入
主要使用fmt、bufio包情况一 输入为确定的一个数字/字符串等,例如:输入2var a1 intfmt.Scan(&a1)情况二 输入俩数字为一组,通过空格隔开,例如:输入2 31)var a, b intfmt.Scan(&a, &b)2)var num1, num2 intfmt.Scanf("%d %d", &num1, &num2)情况三 输入一行内容,可能包含空格或其他特殊符号等,需要获取整行内容,例如:输入hello,welco原创 2021-03-06 15:38:07 · 2384 阅读 · 0 评论 -
基于go-oauth2/oauth2实现OAuth 2.0 授权码方式
前言本文基于go-oauth2/oauth2,参考go-oauth2/oauth2/example、go-oauth2/gin-server、llaoj/oauth2,结合beego框架实现OAuth 2.0授权码方式。介绍OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某网站上存储的资源(如邮箱、手机、头像等),而无需将用户名和密码提供给第三方应用。OAuth2.0规定了四种授权方式,授权码、隐藏式、密码式、客户端凭证。本文主要讲解授权码方式的实现。可参考OAuth 2.0原创 2021-01-20 19:33:44 · 9509 阅读 · 6 评论 -
golang 查询 Elasticsearch
说明:本文以日志查询为例,ES集群版本为7.2。实现效果如下:具体步骤如下:1.定义mapping,创建索引PUT log{ "settings": { "index": { "number_of_shards": 1, "number_of_replicas": 0 } }, "mappings": { "properties": { "timestamp": { "type": "date"...原创 2020-11-16 16:48:05 · 4961 阅读 · 1 评论 -
golang切片容量计算
提到切片,我们需要对比数组进行理解:数组类型的值的长度是固定的,切片类型的值是可变长度的;数组可以被叫做切片的底层数组,切片可以看作是对数组的某个连续片段的引用;切片类型是引用类型,数组属于值类型;len表示长度,cap表示容量。数组的容量等于长度;切片的容量不一定等于长度,切片的容量代表了底层数组的长度。本文主要围绕切片的容量进行展开。1)使用make初始化切片s1:=make([]int,5,8) 指明容量,长度为5,容量是8s2:=make([]int,5) 不指明容量,那么和长度是原创 2020-10-15 10:28:21 · 2076 阅读 · 0 评论 -
golang的panic、recover、defer
1.什么是panic、recover、defer?panic:运行时恐慌,在程序运行时抛出的异常。recover:专用于恢复panic,平息运行时恐慌。recover()函数无需任何参数,会返回一个空接口类型的值,这个值是即将恢复的panic包含的值。一般与defer使用。defer:defer语句是被用来延迟执行代码的,延迟到该语句所在的函数即将执行结束的那一刻,无论结束执行的原因是什么。2.从panic被引发到程序终止运行的大致过程是什么?产生运行时异常,可以是没意料到的,比如数组越界等,也原创 2020-09-10 17:38:59 · 237 阅读 · 0 评论 -
golang omitempty实现嵌套结构体的省略输出
golang在处理json转换时,对于标签omitempty定义的field,如果给它赋得值恰好等于空值(比如:false、0、""、nil指针、nil接口、长度为0的数组、切片、映射),则在转为json之后不会输出这个field。那么,针对结构体中嵌套结构体,如果嵌套结构体为空,是否也会忽略?如果要忽略空结构体输出,怎么处理?情况一:匿名结构体:使用omitempty修饰该匿名结构体中的字段,那么当为空时不会输出type Book struct{ Name string `json:"name原创 2020-05-26 15:28:44 · 2739 阅读 · 1 评论 -
golang同步总结
目录锁条件变量原子操作只会执行一次WaitGroupcontext.Context临时对象池参考资料锁1.互斥锁表示:sync.Mutex,类型sync.Mutex的零值表示了未被锁定的互斥量作用:保证在同一时刻仅有一个线程访问共享数据。规则:1)当对一个已处于解锁状态的互斥锁进行解锁操作的时候,就会引发一个运行时恐慌;2)当对一个已处于锁定状态的互斥锁进行锁定操作时,就会被阻塞;3)对于同一个互斥锁的锁定操作和解锁操作总是应该成对地出现,一般会在锁定互原创 2020-05-22 10:07:13 · 434 阅读 · 0 评论 -
golang通道总结
目录概念缓冲与非缓冲双向与单向forselectQ & A参考资料概念go语言提倡“以通信作为手段来共享内存”,而channel就是最直接和最重要的体现。channel指通道类型,是Go语言预定义的数据类型之一,使用chan表示通道类型的关键字。channel提供了一种机制:可以同步两个被并发执行的函数,也可以让两个函数通过相互传递特定类型的值进...原创 2020-04-30 14:12:46 · 565 阅读 · 1 评论 -
gin框架的简单使用
gin框架是基于golang语言的web框架。如果用gin实现服务,有下述的场景需求,那么可以继续阅览:服务针对不同的路由,有不同的验证规则。比如服务对应PC管理端和移动端,分别有不同的验证规则,涉及路由组、中间件拦截验证; 请求记录、操作日志按照时间每天记录到文件中。涉及中间件日志操作; 跨域问题,涉及中间件跨域; API的使用,涉及常用的POST,PUT,GET,DELETE。代码...原创 2020-04-03 16:51:55 · 1866 阅读 · 0 评论 -
go mod的使用
使用go mod,注意你所使用的go版本应为11以上。go mod的思想类似于maven:拥抱本地库,使用go mod后,你会发现go modules 下载的包在 GOPATH/pkg/mod。具体使用可查看下面地址。官网https://github.com/golang/go/wiki/Modules不同管理工具对比https://github.com/golang/go/w...原创 2019-10-15 10:40:14 · 865 阅读 · 0 评论 -
golang json传值html
知识点1)双引号与反引号表示字符串区别双引号用来创建可解析的字符串字面量(支持转义,但不能用来引用多行);反引号用来创建原生的字符串字面量,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML及正则表达式。2)json中字符串编码说明详见json.encode中说明:字符串值被编码为强制为有效UTF-8的JSON字符串,用Unicode...原创 2019-02-28 14:08:25 · 1536 阅读 · 0 评论 -
go语言中递归权限树的实现
模拟一个简单系统的权限设置部分,仅用于测试说明。一、效果展示二、数据表设计(其中pId表示父Id)三、go语言实现思路:以父结点Id得到所有子节点,进而递归得到所有子节点的子节点递归。貌似有点点绕,还是直接看代码吧!声明:程序与数据库处理部分使用了GORM(https://github.com/jasperxu/gorm-cn-doc),这里不做说明,可自行了解(1)结构体type Tree st...原创 2018-03-30 11:26:43 · 3619 阅读 · 0 评论 -
go解压zip
考虑zip文件中多层目录、中文命名可能性。针对多层目录,解决思路:遍历时判断其是否为目录;针对中文命名可能乱码(如:����),解决思路:可使用mahonia进行解决。具体实现如下:package mainimport ( "archive/zip" "github.com/axgle/mahonia" "io" "os")func main() { deCompressZip...原创 2018-03-21 11:12:13 · 1678 阅读 · 0 评论 -
go语言中pdf转图片功能的实现(CentOS)
一、centos下环境部署步骤1:部署ImageMagick(1)在http://www.imagemagick.org/download/上找到合适的版本,然后下载,我选择的版本是ImageMagick-6.9.9-36(2)解压刚才下载的文件: tar xvf ImageMagick-6.9.9-36.tar.gz(3)进入解压目录:cd ImageMagick-6.9.9-36(4)检查配...原创 2018-03-21 14:21:22 · 7114 阅读 · 1 评论 -
go语言中日志第三方包log4go的使用
文中通过加载配置文件使用log4go。一、下载log4go二、配置文件log4go.xml<!-- ~ Copyright (c) 2017 - 3. by ZanderWong. All rights reserved. ~ Lorem ipsum dolor sit amet, consectetur adipiscing elit. --><logging&...原创 2018-03-21 15:57:59 · 3124 阅读 · 0 评论 -
go-json-rest框架实现Golang Restful API项目的开发
一、go-json-rest框架介绍go-json-rest(https://github.com/ant0ine/go-json-rest/)是基于net/http的一个小封装,可帮助轻松构建RESTful JSON API。它使用基于Trie的实现提供快速和可拓展的请求路由,帮助处理JSON请求和响应。它拥有丰富的中间件,比如CORS,Auth,Gzip,Status等,可帮助实现和拓展功能。...原创 2018-05-08 15:46:21 · 10172 阅读 · 1 评论 -
go语言实现SMTP邮件发送功能
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。它是一个“推”协议,不允许根据需要从远程服务器上“拉”来消息。更多了解,请查看SMTP协议。本文主要使用go自带的net/smtp包和第三方库gomail来实现邮件发送功能。1.SMTP协议的交互过程如果想要更好的了...原创 2018-07-16 15:24:53 · 7627 阅读 · 1 评论 -
go语言实现微信自定义分享签名的获取
微信自定义分享签名的获取步骤:1) 获取access_token(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183);2) 获取jsapi_ticket;3) 计算signature(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=...原创 2018-08-13 18:31:28 · 1689 阅读 · 0 评论 -
Golang的XML处理
前言前往https://studygolang.com/pkgdoc,了解golang语言中xml包的内容。文中的内容主要来自于该网站。XML生成理论func Marshal(v interface{}) ([]byte, error)func MarshalIndent(v interface{}, prefix, indent string) ([]byte, err...原创 2018-11-27 16:56:28 · 19878 阅读 · 0 评论 -
go语言中yaml配置文件的使用
文中操作yaml使用的是github上第三方开源gopkg.in/yaml.v2 具体如何使用? 第一步:下载go get gopkg.in/yaml.v2第二步:新建一个yaml文件,比如conf.yamlhost: localhost:3306user: rootpwd: 123456dbname: test这里需要注意,以host: localhost:3306为例,冒号后面有空格第原创 2017-12-13 17:30:57 · 6492 阅读 · 0 评论