Golang
文章平均质量分 76
golang知识点总结
田土豆
Learn or die
展开
-
【Golang | reflect】利用反射实现方法的调用
go语言中,如果某个数据类型实现了一系列的方法,如何批量去执行呢,这时候就可以利用反射里的方法。原创 2023-10-21 22:45:36 · 964 阅读 · 1 评论 -
【Golang | flag】go run xxx.go -h | grep xx为什么得不到预期结果?原来默认打印到标准错误~
这两天学习go语言flag包的基本用法,代码写好了执行下试试效果,能得到想要的结果但是如果-h输出的帮助信息太多,想通过grep过滤下,却发现还是输出了全部的帮助信息。原创 2023-08-17 23:29:27 · 146 阅读 · 0 评论 -
Golang使用select实现超时处理
超时处理主要用到机制和函数select中每个case是一个通信操作,随机执行一个。如果每个case都无法执行,select语句将阻塞,直到有case可运行;函数的定义如下,表明在经历时间d后,向返回的通道内传值(After waits for the duration to elapse and then sends the current time on the returned channel.)原创 2022-12-12 22:31:09 · 1422 阅读 · 0 评论 -
【Golang】判断某一类型是否实现指定接口的几种方法
判断某一类型是否实现了指定接口原创 2022-08-03 00:01:35 · 1882 阅读 · 0 评论 -
【Golang | gRPC】使用gRPC实现Watch功能
客户端可以通过Watch机制来订阅服务器上某一节点的数据或状态,当其发生变化时可以收到相应的通知。前阵子学习了gRPC的服务端流模式,今天我们就用这个流模式来具体实现Watch功能Watch功能整体思路就是服务端实例化一个chan,如果监听对象发生变化,向chan中发送值,客户端从chan中收到值,如果没有就一直阻塞httpshttps。......原创 2022-07-17 11:58:32 · 724 阅读 · 0 评论 -
【Golang | gRPC】gRPC-Server Streaming服务端流实战
环境:Golang: go1.18.2 windows/amd64grpc: v1.47.0protobuf: v1.28.0完整代码:https://github.com/WanshanTian/GolangLearningcd GolangLearning/RPC/gRPC-ServerStreaming前文【Golang | gRPC】HTTP的连接管理——从HTTP/1.0到HTTP/2.0的演进 简单介绍了gRPC中流模式主要分为客户端流、服务端流、双向流以及流传输模式的优点,下面通过一原创 2022-07-13 21:49:03 · 1119 阅读 · 0 评论 -
【Golang | gRPC】gRPC-Client Streaming客户端流实战
环境:Golang: go1.18.2 windows/amd64grpc: v1.47.0protobuf: v1.28.0完整代码:https://github.com/WanshanTian/GolangLearningcd GolangLearning/RPC/gRPC-ClientStreaming前文【Golang | gRPC】HTTP的连接管理——从HTTP/1.0到HTTP/2.0的演进 简单介绍了gRPC中流模式主要分为客户端流、服务端流、双向流以及流传输模式的优点,下面通过一原创 2022-07-11 23:06:53 · 1590 阅读 · 0 评论 -
【Golang | gRPC】gRPC-Bidirectional Streaming双向流实战
环境:Golang: go1.18.2 windows/amd64grpc: v1.47.0protobuf: v1.28.0完整代码:https://github.com/WanshanTian/GolangLearningcd GolangLearning/RPC/gRPC-BidirectionalStreaming前文【Golang | gRPC】HTTP的连接管理——从HTTP/1.0到HTTP/2.0的演进 简单介绍了gRPC中流模式主要分为客户端流、服务端流、双向流以及流传输模式的优原创 2022-07-09 21:32:06 · 1689 阅读 · 0 评论 -
【Golang | gRPC】HTTP的连接管理——从HTTP/1.0到HTTP/2.0的演进
学习了前文【Golang | gRPC】使用gRPC实现简单远程调用,后面开始了解的流模式,分为三种:那什么是流,在谈流的概念前,有必要先简单了解下的连接管理经历了哪些演变。连接其实就是连接及其使用规则。一旦建立了TCP连接后,客户端开始发送HTTP请求,而服务端读取请求,当读取完整条请求报文后,就会对请求进行处理,执行所请求的动作,然后将数据写回客户端。最后客户端读取数据,并对响应数据进行处理。如果对HTTP连接只进行简单的管理,当HTTP事务串行加载时,TCP的连接时延就会叠加起来,如下图:通过多条原创 2022-07-08 22:30:13 · 1099 阅读 · 0 评论 -
【Golang | gRPC】使用TLS/SSL认证的gRPC服务
环境:Golang: go1.18.2 windows/amd64grpc: v1.47.0protobuf: v1.28.0OpenSSL: 3.0.4完整代码:https://github.com/WanshanTian/GolangLearningcd GolangLearning/RPC/gRPC-cred支持很多认证机制,如:, ,,同时支持以插件的方式使用自定义的认证机制。本文主要介绍认证机制的使用【Golang | gRPC】使用gRPC实现简单远程调用 实现了无认证的gRPC服原创 2022-07-03 21:50:53 · 1888 阅读 · 1 评论 -
【Golang | gRPC】使用openssl生成证书
环境:OpenSSL:3.0.4使用: 将私钥输出到指定文件,如不加则输出到控制台: 生成2048位的私钥: 生成加密私钥1.2 使用RSA私钥生成公钥: 导入私钥文件: 输出公钥: 将输出公钥保存到指定文件里1.3 查看密钥1.3.1 查看私钥1.3.2 查看公钥2. 证书请求文件有了私钥后,就可以创建(csr,证书请求文件)。使用私钥对csr进行(签名),同时csr中包含与私钥对应的公钥使用一般来说,交互时直接敲就行,表示使用默认值;如果想某些字段为空,可以输原创 2022-07-02 12:14:24 · 1528 阅读 · 0 评论 -
【Golang | gRPC】使用gRPC实现简单远程调用
环境:Golang: go1.18.2 windows/amd64grpc: v1.47.0protobuf: v1.28.0是一个基于C/S架构,使用作为传输协议进行远程过程调用的高性能框架,前文【Golang | gRPC】protocol buffer compiler\protoc的安装,【Golang | gRPC】使用protoc编译.proto文件分别就protoc编译工具的安装和使用进行了详细的说明,下面通过一个demo具体说明gRPC的简单使用现有下面一种场景:服务端保存着用户的年龄原创 2022-06-27 01:19:04 · 1622 阅读 · 0 评论 -
【Golang | gRPC】使用protoc编译.proto文件
环境:Golang: go1.18.2 windows/amd64protoc:libprotoc 3.21.1使用编译.proto文件,首先需要正确安装编译器。如果使用预编译的二进制文件方式安装,注意添加环境变量,具体可以参考【Golang | gRPC】protocol buffer compiler\protoc的安装protoc本身并不支持Golang,需要额外安装对应的插件方法1,使用安装方法2,在一个已经包含go.mod文件的项目里使用安装成功后,会在目录下生成两个2进制文件3.1.1原创 2022-06-14 14:52:10 · 7686 阅读 · 3 评论 -
【Golang | gRPC】protocol buffer compiler\protoc的安装
利用来进行服务定义和数据序列化,使用工具对后缀名为的文件进行编译使用包管理工具直接安装。以centos为例,直接通过yum安装安装成功后,执行查看是否安装成功2.2 使用预编译的二进制文件使用预编译的二进制文件好处就是可以确保使用到最新的版本到https://github.com/protocolbuffers/protobuf/releases网址根据pc的操作系统、架构选择格式的文件进行下载。这里以64位的Windows系统为例,选择下载完解压后,将所在目录添加到环境变量里,如下图确认后原创 2022-06-13 23:12:51 · 1751 阅读 · 0 评论 -
【Golang | RPC】使用包net/rpc实现基于http协议的RPC服务
环境:Golang:go1.18.2 linux/amd64前面两篇文章【Golang | RPC】Golang-RPC机制的理解,【Golang | RPC】利用json编解码器实现RPC介绍了基于socket连接,分别采用gob,json作编解码器实现RPC服务。本文基于http协议实现RPC服务,并简单分析原理通过Golang自带的包实现RPC服务。现有下面一种场景:服务端保存着用户的年龄信息,客户端输入姓名,经RPC后获得对应的年龄2.1.1 首先新建项目httpRPC,并创建Server目录,新原创 2022-06-12 19:49:23 · 979 阅读 · 0 评论 -
【Golang | RPC】利用json编解码器实现RPC
环境:Golang:go1.18.2 linux/amd64上文【Golang | RPC】Golang-RPC机制的理解里提到了使用json将客户端request和服务端response编码后得到的数据下面就以socket连接为基础,用json编解码器具体实现RPC,并简要分析其原理通过Go语言自带的包实现编解码。现有下面一种场景:服务端保存着用户的年龄信息,客户端输入姓名,经RPC后获得对应的年龄2.1.1 首先新建项目RPC,并创建Server目录,新建main.go2.1.2 服务端使用map原创 2022-06-11 14:20:54 · 619 阅读 · 0 评论 -
【Golang | RPC】Golang-RPC机制的理解
RPC机制RPC(远程过程调用,Remote Procedure Call)一般采用C/S(客户端/服务端)架构,即请求方是客户端,服务提供方是服务端。RPC往往用于微服务实例间的通信。Go语言原生PRC简介/net/rpc提供了通过网络访问一个对象方法的能力,............原创 2022-06-10 22:30:15 · 995 阅读 · 0 评论 -
【Golang | Database】通过database/sql包的query和exec方法操作mysql
环境:当我们想执行一些mysql语句同时需要获得返回值时(例如SELECT),可以使用包里的方法;如果不需要获取返回值(例如INSERT,DELETE,UPDATE),可以使用方法2.1 如果您当前环境没有mysql,建议使用容器方式部署,可参考我之前的文章【Golang | Database】利用database/sql访问容器化的MySQL2.2 使用下载mysql驱动,用作插件注册2.3 新建一个数据库gosql3. 示例3.1 连接数据库gosql导入和,并使用建立与数据库gosql的连接原创 2022-06-09 00:16:33 · 3001 阅读 · 0 评论 -
【Golang | Web】利用gorilla/mux提取请求路径中的参数
环境:Golang:go1.18.2 linux/amd64gorilla/mux:v1.8.0就是一个路由分发器,可以将每一个request分发到指定的handler。当请求路径中有参数时,通过定义或者(pattern就是一个正则表达式,如果匹配不成功,就不能将该request成功地分发)这样的格式来进行提取3. 示例3.1 首先新建一个project,并启用gomodule3.2 新建main.go,new一个Router3.3 通过定义的格式来提取路径中的book,通过定义的格式来提取路径原创 2022-06-07 23:45:58 · 1094 阅读 · 0 评论 -
【Golang | Web】中间件的使用
前提概要承接上一回使用Go语言构建Web服务器,我们实现了一个简易的应用HelloWorld,通过监听本地8080端口,提供web服务。客户端通过访问http://127.0.0.1:8080/可以获取返回值 “Hello World!”故事背景现在服务端想要统计每次响应请求消耗的时间(这里只涉及app处理请求消耗的时间,不包含链路通信等其他时间),我们可以对HelloWorld作如下简单修改func HelloWorld(w http.ResponseWriter, r *http.Request原创 2022-04-16 19:34:27 · 463 阅读 · 0 评论 -
【Golang | Web】构建Web服务器
Go语言搭建一个简易的Web服务原创 2022-04-16 18:31:59 · 1499 阅读 · 0 评论 -
【Golang | Context】context.WithCancel()取消机制的理解
环境:Golang: go1.15.7 windows/amd64一、概念Golang中context包提供上下文机制在 goroutine 之间传递 deadline、取消信号(cancellation signals)或者其他请求相关的信息。其中context.WithCancel 函数能够从 context.Context 中衍生出一个新的子上下文并返回用于取消该上下文的函数。一旦我们执行返回的取消函数,当前上下文以及它的子上下文都会被取消,所有的 Goroutine 都会同步收到这一取消信原创 2022-03-23 21:49:35 · 9210 阅读 · 2 评论 -
【Golang | Database】利用database/sql访问容器化的MySQL
利用容器部署mysql1、首先通过docker pull mysql拉取mysql镜像[root@k8s-master ~]# docker pull mysqlUsing default tag: latestTrying to pull repository docker.io/library/mysql ...latest: Pulling from docker.io/library/mysqla4b007099961: Pull completee2b610d88fd9: Pull原创 2022-03-21 21:02:43 · 1297 阅读 · 0 评论