Go语言中文网 为您找到相关结果 86

基于oauth 2.0 实现第三方开放平台

本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。 什么是开放平台 通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录、热门等。 让第三方应用通过开发平台,使得自身海量数据资源得到沉淀(变现) 目前国内主流的网站的的开放平台,都是基于oauth2.0 协议进行做的开放平台 微信开放平台授权机制流程图 微博开放平台授权机制流程图 oauth2.0 授权码模式 授权码模式(authorization code)是功能最完整、流程最严密的授权模式。 它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动,能够满足绝大多数开放平台认证授权的需求。 引入相关依赖 ...阅读全文

go调用其它C库,若采用命令行方式,不支持重定向的输出解决;smp协议未打开,发送信息到对方,没人响应

很多时候要学会站在巨人的肩膀上,该用别人 现有的东东一定要用,只要是开源合法的 go调用其它C库,一般两种方式,1,查看是否有接口,采用cgo方式编写;2.采用命令行直接执行,前提必须被调用的C库已经安装运行在该机器上 为了高效处理gif文件,采用gifsicle工具 http://download.csdn.net/detail/u010026901/7711469 重定向符合 > 在代码中会出错,所以在代码中实现重定向代替命令行重定向 package main import ( // "encoding/json" // "fmt" "log" "os" "os/exec" ) func main() { f, _ := os.Create("out") cmd := exec.Comm...阅读全文

博文 2016-02-22 12:00:06 u010026901

微服务统一认证与授权的 Go 语言实现

微服务统一认证与授权的 Go 语言实现 各位读者朋友鼠年大吉,祝各位新的一年身体健康,万事如意! 最近疫情严重,是一个特殊时期,大家一定要注意防护。很多省份推迟了企业开工的时间,大部分的互联网公司也都是下周开始远程办公。大家可以利用在家的几天时间学习充电,反正也出不去(🙂🙂🙂)。 今天笔者要写得是 Go 微服务相关的组件实践,笔者在好几年前就接触 Go 语言,去年开始从事 Go 微服务相关的开发,在过程中也和小伙伴联合编写了一本 《Go 高并发与微服务实战》书籍,即将出版上市。本文是截取其中的抢先版阅览,介绍微服务统一认证与授权的 Go 语言实现。 1 前言 统一认证与授权是微服务架构的基础功能,微服务架构不同于单体应用的架构,认证和授权非常集中。当服务拆分之后,对各个微服务认证与授权变得非...阅读全文

记录golang 的一个坑

使用golang做web服务的时候,会出现一个问题: 他默认页就是index.html,也就是说对于request , http://localhost/ 和http://localhost/index.html, 对于业务层来说,收到的请求全部是http://localhost 这个坑一般情况下是没有问题的,但是如果你想区分这两个请求的时候,就没有办法了,因为进入你的handler的时候,已经无法区分了。 先抱怨一把,为了这个问题,还给领导批了一顿,还害的公司的另外一个同事的印象不好了,挺难过的 好了,不废话了。分析下原因,其实很简单,go里面做了重定向嘛,会把/index.html 这样的请求 自动解析成 / 为了证明自己的想法,就去看了下源码(:-),还好这货是开源的,否则就真要哭了,...阅读全文

博文 2016-04-09 04:00:06 mi_tiger

go语言编译生成文件无法用crontab执行,sh -x分析报错 cannot execute binary file,命令行下可以执行

aiFileTrans程序每2分钟扫描读取解析文件,把解析的每行数据插入MySQL数据库。程序在终端可以运行。 aiFileTrans程序权限是可执行的,就在本机上编译生成的包,但就是报错: cannot execute binary file,是不是我crontab需要声明环境变量呢?请大神指点,先谢谢了。 报错内容(重定向到/root/1.txt) [root@localhost bin]# cat /root/1.txt /root/tasks/go/fjgd/bin/aiFileTrans: /root/tasks/go/fjgd/bin/aiFileTrans: cannot execute binary file crontab内容如下: */2 * ...阅读全文

