golang template使用自定义函数

golang template使用自定义函数 需求来源是这样的:如何拿到一个slice的最后一个元素 在模版里面,我们可以获取slice的任意元素,只要给定下标即可,例如: package main import ( "os" "log" "text/template" ) const templateText = ` Friends : {{.Friends}} 1st Friend : {{index .Friends 0}} 2nd Friend : {{index .Friends 1}...阅读全文

简书 2020-03-01 15:32:45 CodingCode

leetcode_86

Golang: 思路:搬运我的题解 这题在第一次做的时候嫌麻烦,直接用数组解决了,时间百分百,空间百分之五,还是有些不满意的,就用双指针重新写了下,然后来到了双百效率 思路在代码里有提及,就不再详述了,简单说一下这里替换的含义 1->4->3->2->5->2, x = 3 发生替换的时候 p1 p2 p3 1->4->3->2->5->2 这里怎么替换,就是: 先从原链表里提取出p3, 然后将p3插到p1及p1后面的元素之间, 更新p1,更新p3 代码如下: func partition(he...阅读全文

简书 2020-03-01 15:32:45 淳属虚构

leetcode_131

Golang: 思路:DP预处理,递归加回溯,这题要想效率不错,还是有些难度的 代码如下: func partition(s string) [][]string { if len(s)==0{ return [][]string{{}} } dp:=make([][]int,len(s)) for k,_:=range dp{ dp[k]=make([]int,len(s)) } for i:=len(s)-1;i>=0;i--{ for j:=i;j<len(s);j++{ if i==j{...阅读全文

简书 2020-03-01 15:32:44 淳属虚构

leetcode_147

Golang: 思路:既然是链表的插入排序,那就按照题意来,做插入排序 代码如下: func insertionSortList(head *ListNode) *ListNode { if head==nil||head.Next==nil { return head } temp1:=head res:=head temp2:=head.Next temp1.Next=nil for temp2!=nil{ //预留下一个点 tNext:=temp2.Next temp2.Next=nil ...阅读全文

简书 2020-03-01 15:32:43 淳属虚构

3 分钟告诉你为什么要学 Go

任何一门语言的出现是都是为了解决问题。 Go 语言就为解决 Google 团队在开发过程中遇到其他语言不能解决的问题或难以解决的问题而诞生。 而我们学习 GO 语言的原因,就是 GO 语言所解决的这些问题。 一、开发效率 我们知道动态语言或者解释性语言比如 PHP 与 Python 没有编译代码的过程,编写程序后可以快速查看结果,这样的语言开发效率非常之高,代价是动态语言没有静态语言的类型安全特性以及编译带来的静态化过程,所以为了保证项目稳定不得不编写大量的测试来避免运行时产生的 Bug。 这也...阅读全文

简书 2020-03-01 15:32:43 OceanLaern

golang nsq消费者时间过长,防止与nsqd服务断开连接

在使用nsq消费时,发现如果HandleMessage方法执行时间超过2分钟,在此方法运行完后,就会 抛出 IO error - EOF 错误。测试发现,当超过2分钟时,nsqadmin 后台显示的节点未连接。在查看github Issues时,有人提出过,于是做了测试,发现一切正常。(在实际开发中,不建议把慢执行放在消费服务里,因为HandleMessage方法不执行完,是不会消费下一个队列消息的) func (m *MyHandler) HandleMessage(msg *nsq.Mess...阅读全文

简书 2020-03-01 15:32:42 _老七

go get -u google.golang.org/grpc被墙的解决方法

使用golang开发grpc的应用时,需要安装grpc包。grpc包有将近200M,由于国内墙的原因,使用go get命令基本都是拉取失败。就算用vpn翻墙拉取也很慢。这里把构件docke镜像时需要的grpc依赖文件打包,方便以后使用。 正常构建的dockerfile如下 FROM golang:alpine AS builder RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories RU...阅读全文

简书 2020-03-01 15:32:42 cnwinds

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 ru...阅读全文

简书 2020-03-01 15:32:41 张凯强_zkqiang

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 ru...阅读全文

掘金 2020年03月01日 张凯强zkqiang

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 ru...阅读全文

Segmentfault 2020-03-04 09:32:33 张凯强

深入理解Golang之context

context是Go并发编程中常用到一种编程模式。本文将从为什么需要context,深入了解context的实现原理,以了解如何使用context。 作者:Turling_hu来源: 掘金 原文链接: https://juejin.im/post/5e5268... 前言 这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用context。 为什么需要context 在并发程序中,由于超时...阅读全文

Segmentfault 2020-03-03 21:32:36 Kevin

一文带你了解如何使用 Redis 实现分布式锁

锁是我们在设计和实现大多数系统时绕不过的话题。一旦有竞争条件出现,在没有保护的操作的前提下,可能会出现不可预知的问题。而现代系统大多为分布式系统,这就引入了分布式锁,要求具有在分布各处的服务上保护资源的能力。而实现分布式锁,目前大多有以下三种方式:使用数据库实现。使用 Redis 等缓存系统实现。使用 Zookeeper 等分布式协调系统实现。其中 Redis 简便灵活,高可用分布式,且支持持久化。本文即介绍基于 Redis 实现分布式锁。SETNX 语义使用 Redis 实现分布式锁,根本原理...阅读全文

简书 2020-03-01 03:32:55 Java天天

Go 为什么这么“快”

本文主要从 Go 调度器架构层面上介绍了 G-P-M 模型,通过该模型怎样实现少量内核线程支撑大量 Goroutine 的并发运行。以及通过 NetPoller、sysmon 等帮助 Go 程序减少线程阻塞,充分利用已有的计算资源,从而最大限度提高 Go 程序的运行效率。本文主要介绍了 Go 程序为了实现极高的并发性能,其内部调度器的实现架构(G-P-M 模型),以及为了最大限度利用计算资源,Go 调度器是如何处理线程阻塞的场景。怎么让我们的系统更快随着信息技术的迅速发展,单台服务器处理能力越来...阅读全文

简书 2020-03-01 03:32:53 即将秃头的Java程序员

【初来就送书?】Gin + Vue 实战教学,看完视频还能抽奖!

Hi,各位简书的小伙伴。我们是 OceanLearn 教学团队,第一次来到简书宝地进行视频的推广~这次,我们录制了关于 Golang 语言 Web 框架 【Gin】 与前端框架【Vue】的实战教学视频。同时我们也推出了【关注B站账号+评论视频】即可参与抽奖得图书的活动,欢迎各位简书的小伙伴参与~你问送什么?当然是送的 Go 经典图书拉~ 【Go程序设计语言】豆瓣评分 8.9~绝对是 Go 语言学习必备书籍,好啦,废话不多说,传送门在下方~视频传送门:https://www.bilibili.co...阅读全文

简书 2020-03-01 03:32:49 OceanLaern

创建kafka并使用

kafka系列分为两个篇幅,分别是实用篇,讲使用命令和一些使用中会遇到的概念名词,理论篇,讲kafka为了实现高可用和高性能做了哪些努力。这篇我们从搭建开始,然后用kafka脚本去发送和接受信息,最后用go语言展示在代码之中怎么使用。 大家可以在kafka官网上面下载最新包。要是嫌弃网速太慢的话可以用一下我这个包,我下载了传到了百度云,提取码是:klei。 使用的系统是linux,要是没有服务器,我特别推荐windows10的linux子系统,在上面也可以运行,好用又舒服,这里我用了一个测试虚拟...阅读全文

简书 2020-03-01 03:32:48 yellowone

Clean Architecture实践:如何设计业务层(Golang实现)

The Clean Architecture Clean Architecture背后的核心想法其实很简单:“非核心”应该依赖于“核心”。 怎么算“核心”?对于一个应用来说,最最核心的当然就是业务数据(及其结构)和业务逻辑。这些信息应该属于一个模块(也就是常说的Service层),在实现上,应该自成一体,对数据持有化(用什么数据库和什么driver)、用户交互(是通过RESTful接口还是说本身是某个桌面应用的一部分)、或者如何与其它服务模块如何交互(消息系统?HTTP请求?)等技术有任何假定和...阅读全文

简书 2020-03-01 03:32:48 桥头堡2015

go package name convention 命名规范

package names package命名规范: 简短与清晰: good: time, list, http;bad:computeServiceClient, priority_queue 尽量使用单字(sigle-word)包名,如果非得使用多字包名(multiple-word)规范:直接多字连接作为包名。如:stringset, helloworld 可理解性的缩写:strconv(string convention)syscall,fmt,用一些比较高频易懂的词 尽量不用通用词:go...阅读全文

简书 2020-03-01 03:32:47 cdz620

effective go

代码格式formatting 目的:规范代码的统一格式,做成语言内置的特性,相当于一个权威的代码格式规范,促进社区使用统一格式规范。 一些规范: 缩进(indentation):默认使用tab 代码行的长度:无行长度限制,可以将一行分成多行,通过缩进来表示多选 花括号:相对于c与java,需要较少的花括号 注释 comment 类型: block comment: /* */ line comment: // 注释只能使用纯文本,包含复杂语法,比如html,md之类的不支持。 注释以整个句子为一...阅读全文

简书 2020-03-01 03:32:47 cdz620

(一) Tendermint 简介及与Fabric对比

一、什么是Tendermint Tendermint 是支持拜占庭容错的区块链引擎,包含区块链共识引擎(Tendermint Code)和通用应用程序接口(Tendermint Application BlockChain Interface, 也称作为 Tendermint ABCI). 基于Tendermint 我们可以很方便的进行公链和联盟链的开发。 以广为人知的加密货币比特币为例。 比特币是一个加密货币区块链,每个节点都维护一个经过完全验证的未支出交易输出(UTXO)数据库。 如果有人想...阅读全文

简书 2020-03-01 03:32:47 卡戎li