Go 1.14 正式发布

Go 在 2019 年发布了Go 1.12与Go 1.13。Go 1.13 的大部分变化在于工具链、运行时和库的实现。时隔半年,Go 1.14 正式发布。 和之前的版本一样,该版本保留了 Go 1 兼容性的承若,这个版本的大部分更新在工具链 、运行时库的性能提升方面。总的来说,还是在已有的基础上不断优化提成,大家期待的泛型还没有到来,下面一块看看新的变化吧。重大的更新如下: Go 命令中的 Module 支持现在可以投入生产 嵌入具有重叠方法集的接口 defer 性能改进 goroutine 支...阅读全文

掘金 2020年03月04日 aoho

图解kubernetes中api聚合机制的实现

kubernetes中apiserver的设计无疑是复杂的,其自身内部就包含了三种角色的api服务,今天我们一起来臆测下其内部的设计,搞明白aggregator、apiserver、apiExtensionsServer(crd server)的设计精要 1.从web服务到web网关到CRD apiserver还是蛮复杂的,今天我们只讨论其kube-aggregator/apiserver/apiextensions三者架构上的设计,而不关注诸如请求认证、准入控制、权限等等 1.1 最基础的R...阅读全文

掘金 2020年03月04日 8小时_2020

通过例子学习 Go 和 Rust ---- 类型与泛型

