学会gin的参数校验之validator库,看这一篇就够用了

前言 哈喽,大家好,我是asong。这是我的第十篇原创文章。这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。最开始在做这一部分的时候,我采用老方法,自己编写参数检验方法,统一进行参数验证。后来在同事CR的时候,说GIN有更好的参数检验方法,gin框架使用github.com/go-playground/validator进行参数校验,我们只需要在定义结构体时使用binding或validatetag标识...阅读全文

简书 2020-08-23 00:32:44 sunsong1997

grpc实践-学会grpc就是这么简单

gRPC.png 前言 hello,我是asong,这是我的第七篇原创文章。上一篇我们使用go的标准库rpc进行实践,使用起来还是很方便的,这一篇我们来学习一grpc。 1. gRPC gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。他的目标是跨语言开发,支持多种语言。在gRPC里客户端应用可以像调用本地对象一样直接调用另一台...阅读全文

简书 2020-08-23 00:32:44 sunsong1997

使用开发联调神器做k8s的ingress

背景 K8S集群内部的服务在外部不能访问,如需外部访问需要ingress做代理。官方有nginx-ingress,安装配置比较麻烦,想弄个简单的,只需要提交个表单就能配置完成的那种。 想到之前写的一个开发联调神器dev-proxy可以做简单的代理使用,配置方便。把她部署在k8s集群里是否就能直接配置服务了。。想到就做。。。。 golang代码 package main import ( "flag" "github.com/go-proxy/dev" "log" "net/http" "os" ...阅读全文

简书 2020-08-23 00:32:42 如水网

Golang逃逸分析浅谈

众所周知,Golang是一门自带GC的编程语言。这意味着内存的分配和管理绝大多数情况下不需要开发者去过多干涉。 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针。它涉及到指针分析和形状分析。 当一个变量(或对象)在子程序中被分配时,一个指向变量的指针可能逃逸到其它执行线程中,或是返回到调用者子程序。如果使用尾递归优化(通常在函数编程语言中是需要的),对象也可以看作逃逸到被调用的子程序中。如果一种语言支持第一类型的延续性在Scheme和Standar...阅读全文

简书 2020-08-23 00:32:42 MontyOak

golang 订阅发布机制实现

大家使用较多的生产消费模式中间件,大都是订阅发布机制,反过来大家用这些中间件肯定都会用,一方subscribe(订阅)一个topic,另一方publish(发布)消息向该topic,订阅了该topic的subsciber都会收到该消息,反之,则收不到。那么如果让大家手动实现个这个机制,大家向下是否能够实现出来?小伙伴们不妨切到自己的开发工具上手动敲下代码代码试试。如果没问题的可以不用往下看了,浪费大家的时间,如果敲不出来的可以继续往下看,我带大家一起边敲边梳理这个流程。想下我们在使用订阅发布组件...阅读全文

简书 2020-08-23 00:32:42 GoSnail

从kube-prometheus定制k8s监控(二) 部署kube-prometheus

上一篇提到了为什么选用Prometheus Operator作k8s监控,相比于单部署Prometheus的区别。 而对于监控来说,仅仅有工具是远远不够的。 还需要高可用部署,定义收集的数据,监控指标,图标呈现等等, 这就要提到kube-prometheus。 kube-prometheus 是个很“贴心”的项目,它本来是Prometheus Operator的一部分,后来分离出来独立发布。 除了定义部署,还整合了一些外部项目,包括指标的创建,监控规则的定义,监控图表创建等等,把对k8s集群通用...阅读全文

简书 2020-08-23 00:32:41 SongRijie

Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata

系列文章目录第一章 Go 语言打包静态文件以及如何与Gin一起使用Go-bindata[TOC]前言前几天,开始学习用 Go 语言开发一个内部项目来帮助解决测试环境中的一些不便利的问题。因为开发的小项目中存在一些静态文件和配置文件,第一打包的时候发现并没有将静态文件打包进入可执行文件,这样在发布的时候又需要手动拷贝一下静态文件,这样就很麻烦了。在一些网上资料上发现了 go-bindata。这样我还是只分发一个文件就可以了,不过打包出来的文件会大一点。一、go-bindata是什么?his pac...阅读全文

Segmentfault 2020-08-30 19:32:32 双鬼带单

使用开发联调神器做k8s的 ingress

# 背景 K8S集群内部的服务在外部不能访问,如需外部访问需要ingress做代理。官方有nginx-ingress,安装配置比较麻烦,想弄个简单的,只需要提交个表单就能配置完成的那种。 想到之前写的一个开发联调神器dev-proxy可以做简单的代理使用,配置方便。把她部署在k8s集群里是否就能直接配置服务了。。想到就做。。。。 # golang代码 ``` package main import ( "flag" "github.com/go-proxy/dev" ...阅读全文

Go语言中文网 2020-08-22 22:08:27 rushui

学会gin框架的参数验证之validator库,看这一篇就够用了

前言哈喽,大家好,我是asong。这是我的第十篇原创文章。这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。最开始在做这一部分的时候,我采用老方法,自己编写参数检验方法,统一进行参数验证。后来在同事CR的时候,说GIN有更好的参数检验方法,gin框架使用github.com/go-playground/validator进行参数校验,我们只需要在定义结构体时使用binding或validatetag标识相...阅读全文

Segmentfault 2020-08-30 11:32:33 asong

golang使用defer计算函数耗时无法计算正确的时间

今天想计算程序的耗时时间,为了方便使用defer来计算函数的总的执行时间。但是很少。后来经过如下实验发下了问题: logsParam := "[test]" startTime := time.Now() defer logs.Warning("%s end-cost Seconds:%vs ", logsParam, time.Since(startTime).Seconds()) time.Sleep(2 * time.Second) logs.Warning("%s end-cost-2 ...阅读全文

golang 详解 defer

参考文献 https://juejin.im/post/6844903865561645070 参考文献 https://www.cnblogs.com/tinywan/p/8570898.html](https://www.cnblogs.com/tinywan/p/8570898.html 1. 什么是defer defer用来声明一个延迟函数,把这个函数放入到一个栈上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是运行到最外层方法体的"}"时调用。我们经常用他来...阅读全文

简书 2020-08-22 07:32:41 TTWP_8

使用kubecm管理kubeconfig

kubecm是国内某位大神自己写的项目,可以合并多个kubeconfig文件,切换集群等。项目地址。如果你是用的bash环境,需要安装至少0.8.2版本(之前版本在bash环境下无法命令补全,联系作者修复后的版本为0.8.2)。 此文档环境: centos7.6 、kubectl1.14.8、kubecm0.8.2 kubecm kubecm 由 golang 编写,支持 Mac Linux 和 windows 平台,delete rename switch 提供比较实用的交互式的操作,目前的功...阅读全文

简书 2020-08-22 07:32:40 杨家小七

gorm简单实用指南

1. 环境 go version go1.13.6 darwin/amd64 github.com/jinzhu/gorm v1.9.16 gorm是golang orm框架,如果有java开发语言经验,可以和hibernate比较学习 gorm官网链接 2 打开数据连接 import ( "fmt" "time" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) type Test struct { ID int `go...阅读全文

简书 2020-08-22 07:32:39 左洁

游戏服务器开发一些心得体会

通信数据大小端需要注意:java收发的都是网络格式的数据是大端数据,c++运行在Linux中的服务如果没有转成网络格式数据,服务器一般都是小端格式的数据,这个在编解码的时候需要留心,否则可能解不出对方发来的数据,自己发的数据对方也解不出来。如何确认双方发送的数据是否一致呢,一般来说可以在收到一个完整的消息包后,把该消息包字节流的数据使用16进制字符串打印出来,就可以很容易比较 对于网关服务 GateServer,登录服务 LoginServer 这两种部署在外网的服务与客户端之间之间打交道的,它...阅读全文

简书 2020-08-22 07:32:39 _给我一支烟_

闲谈虚拟化中的 CPU 模式

“读过书……我便考你一考。茴香豆的茴...哦不是,CPU的三种模式,你知道么” 在 OpenStack 中,CPU mode 的选取对于云平台的性能、稳定性发挥着至关重要的作用。本文将从性能、热迁移以及稳定性三个角度对 CPU mode 进行分析。 小学二年级的时候,老师就教过我们虚拟化的CPU机制,分别为 host-passthrough,host-model 以及 custom ,如果连这道题都答不上来,怎么好意思出去和别人吹牛说自己是搞基础架构的(狗头)? 那么,先来看看这三种机制背后的原...阅读全文

简书 2020-08-22 07:32:39 奥特虾

Go系列 | 02、Go包管理工具-Go mod

一、go mod是什么?1.1、背景Golang从诞生之初就一直有个被诟病的问题:缺少一个行之有效的“官方”包依赖管理工具。那为啥会出现这样的一个问题呢?原因:在Google内部,所有人都是在一个代码库上进行开发的,因此包依赖管理工具并不是非常需要。但Golang变成一个社区化的工程语言之后,这个问题被放大了。1.2、Go mod定义go mod其实就是一个Modules,关于Modules的官方定义为:Modules是相关Go包的集合,是源代码交换和版本控制的单元。简单的说就是一个类似索引文件...阅读全文

Segmentfault 2020-08-28 22:32:33 喝醉的清茶

《GO语言圣经》学习笔记(八)Goroutines和Channels

知识点 goroutinue 基本用法 golang非常深度的简化了goroutinue的使用方法,异常简单,门槛降低很多 // goroutinue 使用非常简单 go f() Goroutines和线程的区别 goroutinue使用动态栈,2k开始,最大1g Go的运行时包含了其自己的调度器,这个调度器使用了一些技术手段,比如m:n调度,因为其会在n个操作系统线程上多工(调度)m个goroutine Go的调度器使用了一个叫做GOMAXPROCS的变量来决定会有多少个操作系统的线程同时执行...阅读全文

简书 2020-08-21 15:32:51 硌手小石头

学完微软技术总监整理的44 个微服务架构设计模式,我涨薪了

前言“微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构”单体应用 vs 微服务架构 优点 提升开发交流,每个服务足够内...阅读全文

简书 2020-08-21 15:32:51 Java斗帝之路