Go中处理响应

## 1 概述 Go 语言 HTTP 服务器,在启动监听并处理接收的请求时,会将实现了 `http.ResponseWriter` 接口的 `http.Response` 对象作为第一个参数传递到请求处理器,示例代码: ```go func main() { // 设置 路由 http.HandleFunc("/", IndexAction)· // 开启监听 log.Fatal(http.ListenAndServe(":8888", nil)) } func IndexAction(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`

来自小韩说课的问候

`)) } ``` 示例代...阅读全文

博文 2018-11-12 22:21:56 hanzkering

在CentOS7上用Supervisor运行Golang守护进程

安装pip 下载pip安装文件并执行安装 下载文件[root@snails ~]# wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 执行安装[root@snails ~]# python get-pip.py [root@snails ~]# pip -V pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7) 设置pip国内aliyun源 创建或修改配置文件linux ~/.pip/pip.conf windows %HOMEPATH%\pip\pip.ini 修改内容 [global] index-url = http://mirrors.a...阅读全文

博文 2017-02-10 15:52:18 技术学习

supervisor用为golang后台创建守护进程

supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。下面基于centos 6.6,描述下具体实现:sudo yum install python-setuptools sudo easy_install supervisor如果没有看到什么报错,那么就安装成功了,可以使用echo_supervisord_conf查看配置详情,而后生成配置文件。sudo echo_supervisord_conf > /etc/supervisord.conf假设如下一段简单的golang代码:package main import ( "fmt" "log" "net/http") func main() { http.Handl...阅读全文

博文 2017-02-09 17:24:01 ponpon_

短连接跳转的原理

日常中常用短链接来节省字符长度,如中国移动的活动短信: ![Screenshot_20190622_134628_com.android.mms.jpg](https://static.studygolang.com/190622/c885e31b5b6bc18ac32c50d2b47ab60b.jpg) 那么它的实现原理很简单: **就是302跳转** 通过对传进来的url生成一个短的编码,然后使这个编码与这个url在数据库中一一对应,然后通过访问对外公开的api中如: https://t.cn/+生成的短链接,然后取到这个生成的短链接去数据库中查询对应的url,重定向302返回浏览器即可。这里我们不关心加密之类算法,数据存储的过程,只看短链接如何实现跳转的过程 下面是代码演示: ``` ...阅读全文

博文 2019-06-22 14:24:00 clylia

write smart proxy step by step 1 (理论简介)

REMOTE DICTIONARY SERVER 为什么写这系列?前段时间《7月,redis迷情》里面提到,我司线上 Redis Cluster + Smart Proxy 模式。我把代码放到了个人github上,大家感兴趣的可以下载使用。如果遇到问题,随时开Issue,或是直接找我。支持命令有限制,README里有详细介绍。 # go get github.com/dongzerun/smartproxy # make && ./cmd/redis_proxy -config_file=example.ini 为什么要重写呢,有如下原因: 1. 当前实现需要对输入做字符串转化,大家知道在Golang中,大量 Byte[] To String 性能不高且对GC压力较大。可以参考 Bitly ...阅读全文

博文 2017-02-10 14:29:56 董泽润

golang http 路由

来看看 http 自带的路由功能。 阅读前留几个问题 如果要自己实现路由,该怎么做? 默认路由的结构,搜索方式是什么? 例子 我们经常在示例中看到如下两种写法,示例来自于 stackoverflow // 使用 DefaultServeMux func main() { http.HandleFunc("/page2", Page2) http.HandleFunc("/", Index) http.ListenAndServe(":3000", nil) } // 使用 ServeMux 路由 func main() { mux := http.NewServeMux() mux.HandleFunc("/page2", Page2) mux.HandleFunc("/", Index) ...阅读全文

博文 2019-06-04 21:32:39 咔叽咔叽_

深度解密HTTP通信细节

目录 HTTP报文截获 背景介绍 抓包 mac本地 远程docker 请求 && 分析 关闭服务进程 关闭docker 重启docker 正常请求 HTTP协议分析 整体介绍 编码 MIME类型 URI/URL/URN HTTP方法 状态码 报文格式 HTTP协议进阶 代理 缓存 cookie 实体和编码 国际化支持 重定向与负载均衡 HTTP重定向 DNS重定向 HTTP连接 并行连接 持久连接 管道化连接 小结 参考资料 上一篇文章中,我们学会了用wireshark和tcpdump来分析TCP的“三次握手,四次挥手”,非常好用。这哥俩就是传说中的锤子,拿着锤子,看什么都像钉子!在这篇文章中,我对准了HTTP这颗钉子砸下去,咳咳。 为了对网络数据包的“流转”有更加深刻的理解,我在docke...阅读全文

博文 2019-07-22 22:18:33 qcrao-2018

我编了一个双向 RPC 调用的库:rpc2d

用数据流重定向的方法实现双向 RPC 调用,高效的实现从服务器 CALLBACK 客户端 API,基于 "net/rpc" 原生库。 安装: `go get gitee.com/rocket049/rpc2d` 或者`go get github.com/rocket049/rpc2d` ###提供下列 API 和类型 type ProviderType type RpcNode func Accept(l net.Listener, provider interface{}) (*RpcNode, error) func NewRpcNode(provider interface{}) *RpcNode func (self *RpcNode) Close() func (self *Rpc...阅读全文

博文 2018-10-17 16:30:04 fuhuizn

GO爬虫必备之HTTP请求QuickStart

[原文地址](https://zhuanlan.zhihu.com/p/61355955) 前几天在 "知乎想法" 谈到了一个话题,如何模仿学习,举了通过 net/http client 模仿 Pyhton 的requests的例子。但并未实践,难道想法真的只能是想法吗?当然不是,于是我决定先暂停一周 GO 笔记,来实践下自己的想法。 [有些新的知识,我们可以通过模仿学习](https://www.zhihu.com/pin/1112419189498933248) 本文将通过 GO 实现 requests 的 quick start 文档中的所有例子,系统学习http client的使用。虽然标题是 quick start,但其实内容挺多的。 ## 快速体验 首先,我们来发起一个 GET ...阅读全文

博文 2019-05-20 14:11:48 poloxue

linux-crontab

最近,需要在linux中使用定时任务。cron就是计划任务的意思。crontab是类unix系统中的一种操作定时任务的指令。也就是说cron是系统的定时任务,crontab是cron的命令。 使用命令查看是否有crontabs安装包(前提是rpm已经安装): rpm -qa|grep crontabs 启动、停止等cron服务: cd /usr/sbin cron start cd /usr/sbin cron stop cd /usr/sbin cron restart cd /usr/sbin cron reload 查看当前是否有定时任务: crontab -l 新增一个定时任务: crontab -e 列如: */1 * * * * /mnt/go/src/douyin-demo/s...阅读全文

博文 2018-09-05 20:34:41 卡萨布兰卡ginger

DockOne技术分享(二):集群规模下日志处理和网络方案

【编者的话】本文主要介绍在容器集群中,如何管理容器日志,有哪些方法可以管理日志,这些方法分别有哪些优势和劣势。紧接着讨论了目前网络的几种方案,每种方案都会带来什么样的收益和效果。最后介绍了芒果TV的最佳实践。 我先假定今晚的听众至少小范围的铺开 Docker 容器化技术在线上了,至少熟悉 Docker 的工作原理和 remote API。所以我不会过多的介绍Docker 的基本操作和使用,主要是分享集群化容器中的日志管理和网络管理。 在早期 Docker 实现中,日志这块的功能都不完善,所有容器内的标准输出和错误都会写入到/var/lib/docker/containers/{$cid}/{$cid}-log.json中。因为没有日志自动分卷以及容器绑定,所以一旦到线上就会出现瞬间磁盘打满的...阅读全文

博文 2017-06-25 14:51:50 CMGS

Ansible 怎么可以缺少阿里云

摘要: 本文转载自 阿里云CodePipeline客户“小草”的个人博客,Step By Step的呈现了从0配置一个nodejs 静态网站发布到OSS,并通过CDN回源加速的过程。 本文转载自 阿里云CodePipeline客户“小草”的个人博客,原文地址:  http://www.forkjoin.org/2017/08-21-CodePipeline-ossweb/ 现在流行前后端彻底分离,前端生成webpack 打包的静态文件。可以通过 CodePipeline构建后发布到oss 进行发布前端。下面进行详细讲解 第一步 申请开通 CodePipeline   CodePipeline 地址 第二步 创建CodePipeline任务 1....阅读全文

Go排坑:http.ServeMux意外重定向的问题分析

何为http.ServeMux?http.ServeMux是什么?官方定义为http服务的多路复用器。可以让开发在http服务器中自定义不同的path路由和对应的处理函数,我们简单举个例子: package main import ( "net/http" "fmt" ) func HandleABCFunc(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s %s\n", r.Method, r.URL) } func main() { http.HandleFunc("/abc/", HandleABCFunc) http.ListenAndServe(":8080", nil) } Where is the http...阅读全文

博文 2018-11-21 14:34:39 微服务蜂巢

golang-文件上传

package handler import ( "encoding/json" "io" "io/ioutil" "log" "net/http" "os" ) // UploadHandler 上传接口 func UploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { // 返回上传html页面 data, err := ioutil.ReadFile("./static/view/index.html") if err != nil { log.Printf("UploadHandler -> {%s}", err) _, _ = io.WriteString(w, "服务器错误") ...阅读全文

博文 2019-12-17 22:32:41 爱吃豆包

Golang | HttpRouter

1、什么是httprouter httprouter谈不上是一个框架,它的性能非常优秀。完全可以用来代替默认的 ServeMux。 所以比较适合对性能要求高,路由相对简单扁平的业务,或者作为高层HTTP框架的内部模块。 httproute内部通过实现一个trie树来提高性能。 核心代码就是golang标准库中 http.Handler 接口,在该函数中实现自己的请求路由分发策略。 gorilla/mux也是一个第三方的路由器,但是性能一般 2、为什么用httprouter 说说net/http的不足: 不能单独的对请求方法(POST,GET等)注册特定的处理函数 不支持路由变量参数 不能自动对Path进行校准 性能一般、扩展性不足 httprouter带来哪些便利? 仅支持精确匹配,及只匹配...阅读全文

博文 2020-04-06 00:34:21 _Liu_

Go入门系列(十一)WEB

目录 一、服务端 二、客户端 一、服务端 什么是Web的服务端?个人理解:网站,API等。 Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,模版,cookie等数据进行设置和操作。 拉起一个http服务仅需要简单的几行,定义路由,定义方法即可: func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world!") } func main() { http.HandleFunc("/", hello) //设置访问的路由 err := http.ListenAndServe(":8080...阅读全文

博文 2020-03-19 15:33:54 RabbitMask

Go 爬虫之 HTTP 请求 QuickStart

前几天在 "知乎想法" 谈到了一个话题,如何模仿学习,举了通过 net/http client 模仿 Pyhton 的requests的例子。但并未实践,难道想法真的只能是想法吗?当然不是,于是我决定先暂停一周 GO 笔记,来实践下自己的想法。 有些新的知识,我们可以通过模仿学习 本文将通过 GO 实现 requests 的 quick start 文档中的所有例子,系统学习http client的使用。虽然标题是 quick start,但其实内容挺多的。 快速体验 首先,我们来发起一个 GET 请求,代码非常简单。如下: func get() { r, err := http.Get("https://api.github.com/events") if err != nil { pan...阅读全文

博文 2019-07-29 14:02:42 波罗学

httprouter解读(continuing)

httprouter解读 核心思想 与defaultServeMux的实现区别在于什么?采取特殊的数据结构作路由。 defaultServeMux的实现采用什么样的数据结构? httprouter的实现采用什么样的数据结构? router的架构图是怎样的,与server.go有何异同 一些http相关的细节 其他细节 细读源码 Router的 paramsPool?sync.Pool需要看看 done 修复重定向是代码大头,得细细解读重定向相关的协议内容 这部分先跳过吧,细节太多了 http包的server.go里面req的context里面包含了params怎么取消的。done “server.serve => conn.serve ==>defer cancleCtx/ w.cancel...阅读全文

博文 2019-11-16 23:32:43 weicao

Linux 守护进程创建原理及简易方法

1:什么是Linux下的守护进程 Linux daemon是运行于后台常驻内存的一种特殊进程,周期性的执行或者等待trigger执行某个任务,与用户交互断开,独立于控制终端。一个守护进程的父进程是init进程,它是一个孤儿进程,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都被丢到了/dev/null中。守护进程一般用作服务器进程,如httpd,syslogd等。2:进程,进程组,会话,控制终端之间的关系 因为守护进程的创建需要改变这些环境参数,所以了解它们之间的关系很重要: 上图就描述了它们之间的联系: 2.1 进程组:它是由一个或多个进程组成,进程组号(GID)就是这些进程中的进程组长的PID。 2.2 会话:其实叫做会话期(session...阅读全文

博文 2020-02-28 21:33:04 linux大本营

gin 重定向 header 缺失怎么回事?

调试过程 ![捕获1.PNG](https://static.studygolang.com/201009/14e7ec63fbe2644b25dc42f88ccc6599.PNG) 有token header: map[Accept:[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9] Accept-Encoding:[gzip, deflate, br] Accept-Language:[zh-CN,zh;q=0.9] ** Authorization:[...阅读全文

go 指针

指针 Go 拥有指针。指针保存了值的内存地址。 类型*T是指向T类型值的指针。其零值为nil。 var p *int &操作符会生成一个指向其操作数的指针。 i := 42p = &i *操作符表示指针指向的底层值。 fmt.Println(*p) // 通过指针 p 读取 i*p = 21 // 通过指针 p 设置 i 这也就是通常所说的“间接引用”或“重定向”。 与 C 不同,Go 没有指针运算 案例: package main import "fmt" func main() { i, j := 42, 2701 p := &i // 指向 i fmt.Println(*p) // 通过指针读取 i 的值 *p = 21 // 通过指针设置 i 的值 fmt.Println(i) //...阅读全文

Golang的压测工具 hey源码分析

项目地址:https://github.com/rakyll/hey项目简介:HTTP负载发生器,是ApacheBench(ab)替代品用法:选项:-n 运行的的请求数。默认200.-c 并发运行请求数,请求数不能小于并发级别。默认值50-q 速率限制,已每秒查询(QPS)为单位。默认没有限制。-z 发送请求的应用程序配置,当时间到了应用程序停止并退出,如果指定了持续时间,则忽略n-o 输出类型。如果没有提供就打印在终端。csv是唯一支持的替代方案,转储文件的响应以逗号分割。 -m HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.-H 自定义HTTP头,可以通过重复的标记指定所需的头。例如 F -H "Accept: tex...阅读全文

博文 2020-04-29 00:34:27 lizhengxiang

为什么GOPROXY对Golang开发如此重要

为什么GOPROXY对Golang开发如此重要引言从Go 1.13开始,Go Module作为Golang中的标准包管理器,在安装时自动启用,并附带一个默认的GOPROXY。但是对于其他的GOPROXY选项,比如JFrogGoCenter,以及你自己的Go Module包,你需要在公众视野中保持安全,你应该选择什么样的配置? 你怎样才能不让你的公共和私人资源成为一个纠缠的结?先让我们来看看GOPROXY是干什么的,以及如何为一个快速、可靠和安全的系统设置一个GOPROXY。什么是GOPROXY?GOPROXY控制Go Module下载的来源,有助于确保构建的确定性和安全性。(传送门:大家可以在JFrog公众号里搜索 Go Module, 前文介绍里Go Module 带来的收益以及如快速转型...阅读全文

博文 2020-06-02 19:32:47 JFrog杰蛙科技

golang常用代码片段--定制化http-client组件

封装标准库的http工具 import ( "crypto/tls" "errors" "github.com/gin-gonic/gin" "io/ioutil" "net/http" "strconv" "strings" "time" ) var httpClient = &http.Client{ Timeout: 3 * time.Second, // 返回301、302重定向时,不会自动发起重定向访问 CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, Transport: &http.Transport{ TLSClientCo...阅读全文

博文 2019-11-25 00:02:38

Go中的HTTP请求之——HTTP1.1请求流程分析

来自公众号:新世界杂货铺前言http是目前应用最为广泛, 也是程序员接触最多的协议之一。今天笔者站在GoPher的角度对http1.1的请求流程进行全面的分析。希望读者读完此文后, 能够有以下几个收获:对http1.1的请求流程有一个大概的了解在平时的开发中能够更好地重用底层TCP连接对http1.1的线头阻塞能有一个更清楚的认识HTTP1.1流程今天内容较多, 废话不多说, 直接上干货。接下来, 笔者将根据流程图,对除了NewRequest以外的函数进行逐步的展开和分析(*Client).do(*Client).do方法的核心代码是一个没有结束条件的for循环。for { // For all but the first request, create the next // reques...阅读全文

博文 2020-09-25 13:32:39 新世界杂货铺

02Gin源码解读

简介 HttpRouter 实现 数据结构 添加路由 addRoute insertChild 获取数据 总结 简介 Gin 源码解读, 基于 v1.5.0 版本. HttpRouter 实现 添加路由主要是由 addRoute 完成: func (engine *Engine) addRoute(method, path string, handlers HandlersChain) { assert1(path[0] == '/', "path must begin with '/'") assert1(method != "", "HTTP method can not be empty") assert1(len(handlers) > 0, "there must be at le...阅读全文

博文 2019-12-06 11:32:36 帅气猫咪

【入门向】在Golang中像Python一样快速使用HTTP请求

本文将介绍一个 Golang 下的 Http 请求封装库。可以与 Python 的 requests 库类似的配置请求和处理返回。 获取 Goreq go get -u github.com/zhshch2002/goreq Quick start 首先,我们来发起一个 GET 请求,代码非常简单。如下: func main() { res := goreq.Do(goreq.Get("https://httpbin.org/get")) if res.Err != nil { fmt.Println(res.Err) } else { fmt.Println(res.Text) } } 其中res包含了相应的数据,res.Err为非空时表示请求中遇到错误。 除了 GET,HTTP 还有其他...阅读全文

博文 2020-08-18 06:32:52 zhshch

my-project 后端系统搭建(2) golang+docker

后端的搭建规划是:启动一个go docker 镜像的container, 用于编译golang项目,并把container的输出(main文件)指向指定目录:/var/lib/jenkins/workspace/my-project-backend 即($PWD)jenkins job的workspace, 然后再把main文件拷贝到一个固定目录下,重命名在执行。 之所以重命名是因为文件名字为main的不容易让人理解这个可执行文件的本意。golang build可以自定义输出结果的名字,但是好像有点复杂?? 设计细节解释: docker一编译出来就放到jenkins job workspace 下目的是: 可以从jenkins 页面就可以看出是否有成功编译出main文件,因为jenkins已...阅读全文