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...阅读全文

简书 2020-07-13 06:32:45 Purp1e

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

rabbitMQ - 实战教程-场景分析

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

Segmentfault 2020-07-16 18:32:33 特伦姝

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-17 17:32:32 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-16 14:32:33 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 前端收藏家

第53期 Flutter和桌面应用的最新进展 & Node进阶——之事无巨细手写Koa源码 & 为什么setTimeout有最小时延4ms

​Flutter 和桌面应用的最新进展 众所周知,在开发 Flutter 时,我们希望通过单一代码库支持 Flutter 在各类设备 (包括 iOS、Android、Windows、Linux、macOS 和 Web) 上的应用,并实现原生编译和游戏级别的视觉效果。Flutter 也已经在 Google 内部广泛用于 Assistant、Stadia、Cloud Search 以及 Blogger 等项目。在 Google 之外,字节跳动、Grab、Nubank 以及 MGM Resorts 等...阅读全文

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

Greenplum的PXF从源码到部署

一.背景 pxf适用于联邦数据的查询,支持多种数据源,如Hadoop、hive、关系数据库。支持多个异构数据源,并只查询数据源中少量数据集,而避免对数据集执行ETL操作。二.PXF架构 1.pxf server 部署在segment host主机上。2.segment通过rest接口和pxf server进行交互。3.pxf server和外部数据通过特定connector进行交互。 三.编译 1.源码(这里采用5.14版本)开源协议:Apache-2.0 Licensehttps://gith...阅读全文

简书 2020-07-12 00:32:42 sinwaj

API网关的设计思考

作为技术,尤其是后端开发,从一开始工作就一直会和nginx打交道。它已经是现代互联网企业的事实网关标准了。即使各个公司都自研了各种不同的网关,但是大多数还是会在请求最前端部署一层nginx。它的稳定性、可靠性以及性能方面的口碑都是非常非常好的。在我刚开始工作那时,就特别崇拜nginx。在这个网络的时代,nginx作为网关,它涉及到了非常多有深度的后端技术。比如: 网络协议 事件驱动的异步编程 高度可扩展的架构设计 高可用设计(热加载热更新) 恰当的数据结构设计 极致的性能优化 在我看来,ngin...阅读全文

golang领域模型-资源库

Repository 资源库通常标识一个存储的区域,提供读写功能。 通常我们将实体存放在资源库中,之后通过该资源库来获取相同的实体,每一个实体都搭配一个资源库。 如果你修改了某个实体,也需要通过资源库去持久化。当然你也可以通过资源库去删除某一个实体。 资源库对外部是屏蔽了存储细节的,资源库内部去处理 cache、es、db。 Repository解除了客户的巨大负担,使客户只需与一个简单的、易于理解的接口进行对话,并根据模型向这个接口提出它的请求。要实现所有这些功能需要大量复杂的技术基础设施,但...阅读全文

简书 2020-07-12 00:32:40 八叉树