go闭坑指南

内容 1 切片与数组 2 defer 3 make与new 4 方法与函数 1 切片和数组 数组和结构体都是值变量,即:如果把一个数组变量和结构体变量赋值给另外的变量,是拷贝了一份值,两者的修改互不影响; 2 . go通过切片生成另外一个切片时,两个切片共享同一个底层数组,对其中一个修改元素时,两个都会改变; 例如: a=[]int{1,2,3} b:=a[:] b[0] = 2 printLn(a[0]) —》输出:2 特别注意初始化切片时,如果指定了切片的长度,go会用nil来填充这个切片,...阅读全文

简书 2020-07-13 06:32:47 酷酷码农

Golang学习笔记-defer关键字学习

defer学习 很多现代的变成语言中都会有defer关键字,Go语言的defer会在当前函数或是方法返回之前执行传入的函数,它会经常被用于 关闭文件描述符,关闭数据库链接和解锁资源。 作为一个编程语言中的关键字,defer 的实现一定是由编译器和运行时共同完成的, 不过在深入源码分析它的实现之前我们还是需要了解 defer 关键字的常见使用场景以及使用时的注意事项。 使用defer的最常见的场景就是在函数调用结束的时候完成一些收尾工作,比如在defer中回滚数据库 func createPost...阅读全文

简书 2020-07-13 06:32:47 LegendGo

Go+Wails学习笔记(二)一键编译运行脚本

前言 上篇说到Go+wails的Hello-World程序的环境配置、编译和运行的结果,但是懒人总是会想办法减少自己的工作量,经过研究,可以编写cmd批处理脚本来快速完成编译+运行的过程。 纯Go语言项目 可以使用Goland自带的Go Build模板,按照类似图中的方式配置,生成的可执行文件在./build中。 image 也可以自己编写CMD,比如build.cmd <pre spellcheck="false" class="md-fences md-end-block ty-contai...阅读全文

IPFS星际文件系统

Web3.0是什么?Filecoin文件币是什么?星际文件系统是什么?它的目标是什么?它真的能够取代现有的云服务器存储模式吗? image 以下仅是个人学习笔记,欢迎探讨指正。 Web3.0 Web1.0是Readable。 只读的单纯的静态新闻和博客网站,单向信息服务。 Web2.0是Readable+Writable。 数据是可读可写的,双向交互的,既可以传递信息,也可以实现功能。 Web3.0是Readable+Writable+Trustable。 可读可写可信任的,不仅仅是信息,更涉及...阅读全文

简书 2020-07-13 06:32:43 zhyuzh3d

利用Go优越的性能 设计与实现高性能企业级微服务网关

(毕设项目)Vue+Go前端后端一体化 企业级微服务网关项目 (完整无密)【点击下载】不管是基于Java、Python、PHP,还是基于Go的网站,网站流量越高,对网关性能要求越高,尤其是亿级流量网站中,网关更是核心,它作为接入层承载了流量转发、负载均衡、服务限流、熔断降级等功能。作为后端开发者,掌握网关技术,是后端架构能力的分水岭,懂得设计网关才能知道架构精妙所在,本课程带你手把手设计并实现一个通用型前端+后端一体的微服务网关项目,同时利用Go语言本身的性能优势,打造网关的优越性能,提升自身硬...阅读全文

简书 2020-07-13 06:32:40 卡巴斯基_65ab

rabbitMQ - 实战教程-场景分析

作者太懒了,总觉得做出来就会了,看过也会了 为什么要使用mq ? 解耦+异步: 抗压: RabbitMQ基础知识讲解RabbitMQ的安装RabbitMQ工作模式 - 发送端和接收端封装 RabbitMQ - 五种工作模式 - 简单模式和work工作模式RabbitMQ - 五种工作模式 - 订阅模式RabbitMQ - 五种工作模式 - 路由模式RabbitMQ - 五种工作模式 - 主题模式 问题一:RabbitMQ - 消息持久化和手动应答ack手动应答,确认使用了消息,否则下次还可以继续...阅读全文

Segmentfault 2020-07-12 23:32:38 特伦姝

golang | Go语言入门教程——结构体初始化与继承

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分。 在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么给结构体定义函数,还有函数接收者的使用。今天我们来学习一下结构体本身的一些使用方法。 初始化 在golang当中结构体初始化的方法有四种。 new关键字 我们可以通过new关键字来创建一个结构体的实例,这种方法和其他语言比较类似,这样会得到一个空结构体指针,当中所有的字段全部填充它类型对应的零值。比...阅读全文

