螺旋矩阵

链接:https://leetcode-cn.com/problems/spiral-matrix 题目: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 示例1.png 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 示例2.png 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4...阅读全文

简书 2021-03-15 18:33:31 Comeon已被注册

Slice

slice的预留分配空间 通过 append 对数组进行追加的时候,并不是会直接分配内存扩容。而是会先检查是否存在预留分配空间,有的话可以直接往里写入,当预留分配空间使用完后,会进行扩容。 事实上很难预估数组使用的最大长度,所以golang遵循扩容规则: 元素小于1024,则直接double,直至满足 元素大于1024,则单次扩容1.25倍,即四分之一,直至满足 slice的切片机制 切片[]int和数组[3]int,是不同的数据结构 在切片中,包含指向数组的指针,当前长度及容量。在没有扩容的前...阅读全文

简书 2021-03-15 18:33:27 czaOrz

protoc go插件编写之三 (自定义选项)

选项 [options] .proto文件中的各个声明【message呀,service呀等等】可以使用许多选项进行注释。选项不会改变声明的整体含义,但可能会影响在特定上下文中处理声明的方式。 可用选项的完整列表在google/protobuf/descriptor.proto中定义。 一些选项是文件级别的, 只能在顶级内容区, 而不能在任何 message, 或enum,或service中定义。一些是消息级别的, 只能定义在message内, 一些是字段级别的,只能定义在filed内。选项也可...阅读全文

简书 2021-03-15 18:33:27 癞痢头

手撸golang GO与微服务 Saga模式之5

缘起 最近阅读<<Go微服务实战>> (刘金亮, 2021.1) 本系列笔记拟采用golang练习之 Saga模式 saga模式将分布式长事务切分为一系列独立短事务 每个短事务是可通过补偿动作进行撤销的 事务动作和补动作偿都是幂等的, 允许重复执行而不会有副作用 Saga由一系列的子事务“Ti”组成, 每个Ti都有对应的补偿“Ci”, 当Ti出现问题时Ci用于处理Ti执行带来的问题。 可以通过下面的两个公式理解Saga模式。 T = T1 T2 … Tn T = TCT Saga模式的核心理念是...阅读全文

简书 2021-03-15 18:33:27 老罗话编程

sql导入工具自动化

golang 上代码 可以按照数据库和sql文件 编译后可直接执行 import ( "fmt" "os/exec" "strings" ) //command是执行的shell,注意如果出错,string(out)的报错内容更详细 func Exec_Shell(command string) (string, error) { cmd := exec.Command("/bin/sh", "-c", command) out, err := cmd.Output() if err != ni...阅读全文

简书 2021-03-15 18:33:27 Alex灬Liu

手撸golang GO与微服务 Saga模式之5

缘起最近阅读<<Go微服务实战>> (刘金亮, 2021.1)本系列笔记拟采用golang练习之Saga模式saga模式将分布式长事务切分为一系列独立短事务每个短事务是可通过补偿动作进行撤销的事务动作和补动作偿都是幂等的, 允许重复执行而不会有副作用Saga由一系列的子事务“Ti”组成, 每个Ti都有对应的补偿“Ci”, 当Ti出现问题时Ci用于处理Ti执行带来的问题。 可以通过下面的两个公式理解Saga模式。 T = T1 T2 … Tn T = TCT Saga模式的核心理念是避免使用长期持...阅读全文

Segmentfault 2021-03-18 15:32:35 ioly

golang字符串国际化

# gostrings 这是一个go字符串国际化库,根据xml资源文件自动生成go文件,便于字符串统一管理。 ## 背景 * 代码中对字符串硬编码不方便管理。 * 有多语言的需求。 ## 功能特点 * 字符串资源统一放在strings文件夹中,便于管理。 * xml配置字符串,便于复用、管理、多语言对比。 * 编译前用户调用命令,自动生成go文件,运行时效率更好 ## 安装 执行go get github.com/xingliuhua/gostring...阅读全文

Go语言中文网 2021-03-15 10:48:34 xiaoxiaogo

go中sync.Mutex源码解读

