10 Karl_zhujt

尚未进行身份认证

我要认证

工作中积累的点点滴滴,分享给大家,如果有好的建议,请多多指教

等级
TA的排名 1w+

golang:访问mysql

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。package mainimport ( "database/sql" "log" _ "github.com/go-sql-driver/mysql")func main() { // db 是一个 sql.DB类型的对象 // 该对象线程安全,且内部已包含了一个连接池 // 连接池的选项可以在 sql.DB 的方法中设置 db,err:=sql.Open("mysql","root:123456@tcp(127.0.0.

2020-08-03 17:08:35

golang:validate

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。下面是一个递归的深度优先搜索方式的遍历示例,采用反射对结构体进行树形遍历。package mainimport ( "fmt" "reflect" "regexp" "strconv" "strings")type Nested struct { Email string `validate:"email"`}type T struct { Age int `validate:"eq=10"` Nested Neste

2020-08-03 14:50:49

golang:REST接口

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。gRPC服务一般用于集群内部通信,如果需要对外暴露服务一般会提供等价的REST接口。通过REST接口比较方便前端JavaScript和后端交互。开源社区中的grpcgateway项目就实现了将gRPC服务转为REST服务的能力。grpc-gateway的工作原理如下图:通过在Protobuf文件中添加路由相关的元信息,通过自定义的代码插件生成路由相关的处理代码,最终将REST请求转给更后端的gRPC服务处理。1.环境准备google/a

2020-07-29 17:01:00

golang:github.com/mwitkow/go-proto-validators/validator.proto 文件在GoLand中不识别

练习《Go语言高级编程》中4.6.1验证器的案例时,代码如下:syntax = "proto3";package main;import "github.com/mwitkow/go-proto-validators/validator.proto";message Message { string important_string = 1 [(validator.field) = {regex: "^[a-z]{2,5}$"}]; int32 age = 2 [(validato

2020-07-27 23:20:53

golang:gRPC和Web服务共存

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。gRPC构建在HTTP/2协议之上,因此可以将gRPC服务和普通的Web服务架设在同⼀个端⼝之上。1.helloworld.protosyntax = "proto3";package main;service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}message HelloRequest { string name = 1;}messa

2020-07-08 12:59:30

golang:截取器

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。gRPC中的grpc.UnaryInterceptor和grpc.StreamInterceptor分别对普通⽅法和流⽅法提供了截取器的⽀持。不过gRPC框架中只能为每个服务设置⼀个截取器,因此所有的截取⼯作只能在⼀个函数中完成。开源的grpc-ecosystem项⽬中的go-grpc-middleware包已经基于gRPC对截取器实现了链式截取器的⽀持。这⾥简单介绍普通⽅法的截取器⽤法。1.helloworld.protosyntax =

2020-07-07 13:44:01

golang:gRPC token认证

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。基于证书的认证是针对每个gRPC链接的认证。gRPC还为每个gRPC⽅法调⽤提供了认证⽀持,基于⽤户Token对不同的⽅法访问进⾏权限管理。1.helloworld.protosyntax = "proto3";package main;service Greeter{ rpc SayHello(HelloRequest) returns (HelloReply);}message HelloRequest{ string

2020-07-06 15:04:37

golang:gRPC 证书认证

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。gRPC建⽴在HTTP/2协议之上,对TLS提供了很好的⽀持。客户端在链接服务器中通过 grpc.WithInsecure() 选项跳过了对服务器证书的验证,没有启⽤证书的gRPC服务在和客户端进⾏的是明⽂通讯,信息⾯临被任何第三⽅监听的⻛险。为了保障gRPC通信不被第三⽅监听篡改或伪造,可以对服务器启动TLS加密特性。1.结构目录2.为服务器和客户端分别生成私钥和证书,存放在 tls-config/ 目录下,命令如下:// Makefi

2020-07-06 14:59:20

golang:RPC服务的简单登录验证

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。基于上下⽂可以针对不同客户端提供定制化的RPC服务,同时可以方便地为RPC服务增加简单的登陆状态的验证。1.server/main.gopackage mainimport ( "fmt" "log" "net" "net/rpc")type HelloService struct { conn net.Conn isLogin bool}func ServeHelloService(conn net.Conn)

2020-06-30 13:09:32

golang:反向RPC

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。通常的RPC是基于C/S结构,RPC的服务端对应⽹络的服务器,RPC的客户端也对应⽹络客户端。但是对于⼀些特殊场景,⽐如在公司内⽹提供⼀个RPC服务,但是在外⽹⽆法链接到内⽹的服务器。这种时候我们可以参考类似反向代理的技术,⾸先从内⽹主动链接到外⽹的TCP服务器,然后基于TCP链接向外⽹提供RPC服务。1.Server/main.gopackage mainimport ( "net" "net/rpc" "time")type

2020-06-30 08:18:20

golang:Protobuf代码生成插件

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。Protobuf的protoc编译器是通过插件机制实现对不同语⾔的⽀持。⽐如protoc命令出现 --xxx_out 格式的参数,那么protoc将⾸先查询是否有内置的xxx插件,如果没有内置的xxx插件那么将继续查询当前系统中是否存在protoc-gen-xxx命名的可执⾏程序,最终通过查询到的插件⽣成代码。对于Go语⾔的protoc-gen-go插件来说,⾥⾯⼜实现了⼀层静态插件系统。⽐如protoc-gen-go内置了⼀个gRPC插件,⽤户可以通过

2020-06-29 15:09:14

获取星期一,获取第几周

protected void Page_Load(object sender, EventArgs e) { DateTime dt1 = Convert.ToDateTime("2012/4/1"); //第一天按周日算 Response.Write(WeekOfMonth(dt1, true) + ""); //

2012-04-19 15:13:09

golang:Go语言对象到C++类

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。要实现Go语言对象到C++类的包装需要经过以下几个步骤:首先是将Go对象映射为一个id;然后基于id导出对应的C接口函数;最后是基于C接口函数包装为C++对象。构造一个Go对象// persion.gopackage maintype Person struct { name string age int}func NewPerson(name string, age int) *Person { return &Per

2020-05-27 08:43:48

golang:C++类到Go语言对象

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。CGO是C语⾔和Go语⾔之间的桥梁,原则上⽆法直接⽀持C++的类。CGO不⽀持C++语法的根本原因是C++⾄今为⽌还没有⼀个⼆进制接⼝规范(ABI)。⼀个C++类的构造函数在编译为⽬标⽂件时如何⽣成链接符号名称、⽅法在不同平台甚⾄是C++的不同版本之间都是不⼀样的。但是C++是兼容C语⾔,所以我们可以通过增加⼀组C语⾔函数接⼝作为C++类和CGO之间的桥梁,这样就可以间接地实现C++和Go之间的互联。当然,因为CGO只⽀持C语⾔中值类型的数据类型,所以我们

2020-05-26 09:24:24

golang:将C语言的qsort()函数封装成一个Golang语言的qsort()函数

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。qsort快速排序函数是C语⾔的⾼阶函数,⽀持⽤于⾃定义排序⽐较函数,可以对任意类型的数组进⾏排序。sort.go 支持包package c5/*#include <stdlib.h>typedef int (*qsort_cmp_func_t)(const void* a, const void* b);extern int _cgo_qsort_compare(void* a, void* b);*/import

2020-05-21 12:48:59

Oracle为用户设置读权限

Oracle 数据库中创建表只读用户,并为其设置密码永不过期、同义词。1.创建用户create user test identified by "123456" default tablespace db temporary tablespace dbTEMP;2.资源授权grant connect,resource to test;3.表授读权限select 'gr...

2020-05-07 23:24:36

golang:素数筛

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。package mainimport ( "context" "fmt")// 返回生成自然数序列的管道:2,3,4……func GenerateNatural(ctx context.Context) chan int { ch := make(chan int) go func() { for i := 2; ...

2020-05-06 23:03:41

golang:发布订阅模型

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。发布订阅(publish-and-subscribe)模型通常被简写为pub/sub模型。在这个模型中,消息⽣产者成为发布者(publisher),⽽消息消费者则成为订阅者(subscriber),⽣产者和消费者是M:N的关系。在传统⽣产者和消费者模型中,是将消息发送到⼀个队列中,⽽发布订阅模型则是将消息发布给⼀个主题。pubsub.go...

2020-05-04 20:47:15

golang:解析HTTP请求参数

《GO程序设计语言》设计中案例,仅作为笔记进行收藏。此案例将HTTP请求参数解析成对应的匿名结构体,并使用反射来获取字段标签。params 解析函数package paramsimport ( "fmt" "net/http" "reflect" "strconv" "strings")// Unpack 从 HTTP 请求 req 的参数中提取数据填充到 ptr 指向...

2020-04-15 13:38:40

golang:编码S表达式

《GO程序设计语言》设计中案例,仅作为笔记进行收藏。编码S表达式案例。Go语言的标准库支持了包括JSON、XML和ASN.1等多种编码格式。还有另一种依然被广泛使用的格式是S表达式格式,采用Lisp语言的语法。encode.go 编码,未带美化package sexprimport ( "bytes" "fmt" "reflect")func Marshal(v inter...

2020-04-14 13:58:19

查看更多

勋章 我的勋章
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享王者
    分享王者
    成功上传51个资源即可获取