掘金 2020年07月12日 承志

使用 GVM 工具管理 Go 版本

友情提示:此篇文章大约需要阅读 5分钟5秒,不足之处请多指教,感谢你的阅读。 订阅本站 在 Go 项目开发中,团队要保持开发版本一致,怎么能够快速的安装及部署并且切换 Go 环境,在这里推荐一款工具 GVM ( Go Version Manager ),它可以便捷切换与自定义 Go Path 、Go Root 等参数,是一款实打实的多版本安装及管理利器。 GVM,类似于ruby 中的 RVM,java 中的 jenv(国产),可用于方便管理 Go 的版本,它有如下几个主要特性: 管理 Go 的多...阅读全文

Segmentfault 2020-07-13 07:32:38 Meng小羽

go http 包练习

参见: 下载包 设置代理 妈的,下载包有时能下,有时候就卡住。 手动安装包 Go 的 http 包详解 https://golang.org/pkg/net/http/ 几个官方的例子,拿来练习一下,wc, 体会到了 go http 包的强大之处: 下面是一些例子,来主要讲解下面的几个函数 FileServer FileServer (DotFileHiding) FileServer (StripPrefix) Get Handle HandleFunc Hijacker ListenAndS...阅读全文

简书 2020-07-12 15:33:09 天空蓝雨

Golang学习笔记-调度器学习

Golang的调度器 谈到Golang的调度器,绕不开的是操作系统,进程和线程这些概念。多个线程是可以属于同一个进程的并共享内存空间,因为多线程 不需要创建新的虚拟空间,所以不需要内存管理单元处理的上下文的切换,线程之间的通信也是基于共享内存进行的,同重量级的进程相比 线程显得比较轻量 虽然线程比较轻量,但是线程每一次的切换需要耗时1us左右的时间,但是Golang调度器对于goroutine的切换只要在0.2us 左右 Go 语言的调度器通过使用与 CPU 数量相等的线程减少线程频繁切换的内存...阅读全文

简书 2020-07-12 15:33:06 LegendGo

今日实践:利用Grafna给你的Loki添加日志告警

正文共: 2085字 预计阅读时间: 6分钟 做过运维的同学都知道,服务的可观测性是一个非常重要的渠道,能够让我们掌控线上服务运行时的状态。一个好的监控系统,其价值在于一旦出现故障能够让我们运维的同学能够快速收到服务异常的通知以及定位问题。也就是我们常说的告警的两大衡量指标,即实时性和有效性。 那么,今天小白请出第一个云原生里负责日志存储的便是Loki。这里可能有同学就说了:"我的日志存储和分析一直用elasticsearch也可以啊,为什么要用Loki"。 别急,等小白慢慢说道说道 首先Lok...阅读全文

简书 2020-07-12 15:33:06 云原生小白

Go语言学习 - Understanding Lock

Introduction 我们从零开始想象mutex是怎么上锁的, 假设我们规定一种游戏规则: "你必须把这个数字从0变成1". 改成的人算赢, 没改成的人就等着. 等刚刚赢的人再把数字改回0, 这样你就有机会再抢一把了. 这就是mutex上锁的基本原理. 再进一步的, 有如下两个细节: 现在有两个线程并行, 他们出手的时候都看到这个是0, 过会儿他们都把这个数字改成1, 这个锁被上了两回, 而且他们都认为自己是对的: "我看到的时候它的确是0呀?我错在哪儿了?" 第一个人用完锁了, 其他人如何...阅读全文

掘金 2020年07月11日 xiaohan.liang?

go语言在solid原则中的优势

[读书笔记]SOLID原则 SOLID原则是用来做什么的? solid原则主要是告诉我们如何把数据和函数组织成为类,以及如何把这些类连接起来成为程序。 PS.这里的类不一定是面向对象的,只是表示数据和函数的一种分组。 solid原则核心是描述软件的中层结构目标,致力于实现: 是软件更容易被扩展。 使软件更容易被理解。 使软件更容易被复用。 PS.还流传这一些其他版本的SOLID原则,比如加入了迪米特法则。 SOLID原则指的是什么? SOLID原则是指五个设计原则,每个设计原则的首字母拼起来,刚...阅读全文

Segmentfault 2020-07-13 07:32:38 code

python Sphinx 生成简洁大方的文档 2020/6/6 13:28