什么是sync.Mutexsync.Mutex是Go标准库中常用的一个排外锁。当一个goroutine获得了这个锁的拥有权后, 其它请求锁的goroutine就会阻塞在Lock方法的调用上,直到锁被释放。 var (mu sync.Mutexbalance int) func main() {Deposit(1)fmt.Println(Balance())} func Deposit(amount int) {mu.Lock()balance = balance + amountmu.Unloc...阅读全文

51CTO博客 2021-03-15 09:47:16 小中01

go中sync.Mutex源码解读

什么是sync.Mutexsync.Mutex是Go标准库中常用的一个排外锁。当一个goroutine获得了这个锁的拥有权后, 其它请求锁的goroutine就会阻塞在Lock方法的调用上,直到锁被释放。 var (mu sync.Mutexbalance int) func main() {Deposit(1)fmt.Println(Balance())} func Deposit(amount int) {mu.Lock()balance = balance + amountmu.Unloc...阅读全文

51CTO博客 2021-03-15 09:42:49 小中01

微服务多行查询之缓存策略

在上一篇 缓存设计的好,服务基本不会倒 介绍了db层缓存,回顾一下,db层缓存主要设计可以总结为:缓存只删除不更新行记录始终只存储一份,即主键对应行记录唯一索引仅缓存主键值,不直接缓存行记录(参考mysql索引思想)防缓存穿透设计,默认一分钟,防止缓存击穿和雪崩不缓存多行记录前言在大型业务系统中,通过对持久层添加缓存,对于大多数单行记录查询,相信缓存能够帮持久层减轻很大的访问压力,但在实际业务中,数据读取不仅仅只是单行记录,面对大量多行记录的查询,这对持久层也会造成不小的访问压力,除此之外,像秒...阅读全文

Segmentfault 2021-03-18 15:32:35 kevinwan

写了一个 gorm 乐观锁插件

前言最近在用 Go 写业务的时碰到了并发更新数据的场景,由于该业务并发度不高,只是为了防止出现并发时数据异常。所以自然就想到了乐观锁的解决方案。实现乐观锁的实现比较简单,相信大部分有数据库使用经验的都能想到。UPDATE `table` SET `amount`=100,`version`=version+1 WHERE `version` = 1 AND `id` = 1需要在表中新增一个类似于 version 的字段,本质上我们只是执行这段 SQL,在更新时比较当前版本与数据库版本是否一致。...阅读全文

Segmentfault 2021-03-17 20:32:34 crossoverJie

go 使用pprof 排查内存泄露

go 是自带gc的语言,会自动管理内存,不用像C/C++那样,需要程序员手动释放内存,不用手动管理内存,就能少掉很多头发 go的GC会自动管理内存,但是这不代表go程序就不会内存泄露了。 go常见产生内存泄露的原因就是goroutine没有结束,简单说就是goroutine 被阻塞了,这样就会导致goroutine引用的内存不被GC回收,也就导致了内存写了。当然产生内存泄露的原因还有别的,只是暂时我还没有遇到。不管什么原因产生的内存泄露,最终都是因为异常的引用,导致该被回收的内存没有被gc 回收...阅读全文

51CTO博客 2021-03-14 16:41:19 mb604dca6061f71

手撸golang GO与微服务 Saga模式之4

缘起最近阅读<<Go微服务实战>> (刘金亮, 2021.1)本系列笔记拟采用golang练习之Saga模式saga模式将分布式长事务切分为一系列独立短事务每个短事务是可通过补偿动作进行撤销的事务动作和补动作偿都是幂等的, 允许重复执行而不会有副作用Saga由一系列的子事务“Ti”组成, 每个Ti都有对应的补偿“Ci”, 当Ti出现问题时Ci用于处理Ti执行带来的问题。 可以通过下面的两个公式理解Saga模式。 T = T1 T2 … Tn T = TCT Saga模式的核心理念是避免使用长期持...阅读全文

Segmentfault 2021-03-17 17:32:33 ioly

go好用的类型转换第三方组件

作者:三十三重天博客:http://www.zhouhuibo.club通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施。Cast介绍Cast是什么?Cast是一个库,以一致和简单的方式在不同的go类型之间转换。Cast提供了简单的函数,可以轻松地将数字转换为字符串,将接口转换为bool类型等等。当一个明显的转换是可能的时,Cast会智能地执行这一操作。它不会试图猜测你的意思,例如,你只能将一个字符串转换为int的字符串表示形式,例...阅读全文

Segmentfault 2021-03-17 16:32:32 happlyfox

聊聊golang的clean architecture项目结构

序本文主要研究一下golang的clean architecture项目结构clean architecureclean architecture定义了四层结构,最内层是entities(enterprise business rules),再往外是use cases(application business rules),接着是interface adapters(比如controller、presenters、gateways),最外层是frameworks & drivers(比如web、...阅读全文

51CTO博客 2021-03-14 18:37:45 mob604756e4006a

Go 的容器数据结构

前言Java 内置了丰富的容器类,不同容器用于处理各种业务场景。 Go 虽然语言设计上和 Java 有很多相似的地方, 但原生并没有支持太多容器类的数据结构,只有 map 和 slice。标准库的 container package 对容器数据结构做了扩展,支持堆(Heap)、链表(LinkedList) 和循环链表(Circular List)3个容器。容器熟悉 C++ 和 Java 对容器应该都有清晰的了解, 它是现代编程实践中不可或缺的一部分,具有多种形式, 一般被描述为具有操作容器内容的...阅读全文

51CTO博客 2021-03-14 18:49:16 mob604756e43790

2021-03-14

centos 8 安装Prometheus+ Grafana Prometheus基于go语言开发,安装前需要先安装go语言环境安装包下载地址为:https://golang.org/dl/。如果打不开可以使用这个地址:https://golang.google.cn/dl/。 解压到/usr/local下tar -C /usr/local/ -zxvf go安装包包名 将 /usr/local/go/bin 目录添加至PATH环境变量: 最后检查是否安装成功 接着安装Prometheus 解压...阅读全文

说说golang的对象池sync.Pool

网上关于sync.Pool的源码分析的文章比较多,本文的重点不在于源码分析,而在于简单易懂的介绍一下sync.Pool的内部实现方式,如果想要了解更多,可以看下参考中的文章 本文基于Go1.14 参考:https://www.cnblogs.com/qcrao-2018/p/12736031.html 先看下Pool的整体结构: 整个结构实际上可以简化为每一个PoolLocal实现了一个双向列表,其中每个节点用数组的方式来实现了循环列表。 双向链表是为了可不限长度的扩展。 双向链表中每个节点都保...阅读全文

简书 2021-03-14 19:32:36 迪克dike

双链表 哈希 go 实现lFU 缓存算法

什么是LFULFULeast frequently used, 基于访问的频次和时间来淘汰数据。比如缓存满了,使用LFU算法,可以淘汰掉访问频次最少且访问时间靠后的元素。leetcode也有相应的题目,只要实现Get, Put接口即可。本文除了实现Get, Put, 还实现了GetIterator和GetAll接口,接口如下func (lfu *LFUCache) Get(key interface{}) interface{} func (lfu *LFUCache) Put(key inte...阅读全文

51CTO博客 2021-03-14 18:01:48 mob604756e4006a

我的 Java 转 Go 之路

从毕业到现在已经接近两年了,在这段时间里,我日常开发都是使用的 Java,因为大学自学的是 Java,然后毕业找到的工作也是做 Java 开发的。现在做 Go 其实也没多久,但还是想把自己的一些经历和学习经验都记录下来,要是能帮到你就更好了哦!其实 Go 在这两年一直都挺火的,毕竟是 Google 的亲儿子,又凭借着 docker 和 k8s 这两大杀器,自身又有一些相对于其他语言的优势(例如并发处理、通道),而且近几年 Go 的工作岗位也在慢慢增加,一些大厂都逐渐使用 Go 做为开发甚至主力开...阅读全文

Segmentfault 2021-03-17 15:32:39 roseduan