Go遍历struct,map,slice
原文链接:http: www.zhoubotong.site/post/23.html
遍历结构体
如何实现遍历结构体字段? 好吧,言归正传!举个例子: demo1:
package main
import (
"fmt"
"reflect"
)
type Stud...[2021/2/1]
GO 语言入门(一)
GO 语言入门(一)
本文写于 2020 年 1 月 18 日
Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第一个版本于 2012 年 3 月作为开源发布。
它是一种静态类型的并发型编译语言,并...[2021/2/1]
在Golang中如何正确地使用database/sql包访问数据库
本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结。
其实我也是一个新手,机缘巧合几个月前开始做golang开发,以前一直是以.NET技术栈为主,文章如有错误不吝指正...[2021/2/1]
Go map定义的几种方式以及修改技巧
原文链接:http: www.zhoubotong.site/post/24.html 直入正题,我们看下以下代码:
package main
import (
"encoding/json"
"fmt"
)
func main() {
第一种声明
va...[2021/2/1]
微服务实践之分布式定时任务微服务实践之分布式定时任务
承接上篇:上篇文章讲到改造 go-zero 生成的 app module 中的 gateway & RPC 。本篇讲讲如何接入 异步任务 以及 log的使用。
Delay Job
日常任务开放中,我们会有很多异步、批量、定时、延迟任务要处理,go-zero中有 go-queue...[2021/2/1]
Go基础及语法(四)
目录结构体匿名结构体构造函数方法和接收者结构体的值结构体的嵌套和匿名字段JSON序列化与反序列化
结构体
package main
import "fmt"
定义结构体
type person struct {
name string
age int
}
func ma...[2021/1/25]
企业项目迁移go-zero全攻略(一)
作者:Mikael
最近发现 golang 社区里出了一个新兴的微服务框架。看了一下官方提供的工具真的很好用,只需要定义好 .api 文件模版代码都可以一键生成,只需要关心业务;同时 core 中的工具极大减少了开发成本。
废话不多说,来看看这个微服务框架:go-zero
起源
聊聊...[2021/1/25]
创建并使用https证书
目录前言产生证书测试https服务器用tls加密tcp连接总结
前言
https要比http更安全些,因此可以配置Nginx服务器使用证书,客户端就会去第三方平台校验证书。
但是我们自己的服务器和客户端只是想要加个密而已,也没必要跑去第三方平台校验证书,省钱方便。
因此研究了一...[2021/1/25]
[系列] Go - 基于 GORM 获取当前请求所执行的 SQL 信息
前言
为了便于精准排查问题,需要将当前的请求信息与当前执行的 SQL 信息设置对应关系记录下来,记录的 SQL 信息包括:
执行 SQL 的当前时间;
执行 SQL 的文件地址和行号;
执行 SQL 的花费时长;
执行 SQL 的影响行数;
执行的 SQL 语句;
数据库组件使用的...[2021/1/25]
别再问我们用什么画图的了!问就是excalidraw
每次发 https: github.com/tal-tech/go-zero 相关文章时,都会有读者问我们用什么画图的。
这图什么工具画的呀?好看!
这个手绘风格真好看,用啥工具画的呀?
可不可以介绍下这个画图的工具?
诸如此类的问题,所以我决定写篇短文介绍下我们最常用的画图...[2021/1/25]
隐藏进程命令行参数,例如输入密码等高危操作
目录前言复写argv参数获取标准输入总结
前言
启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了。
因此很有必要研究如何隐藏命令行参数中的某些字段,当然做成配置文件也是极好的,但是无疑给运行程序增加额...[2021/1/25]
深入理解原子操作的本质
原文地址:https: blog.fanscore.cn/p/34/
引言
本文以go1.14 darwin/amd64中的原子操作为例,探究原子操作的汇编实现,引出LOCK指令前缀、可见性、MESI协议、Store Buffer、Invalid Queue、内存屏障,通过对CPU体系...[2021/1/25]
文件下载上传小工具
目录前言源码鉴赏食用方法
前言
虽然现在文件上传下载工具多如牛毛,比如http、ftp、sftp、scp等方案都可以用于文件传输,但都是需要安装服务器甚至客户端。
有一种场景是我只需要临时上传或下载一个文件,完了就不用服务器运行了,如果使用那些文件传输工具,不光安装麻烦,开启关闭...[2021/1/25]
模块一 Go语言基础知识-工作区和GOPATH
我们学习 Go 语言时,要做的第一件事,都是根据自己电脑的计算架构(比如,是 32 位的计算机还是 64 位的计算机)以及操作系统(比如,是 Windows 还是 Linux),从Go 语言官网下载对应的二进制包,也就是可以拿来即用的安装包。
随后,我们会解压缩安装包、放置到某个目录、...[2021/1/25]
企业项目迁移go-zero全攻略(二)
承接上篇:上篇文章讲到 go-zero 架构设计和项目设计。本篇文章接着这个项目设计,将生成的 app 模块 中 gateway 和 RPC 进行改造。废话不多说,让我们开始!
gateway service
gateway 中我做了一些自定义,在端请求我们后台接口情况下,虽然多数情况...[2021/1/25]
【Go从学会到学废】(一) 下载、安装、配置
一、下载
Go语言官方网站地址https: golang.google.cn/
Go语言中文网下载地址https: tudygolang.com/dl
二、安装
双击安装包,一直下一步就行
安装完成
三、配置
1.配置Go运行目录
2.配置GoP...[2021/1/18]
【Go从学会到学废】(零) Golang简介
Go 语言简介
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Ru Cox等人,并最终于2009年...[2021/1/18]
[labuladong算法小抄]如何k个一组反转链表
摘自labuladong算法小抄,使用go语言重新描述
之前的文章「递归反转链表的一部分」讲了如何递归地反转一部分链表,有读者就问如何迭代地反转链表,这篇文章解决的问题也需要反转链表的函数,我们不妨就用迭代方式来解决。
本文要解决「K 个一组反转链表」,不难理解:
...[2021/1/18]
Windows下如何玩转火热的go-zero
作者:阿啄debugIT
前言
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。
go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS...[2021/1/18]
GO 语言 error handing
Error handling and Go
https: blog.golang.org/error-handling-and-go
文章来源:刘俊涛的博客
欢迎关注公众号、留言、评论,一起学习。
_______________...[2021/1/18]
深入理解Go Context
在Go语言并发编程中,用一个goroutine来处理一个任务,而它又会创建多个goroutine来负责不同子任务的场景非常常见。如下图
这些场景中,往往会需要在API边界之间以及过程之间传递截止时间、取消信号或与其它请求相关的数据
谁是性能卡点呢?得通知它们任务取消了。
这...[2021/1/18]
我为什么要做开源项目 -- illuminant我为什么要做开源项目 -- illuminant
在做 illuminant 这个开源项目之前, 一直在寻找一种能够满足以下要求的Web接口开发方式:
能够避免编写各种繁琐的业务接口
能够避免编写业务接口的测试代码
业务变化时, 能够方便的调整数据库(不用为了兼容之前的接口而各种hack, 弄的数据库字段乱七八槽)
尽量避免写各种数据...[2021/1/18]
golang遍历时修改被遍历对象
目录前言遍历切片遍历map总结
前言
很多时候需要将遍历对象中去掉某些元素,或者往遍历对象中添加元素,这时候就需要小心操作了。
对于go语言中的一些注意事项我做了总结和示例,留下点笔记。
遍历切片
遍历切片时去掉元素,错误示例:
func main() {
arr...[2021/1/18]
[Go] golang中接口值(interface)的比较[Go] golang中接口值(interface)的比较
当写项目的过程中 , 有时候进行逻辑判断 , 如果没注意对两个interface类型的变量进行比较 , 会造成混乱问题
接口比较的时候 , 只有当这两个变量的动态类型 , 动态值都相等的时候 , 才是相等的
一个nil的interface类型 , 是包含下面俩的 , 动态类型和动态值...[2021/1/18]
[Go] golang中接口值(interface)与nil比较或指针类型之间比较的注意问题
注意问题 , 当对interface变量进行判断是否为nil时 , 只有当动态类型和动态值都是nil , 这个变量才是nil
下面这种情况不是nil
func f(out io.Writer) {
...do something...
if out != nil...[2021/1/18]
go调度: 第三部分-并发
前言
这个是用来讲述go调度器机制和特性的第三部分. 这个主要关注并发.
博客三部分的顺序:
1) go调度: 第一部分-操作系统调度
2) go调度: 第二部分-go调度器
3) go调度: 第三部分-并发
介绍
当我在解决...[2021/1/18]
Go基础及语法(一)
目录Go语言文件基础语法var变量3种变量声明方式:const常量iota实现枚举if判断与for循环判断与多种循环的方法基本数据类型
Go语言文件基础语法
package main 管理定义模块
import "fmt" 导入模块
/*
主函数
打印Hello,world!...[2021/1/18]
一道有趣的golang排错题
很久没写博客了,不得不说go语言爱好者周刊是个宝贝,本来想随便看看打发时间的,没想到一下子给了我久违的灵感。
go语言爱好者周刊78期出了一道非常有意思的题目。
我们来看看题目。先给出如下的代码:
package main
import (
"fmt"
"time...[2021/1/18]
Go基础及语法(二)
目录运算符算术运算符逻辑运算符位运算符赋值运算符比较运算符数组(Array)指针map
运算符
算术运算符
package main
import "fmt"
func main() {
a := 6
b := 2
c := a + b 加
d := a - b 减
...[2021/1/18]
从代码到部署微服务实战(一)
当前微服务已经成为服务端开发的主流架构,而Go语言因其简单易学、内置高并发、快速编译、占用内存小等特点也越来越受到开发者的青睐,微服务实战系列文章将从实战的角度和大家一起学习微服务相关的知识。本系列文章将以一个“博客系统”由浅入深的和大家一起一步步搭建起一个完整的微服务系统
该篇文章为...[2021/1/11]
Go修改文件名Go修改文件名
在生活中我们往往有这样的需求,就是从网上找的文件资源经常包含了一些无用信息,而且在它的子目录下也同样存在,如果我们手动一个个的修改的话会特别麻烦,也特别耗时,我们可以考虑把这件事交给计算机来做。
如下图,我的桌面有一个名为dir【我爱你】的目录,而且这个目录下的子目录和文件都包含【我爱...[2021/1/11]
Go语言开篇
Go语言
主要特性
自动垃圾回收
更丰富的内置类型
函数多返回值
错误处理
Go语言引入了3个关键字用于标准的错误处理流程,这3个关键字分别为defer、panic和recover
匿名函数和闭包
类型和接口
并发编程
goroutine
反射
没有泛型
语言的交互性
...[2021/1/11]
Go 自定义error错误Go 自定义error错误
原文链接: http: www.zhoubotong.site/post/17.html Go的error比较灵活.但是自身对error处理的机制有不太好用,我们可以自定义错误输出: 只要所有实现了 Error() 方法的对象都可以, 这里给个比...[2021/1/11]
go协程全局变量和局部变量
原文链接:http: www.zhoubotong.site/post/19.html
大家可能经常会用到类似如下代码片段:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
sli :...[2021/1/11]
[系列] Go - 常用签名算法的基准测试
签名验证是为了保证接口安全和识别调用方身份,同时还需要满足以下几点:
可变性:每次的签名必须是不一样的。
时效性:每次请求的时效性,过期作废。
唯一性:每次的签名是唯一的。
完整性:能够对传入数据进行验证,防止篡改。
签名规则大同小异,根据自己的业务情况进行制定即可。
签名过程中...[2021/1/11]
[GO] golang happen before 的保证原则
1) 单线程
2) Init 函数
如果包P1中导入了包P2,则P2中的init函数Happens Before 所有P1中的操作 main函数Happens After 所有的init函数 3) Goroutine
Goroutine的创建Happens Before所有此Gor...[2021/1/4]
Go语言基础
一、Go基础
标识符:
go语言中的标识符由字母数字和下划线(\_)组成,并且只能以字母和下划线(\_)开头
关键字:
关键字是指编程语言中预先定义好的具有特殊含义的标识符。关键字和保留字都不建议用作变量名。
Go语言有25个关键字:
关键字
break...[2021/1/4]
缓存原理与微服务缓存自动管理
抛开业务谈技术都是在耍流氓。—— Kevin Wan
为什么需要缓存?
先从一个老生常谈的问题开始谈起:我们的程序是如何运行起来的?
程序存储在 disk 中
程序是运行在 RAM 之中,也就是我们所说的 main memory
程序的计算逻辑在 CPU 中执行
来看一个最简...[2021/1/4]
Golang中将字节流转为Protobuf
在接入第三方数据流或接入物联网设备时,通常这些数据所上报的数据只是按照指定的协议所编码,上报的数据流也不够紧凑,如我们直接存储这类字节流数据也比较大。此时可以将字节流转为其他压缩格式的流,如Protobuf等;
??将字节流转为Protobuf流具体流程为:定义Proto文件、生成对应...[2021/1/4]
【Go】我与sync.Once的爱恨纠缠【Go】我与sync.Once的爱恨纠缠
原文链接: https: blog.thinkeridea.com/202101/go/exsync/once.html
官方描述 Once is an object that will perform exactly one action, 即 Once 是一个对象,它提供了保证某个...[2021/1/4]
[Go] GO中的字符串底层数据结构
一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据。和数组不同的是,字符串的元素不可修改,是一个只读的字节数组。每个字符串的长度虽然也是固定的,但是字符串的长度并不是字符串类型的一部分。由于Go语言的源代码要求是UTF8编码,导致Go源代码中出现的字符串面值常量一...[2020/12/28]
[系列] Go - 结构(struct) 实现 接口(interface)
在 Go 语言中,一个 struct 实现了某个接口里的所有方法,就叫做这个 struct 实现了该接口。
下面写一个 Demo 实现一下,先写一个 Study interface{},里面需要实现 4 个方法 Listen、Speak、Read、Write,然后再写一个 study ...[2020/12/28]
[系列] Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
咱们平时是这样使用 grpc.Dial 方法的,比如:
conn, err := grpc.Dial("127.0.0.1:8000",
grpc.WithChainStreamInterceptor(),
grpc.WithInsecure(),
grpc.WithBlo...[2020/12/28]
[系列] Go - 统一定义 API 错误码
改之前
在使用 gin 开发接口的时候,返回接口数据是这样写的。
type response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:...[2020/12/28]
Go操作Redis实战
目录安装Redis客户端连接redis基本指令Keys():根据正则获取keysType():获取key对应值得类型Del():删除缓存项Exists():检测缓存项是否存在Expire(),ExpireAt():设置有效期TTL(),PTTL():获取有效期DBSize():查看当前数...[2020/12/28]
一个20年技术老兵的 2020 年度技术总结
大家好!我是 go-zero 作者 Kevin。充满惊吓的 2020 快要过去了,看到掘金上的技术人年度征文,忍不住文字记录一下艰辛而又充满收获的 2020 ??
疫情开始
春节假期疫情突然升级,我们面临着自身平台的转型升级。作为晓黑板CTO,有两个重点工作:
保证大规模使用场景下平...[2020/12/28]
文件上传下载小工具
目录前言源码鉴赏食用方法
前言
虽然现在文件上传下载工具多如牛毛,比如http、ftp、sftp、scp等方案都可以用于文件传输,但都是需要安装服务器甚至客户端。
有一种场景是我只需要临时上传或下载一个文件,完了就不用服务器运行了,如果使用那些文件传输工具,不光安装麻烦,开启关闭...[2020/12/21]
Go语言开发环境搭建
一、Windows下安装
安装Go开发包
官网下载Go语言开发包,安装方法就是next,除了安装位置选择
安装目录选定一个好记的。尽量不要放在C盘中,除非你盘空间很大,完全够用。此路径需要自己记住,需要时可以很容易的找到。
安装完成后输入go version查看go...[2020/12/21]
如何自定义Kubernetes资源
目前最流行的微服务架构非Springboot+Kubernetes+Istio莫属, 然而随着越来越多的微服务被拆分出来, 不但Deploy过程boilerplate的配置越来越多, 且繁琐易错, 维护成本也逐渐增高, 那么是时候采用k8s提供的扩展自定义资源的方法, 将重复的templ...[2020/12/21]
[Go] 在gin框架gorm下查询一对多的数据
go-fly客服系统快捷回复功能 , 需要获取到分组名以及分组名下的回复内容
数据库的表结构是 , group_id是关联字段 , user_id是用户id:
CREATE TABLE `reply_group` (
`id` int(11) NOT NULL AUTO_INCR...[2020/12/21]