这两门语言都是强类型的,不过rust由于其特有的Trait机制,使得咱可以在编写函数的时候不指定参数类型,取而代之只指定类型所具有的Trait。go语言中一般就只针对某种类型来编写函数。 咱举个例子,对比一下rust和go标准库中是如何比较bytes的。 Go func Compare(a, b []byte) int { l := len(a) if len(b) < l { l = len(b) } if l == 0 || &a[0] == &b[0] { goto samebytes }...阅读全文

Segmentfault 2020-03-06 15:32:32 Tericoder

go+typescript+graphQL+react构建简书网站(二) 编写GraphQL API

项目地址:https://github.com/unrotten/hello-world-web 开始之前,关于GraphQL的介绍 二话不说,先贴官网:https://graphql.org 如图所见,GraphQL可以分为三个部分:一是对数据的描述,称为类型系统,通过定义不同的type,来描述数据之间的关系。这其实很容易理解,可以直接类比为我们再Go中定义的struct,不同的是,在GraphQL中,每一个字段都是一个type。二是请求;在之前,我们定义了三个type,query,matut...阅读全文

Segmentfault 2020-03-06 14:32:35 云燕

github开发者免费申请JetBrains全家桶License(可无限续约)

最近在准备写几行Golang代码,当打开goland忽然提示了一个激活码过期的状态。 才发现,之前的JetBrains的License已经过期了。 为了不再花钱买,突然想到了github的开源项目是可以申请JetBrains全家桶免费试用套餐License的。(当然某宝也是能买到的,作为开源作者,还是支持开源社区更好一些哈~) 一、首先我们打开申请链接 https://www.jetbrains.com/shop/eform/opensource?product=ALL 二、我们来填写项目信息 ...阅读全文

简书 2020-03-04 15:33:28 刘丹冰Aceld

golang通过结构体的继承、重写封装的一个高复用的公用查询

前言 在golang开发中会发现,没有泛型会写大量重复代码,例如:对数据库表分页查询时,大多情况是表名不同,查询条件与查询字段不同,正常情况下,就得写多份重叠代码。本文主要是对过结构体继承(其实是组合),模拟泛型(用interface类型),来封装业务层的公用查询逻辑。 其中会用到gorm查询时不固定定条件查询,可以看我另一篇博文go语言对gorm不固定条件查询封装 思路 既然要公用,那就得定义一个baseservice.go文件,别的业务继承basebaseservice.go 继承后,如何重...阅读全文

简书 2020-03-04 15:32:55 _老七

从go最佳Web框架对比开喷

最近准备写go的项目实战系列文章 昨天写第一篇go语言web框架对比,在收集资料时发现好多框架对比就是把各框架自己的介绍复制了过来,还美其名曰深度对比 如果不加思考的把两款护肤品说明书上的功效说明做对比,李佳奇这样卖货,你信不信会被打死 下面对此类文章一一列举 google关键词 go web框架 搜索结果 Golang(五)最佳Web框架对比- 掘金 6 款最棒的Go 语言Web 框架简介- Go语言中文网- Golang中文 ... 最好的6个Go语言Web框架_网络_CSDN研发技术-CS...阅读全文

简书 2020-03-04 15:32:54 黑客大白

同步异步,阻塞与非阻塞

导言 最近在研究Mosn的IO模型的时候涉及到了netpoll这种经典的golang模型,最终暴露粗goroutine-per-connection的开发模式供开发者使用,而goroutine-per-connection又是基于I/O多路复用和goroutine构建的高性能原生网络模型。在研究I/O多路复用时,《UNIX网络编程》中,归纳总结了五种I/O模型,包括同步异步I/O: 阻塞 I/O (Blocking I/O) 非阻塞 I/O (Nonblocking I/O) I/O 多路复用 ...阅读全文

简书 2020-03-04 15:32:53 小刘要学习

github开发者免费申请JetBrains全家桶License(可无限续约)

最近在准备写几行Golang代码,当打开goland忽然提示了一个激活码过期的状态。 才发现,之前的JetBrains的License已经过期了。 为了不再花钱买,突然想到了github的开源项目是可以申请JetBrains全家桶免费试用套餐License的。(当然某宝也是能买到的,作为开源作者,还是支持开源社区更好一些哈~) 一、首先我们打开申请链接 https://www.jetbrains.com/sho... 二、我们来填写项目信息 三、你的邮箱就会收到回复的一封邮件 大致意思如下: 感...阅读全文

Segmentfault 2020-03-06 13:32:35 aceld

Go Web 编程--超详细的模板库应用指南

模板库介绍 如果你有过Web编程的经验,那么或多或少都听说过或者使用过模板。简而言之,模板是可用于创建动态内容的文本文件。例如,你有一个网站导航栏的模板,其中动态内容的一部分可能是根据当前用户是否登录显示登录还是退出按钮。 Go提供了两个模板库text/template和html/template。这两个模板库的使用方式是相同的,但是html/template包在渲染页面模板时会在后台进行一些编码以帮助防止造成代码注入(XSS 攻击)。 因为两个模板库都使用相同的接口,因此本文中介绍的所有内容均...阅读全文

掘金 2020年03月04日 kevinyan

Go Web 编程--应用 ORM

Go Web 编程--应用 ORM 上篇文章中我们在使用的开发环境中增加了MySQL容器,然后介绍了使用database/sql标准库结合数据库驱动包进行数据库操作的方法。不过它们是相对偏底层的软件包。实际开发经常会使用一些在它的基础上封装的 ORM库。ORM的查询使用起来更简单些,语法更富表达力。这篇文章我们主要探究下面这些内容。 gorm的基本用法 如何管理ORM的使用 如何合理规划项目目录结构 安装gorm包 gorm是一个出色的,对开发人员友好的 Golang ORM 库,其支持的特性包...阅读全文

简书 2020-03-04 11:32:50 KevinYan_a990

leetcode_128

Golang: 思路:看了下大佬的回答,用map实现,O(n),但是无论是时间复杂度的效率还是空间复杂度的效率都很低,不知道为什么 代码如下: func longestConsecutive(nums []int) int { mp:=make(map[int]int) res:=0 for _,v:=range nums{ if mp[v]==0{ mp[v]=mp[v-1]+mp[v+1]+1 if mp[v]>res { res=mp[v] } mp[v-mp[v-1]]=mp[v] mp...阅读全文

简书 2020-03-04 11:32:48 淳属虚构

leetcode_130

Golang: 思路:这题虽然在并查集范畴内,但做法更近于广度优先搜索,和烂橘子一致,需要改变不被围绕区域内'O'的值,以防止重复的查询 代码如下: func solve(board [][]byte) { if len(board)<=2||len(board[0])<=2 { return } var stack [][]int for i:=0;i<len(board);i++{ if board[i][0]=='O' { board[i][0]='U' stack=append(stac...阅读全文

简书 2020-03-04 11:32:47 淳属虚构

左旋转字符串

题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 思路 1.这道题可以在n的索引位置做分割,将分割所得的前半部分与后半部分反向拼接即可。 Java代码实现 class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n)+s...阅读全文

简书 2020-03-04 10:32:56 youzhihua

翻转单词顺序

题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。 思路 1.首先将原字符串根据“ ”进行分割,将分割后的数组倒序相加,中间用“ ”分割。 2.最后将最终的字符串尾部多余的“ ”去掉。 Java代码实现 class Solution { public String reverseWords(String s) { String[] word...阅读全文

简书 2020-03-04 10:32:55 youzhihua

golang 源码剖析(1): 运行初始化和包初始化

初始化中主要对命令行参数整理,环境变量设置,以及内存分配器,垃圾回收器,并发调度器的工作现场准备 基本概念 传统并发使用的是:多线程共享内存,go 使用的是CSP(communicating sequential processes)并发模型,以通信的方式来共享内存. go 中使用GPM方式来实现CSP,每个M关联一个P,,goroutine关联哪个P是无法控制的,P中维护了一个goroutin的列表,并用循环的方式取出一个G来关联上P来执行程序. // The main concepts ar...阅读全文

Golang:关于寻址的一些问题

Go 语言有点像 C 语言,它有指针,用 * 标识一个指针,用 & 标识一个地址,但 Go 语言的指针比较简单,没有指针运算。 字面量不可寻址 先来看一段程序代码: package main import "fmt" type Programmer struct {} func (p *Programmer) FindBug() { fmt.Println("Yes, you are") } func Create() Programmer { return Programmer{} } fun...阅读全文

简书 2020-03-04 10:32:53 Rollover

golang sync/singlefligh源代码阅读

singleflight.Group用途 这么说吧,singleflight.Group是大并发下面的一把利器。一个请求如果访问1s,同样的请求来了500路,如果你的机器只能支持100路,处理完请求要5s。如果用上这个库,同样的机器,只要1s,是不是很犀利。 原因:singleflight.Group会缓存那一瞬间的并发请求(相同key值),这和普通的缓存还不一样。 一个简单的demo 这个例子使用var group singleflight.Group 缓存https://http2.gola...阅读全文

简书 2020-03-04 10:32:51 疯狂的小蚂蚁go

golang File 对象封装

今天拿 Go 完成一个小操作,把一个多层的目录下的 jpg 文件全部检索出来,但是发现 go 原生的文件 api 做起来很麻烦 go 的文件可能需要用到以下的包 io io/ioutils os path path/filepath 而且go 很蛋疼的地方在于,没有一个结构体用来统一的描述 文件/文件夹,所以当想要完成 “读取这个文件夹下的所有文件”,甚至递归遍历所有文件这样的逻辑的时候,会特别无措 回想起之前使用java 这种面向对象的语言的时候,只需要通过一个 File 类就可以实现这个逻辑...阅读全文

简书 2020-03-04 10:32:49 君佑

Golang 基础(三)

变量 声明变量的一般形式是使用关键字 var,例如: var indentifier type 例如: var a int var b bool var str string 或者 var ( a int b bool str string ) 当一个变量被声明后,系统自动对它进行赋值: int 为 0 float 为 0.0 bool 为 false string 为 空字符串 指针 为 nil 所有的内存在Go中都是经过初始化的,比如: 定义一个int类型的变量power,如果我们不给变量p...阅读全文