[toc] Sphinx 简介 Sphinx 是一种工具,是一个有趣 python 的第三方库,它允许程序员以纯文本格式编写文档,Spninx 可以轻松生成各种格式的输出,比如 html,pfd,等等。纯文本的文档方便使用版本管理工具进行跟踪。纯文本文档对不同系统之间的协作者也非常有用,纯文本是当前可以采用的最便捷的格式之一,不然 markdown 格式咋那么火呢,不是没有道理的。 程序员最讨厌的两件事: 自己写代码文档 别人的代码没文档 正经写文档确实麻烦,为啥麻烦呢?因为很长时间程序员写代码...阅读全文

简书 2020-07-12 00:32:56 奇伢云存储

golang 垃圾回收(一)概述 2020年6月3日

概述 GC & RC 垃圾回收的由来 逃逸分析的由来 垃圾回收,怎么实现? 什么样的是垃圾? 怎么把垃圾找出来? 内存屏障 概述 现代编程语言一般都有垃圾回收功能。这个能极大的减轻程序员的负担,并且减少大部分场景的问题。要知道,c 语言里面最常见的就是踩内存,内存泄漏,野指针等问题。golang 作为一个新新语言,自然垃圾回收功能少不了的。当前 golang 的垃圾回收基于的理论是三色标记法,并且通过合理的使用内存屏障技术,把垃圾回收的 stw 几乎消灭(旁白:这个正确的理解,并不是没有 stw...阅读全文

简书 2020-07-12 00:32:51 奇伢云存储

golang 垃圾回收(二)屏障技术 2020/6/3 10:44

什么是屏障? golang 涉及到的三个写屏障 原理分析 示例分析代码 先看逃逸分析 写屏障真实的样子 什么是屏障? 承接上篇概述,下面讨论什么是写屏障?先说结论: 内存屏障只是对应一段特殊的代码 内存屏障这段代码在编译期间生成 内存屏障本质上在运行期间拦截内存写操作,相当于一个 hook 调用 golang 涉及到的三个写屏障 插入写屏障 删除写屏障 混合写屏障(旁白:其实本质上是两个,混合写屏障就是插入写屏障和删除写屏障的混合) 这三个名词什么意思?区别在哪里? 最本质的区别就是:我们说了,...阅读全文

简书 2020-07-12 00:32:49 奇伢云存储

golang 垃圾回收(三)插入写屏障 2020年6月14日

并发的垃圾回收 STW 安全的回收 并发的垃圾回收 插入写屏障 伪代码 对象丢失的必要条件 写屏障是怎么解决问题? 并发的垃圾回收 golang 语言设计的根本性追求就是高并发,低延迟,所以golang 的垃圾回收也是持续在优化。golang 的垃圾回收是并发垃圾回收设计,业务运行和回收器运行并发,这种设计的初衷是降低垃圾回收停顿时间。 之前提过一个例子,如果你要安全的实现回收垃圾,那么简单的就是回收垃圾的时候,把所有的业务操作都停止,这个术语是STW(stop the world)。下面用一些...阅读全文

简书 2020-07-12 00:32:47 奇伢云存储

golang 垃圾回收(四)删除写屏障 2020/5/27 13:00

接上一篇 golang 垃圾回收的梳理,这篇讲删除写屏障,golang 的内存写屏障是由插入写屏障到混合写屏障过渡的。虽然 golang 从来没有直接使用删除写屏障,但是混合写屏障却用到了删除写屏障的思路。 删除写屏障:也叫做基于其实快照的解决方案(snapshot-at-the-begining)。故名思义,就是在开始 gc 之前,必须 STW ,对整个根做一次起始快照。当赋值器(业务线程)从灰色或者白色对象中删除白色脂针时候,写屏障会捕捉这一行为,将这一行为通知给回收器。 这样,基于起始快照...阅读全文

简书 2020-07-12 00:32:44 奇伢云存储

第52期 你不知道的Web Workers & JavaScript 变量对象详细图解 & 5000字的React-native源码解析

替代 webpack?带你了解 snowpack 原理,你还学得动么 近期,随着 vue3 的各种曝光,vite 的热度上升,与 vite 类似的 snowpack 的关注度也逐渐增加了。目前(2020.06.18)snowpack 在 Github 上已经有了将近 1w stars。 snowpack 的代码很轻量,本文会从实现原理的角度介绍 snowpack 的特点。同时,带大家一起看看,作为一个以原生 JavaScript 模块化为核心的年轻的构建工具,它是如何实现“老牌”构建工具所提供的...阅读全文

简书 2020-07-12 00:32:42 前端收藏家