详解 Go 语言中的 time.Duration 类型

长久以来,我一直抓狂于 Go 标准库中的 Time 包,我的抓狂来自于两个功能,一是捕获两个不同时间段之间间隔的毫秒数,二是将一个用毫秒表示的连续时间段与预先定义的时间段进行比较。这听起来很简单,没错,确实如此,但它的确让我抓狂了。 在 Time 包中,定义有一个名为 Duration 的类型和一些辅助的常量: ```go type Duration int64 const ( Nanosecond Duration = 1 Microsecond = 1000 * ...阅读全文

2018-03-17 23:10:54 swardsman
阅读:77743 评论:1

[系列] Go - 基于 GORM 获取当前请求所执行的 SQL 信息

前言为了便于精准排查问题,需要将当前的请求信息与当前执行的 SQL 信息设置对应关系记录下来,记录的 SQL 信息包括:执行 SQL 的当前时间;执行 SQL 的文件地址和行号;执行 SQL 的花费时长;执行 SQL 的影响行数;执行的 SQL 语句;数据库组件使用的是 GORM。思路1、在执行 SQL 前,设置开始执行时间(计算执行时长会用到);2、在执行 SQL 后,第一,获取当前请求的上下文,为什么获取上下文,因为需要从上下文中获取本次请求信息,第二,获取 SQL 执行前的时间,用来计算执...阅读全文

2021-01-24 10:47:21 mb600be85f1b06a
阅读:1261 评论:0

使用Viper读取Nacos配置(开源)

## 一、前言 目前Viper支持的Remote远程读取配置如 etcd, consul;目前还没有对Nacos进行支持,本文中将开源一个Nacos的Viper支持库, 开源地址在文章的最下方. 实现这个仓库的主要目的是为了,最终集成到我们的yoyogo框架中, https://github.com/yoyofx/yoyogo 。 ## 二、什么是Viper [Viper](github.com/spf13/viper)是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作...阅读全文

2021-04-30 12:34:53 yoyofx
阅读:2875 评论:0

gRPC: 使用 Buf 快速编译 protobuf 文件

![](https://oscimg.oschina.net/oscnet/up-6a3296fe36e519ac01732e962df22728978.png) ## 介绍 使用过 gRPC 的用户都应该知道,protocol buffer 文件需要使用相关的命令行,把 *.proto 文件编译成 *.go 文件。 根据不同需要,会使用到不同的命令行文件。以 Go 语言为例,我们需要大致如下几个命令行文件。 | 工具 | 介绍 | 安装 | | ---- | ---- |...阅读全文

2021-12-16 02:50:45 pointgoal
阅读:1897 评论:0

是的没错,我就是抄的。一个像 Laravel 那样好用的 go语言的 SQL 查询构造器

# Goal/QueryBuilder Goal 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它可以用于支持大部分数据库操作,并与 Goal 支持的所有数据库系统完美运行。并且大量参考了 `Laravel` 的查询构造器设计,你几乎可以在这个库找到所有与 `Laravel` 对应的方法。 Goal 的查询构造器实现了类似 PDO 参数绑定的形式,来保护您的应用程序免受 SQL 注入攻击。因此不必清理因参数绑定而传入的字符串。查询构造器会返回你想要的 SQL 语句以及绑定...阅读全文

2022-01-20 23:36:47 qbhy
阅读:1199 评论:10

Go语言原子操作及互斥锁,有什么区别呢?

**文章来自微信公众号:[Go语言圈](https://mp.weixin.qq.com/s/cIs9kH-H50mq3sB7S7Kt8g "Go语言圈")**   原子操作就是不可中断的操作,外界是看不到原子操作的中间状态,要么看到原子操作已经完成,要么看到原子操作已经结束。在某个值的原子操作执行的过程中,CPU绝对不会再去执行其他针对该值的操作,那么其他操作也是原子操作。 Go语言中提供的原子操作都是非侵入式的,在标准库代码包`sync/atomic`中提供了...阅读全文

2022-01-23 22:17:14 goCenter
阅读:1262 评论:1

Go 语言项目开发实战 从零到实战到部署

很多公司的技术架构都在往云原生架构演进,而绝大部分的云原生核心项目是用 Go 来构建的,例如:Kubernetes、Docker 等。同时,国内腾讯、阿里等一线大厂也都在积极转 Go。伴随着 Go 的火热,各个公司对 Go 研发工程师的需求也越来越旺盛。因此,很多开发者都在学习或使用 Go 来开发项目。但是,很多初学者在学习 Go 项目开发时,经常会面临一系列问题:Go 项目开发涉及的技能点太多,不知道如何去构建其中的技能点看了很多资料,还是没有掌握最佳实践,总也写不出优雅的代码学了很多 Go ...阅读全文

阅读:2520 评论:0

Go项目部署实战教程[纯新手文] [开源十年第8节]

一个深漂近10年的程序员立志用未来10年时间去维护一个项目,这个项目的功能未定,用到什么就做什么,遇到什么就写什么。其主要目的有二,一为加深自己的技术深度,二为其他学习者提供参考。 感兴趣的可以跟着我一起做这个项目,不收费、不套路、人间自有真情在。 1、[《开源十年》项目源自于脑海中的一个想法](https://mp.weixin.qq.com/s?__biz=MjM5NTIxNjAwNQ==&mid=2448099718&idx=1&sn=e112ce9848c7ec72a162f...阅读全文

2022-03-31 08:54:26 kaiyuan10nian
阅读:2674 评论:0

GlideIM - Golang 实现的高性能的分布式 IM

GlideIM 是一款真正的**完全开源**, Golang 实现的高性能分布式 IM 服务, 有完整的安卓 APP 示例, JAVA SDK, Web 端示例, 持续更新迭代中. GlideIM 支持单实例, 分布式部署. 支持 WebSocket, TCP 两种连接协议, 内置 JSON, ProtoBuff 两种消息交换协议, 并支持添加其他协议, 消息加密等. 还实现了智能心跳保活机制, 死链接检测, 消息送达机制等功能. 这个项目自 2020 年中旬开始, 三端均开发由我一...阅读全文

2022-04-19 19:05:06 dengzi
阅读:2929 评论:4

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/bosima/ylog/releases/tag/v1.0.3 工程实践中,我们往往还需要对日志进行采集,将日志归集到一起,然后用于各种处理分析,比如生产环境上的错误分析、异常告警等等。在日志消息系统领域,Kafka久负盛名,这篇文章就以将日志发送到Kafka来实现日志的采集;同时考虑到日志分...阅读全文

2022-05-18 10:18:05 bosima
阅读:1819 评论:0

先写API文档还是先写代码?

## 代码未动,文档先行 其实大家都知道 API 文档先行的重要性,但是在实践过程中往往会遇到很多困难。 程序员最讨厌的两件事:`1. 写文档,2. 别人不写文档`。 大多数开发人员不愿意写 API 文档的原因是`写文档短期收益远低于付出的成本`,然而并不是所有人都能够坚持做有`长期收益`的事情的。 作为一个前后端分离模式开发的团队,我们经常会看到这样的场景:前端开发和后端开发在一起热烈的讨论“你这接口参数怎么又变了?”,“接口怎么又不通了?”,“稍等,我调试下”,“你再试试.....阅读全文

阅读:1823 评论:0

【5-1 Golang】实战—Go程序分析利器pprof

  不知道你有没有遇到这种情况,Go服务总是是不是的响应非常慢排查发现所有的依赖还都挺快,感觉是Go服务自身慢又不知道怎么慢在哪里;或者说请求甚至完全没响应,Go服务明明在正常运行,请求去哪儿了呢?或者说Go服务内存占用总是居高不下,内存都浪费在哪呢?这些问题都可以通过pprof分析,本篇文章将为你演示如何基于pprof分析程序性能(问题)。 ## pprof概述   为什么pprof可以帮助我们分析Go程序性能呢?因为它可以采集程序运行时数据...阅读全文

2022-10-20 09:43:18 tomato01
阅读:2787 评论:0