[Golang]从0到1写一个web服务(上)
学生时代曾和几个朋友做了一个笔记本小应用,当时我的角色是pm + dba,最近心血来潮,想把这个玩意自己实现一遍,顺便写一篇文章记录整个过程。 img 笔者的职业目前是一个后端程序员,最常用的语言是Golang,恰好Golang自带的的net/http包非常方便,这次就用Golang写这个服务。首先打开我心爱的GoLand,New一个Project,给项目起一个酷炫的名字。 image.png 接着写个Hello, world。同时为方便项目管理,引入git这个版本控制工具来管理代码。随着一发g...阅读全文
golang: work pool
1. 使用goroutine和channel实现一个计算int64随机数各位和的程序 开启一个goroutine循环生成int64类型的随机数,发送到jobChan 开启24个goroutine 从jobChan取出随机数并计算各位各位数的和,将结果发送到resultChan 主goroutine从resultChan取出结果并打印到终端输出 package main import ( "fmt" "math/rand" "sync" "time" ) type Job struct { val...阅读全文
golang sort包
1.sort.Search(n, func(k int) bool) 描述:利用二分查找在[0:n)之间找到满足 func(k int) bool 为true的最小索引值 源码如下: func Search(n int, f func(int) bool) int { // Define f(-1) == false and f(n) == true. // Invariant: f(i-1) == false, f(j) == true. i, j := 0, n for i < j { h ...阅读全文
Go的并发机制:线程模型
目录 一、 Go的并发机制:线程模型 二、 Go的并发机制:goroutine、channel(待续) 最近在使用Golang开发一个项目,也是第一次使用Go,属于边学边用,刚开始使用觉得Go非常简洁易学,项目开发到阶段,需要用涉及到并发相关的知识了,如果是其他语言感觉没什么,多线程就完了。但是Go主打的就是它的并发机制,goroutine的名字在未使用Go的时候已经知道了。 由于我的项目是完全处于个人兴趣,没有人会催进度,所以我觉得在使用goroutine之前,还是需要学习一下,读懂里面的实现...阅读全文
微服务中台技术解析之微服务-捉虫记
Biz-UI 团队在核心业务系统的开发过程中,将具有共性的功能模块抽象出来,逐渐完成了中台的构建,为业务逻辑提供了强有力的基础组件支撑。其中分布式追踪系统作为一个重要的组成部分,为监控服务之间的调用、定位和调试线上问题,提供了有力的支撑。本文将详细剖析 FreeWheel Biz-UI 团队从 0 到 1 构建和改进全链路分布式追踪系统的过程。 1、微服务 - 捉虫记 小志所在的技术部门刚刚对臃肿的单体应用完成了拆解,推行微服务理念,将之前杂糅得不可开交的代码按业务模块拆分成一个一个的微服务。随...阅读全文
golang调用shell命令(实时输出, 终止等)
背景 是这样的,最近在研究一个定时任务系统的改造,可能有点像jenkins做到的那种吧。 可以输入shell命令,也可以执行py脚本等等,相比之前来说,也要能够及时停止! 但是遇到了这么个问题,golang执行py脚本的时候获取不到脚本的输出。 首先来看看go里面怎么运行shell脚本吧,我比较喜欢执行全部命令。 普通用法(一次性获取所有输出) package main import ( "fmt" "os/exec" ) func main() { Command("ls") } // 这里为...阅读全文
如果使用Kvass+Thanos监控十万容器的大集群
PrometheusPrometheus依靠其强劲的单机性能,灵活的PromSQL,活跃的社区生态,逐渐成为云原生时代最核心的监控组件,被全球各大产商用于监控他们的核心业务。然而,面对大规模监控目标(数千万series)时,由于原生Prometheus只有单机版本,不提供集群化功能,开发人员不得不通过不断增加机器的配置来满足Prometheus不断上涨的内存。 ThanosThanos是社区最为流行的Prometheus HA方案,其可以将多个Prometheus数据汇总,去重,得到全局的数据视...阅读全文
把vim打造成适配python和golang的庆亮级编辑器
#!/bin/bash if [ whoami != root ]thenecho "Please login as root to continue :)"exit 1fi if [ ! -d /home/tools/ ];thenmkdir -p /home/toolselserm -rf /home/tools && mkdir -p /home/toolsfi #Install python3yum -y install epel-release wget && sudo yum -y ...阅读全文
macOS终端命令行配置网络代理
[toc] 前言 在下载一些需要vpn下载公司内网的源码或者认证时,必不可少的需要使用代理,与普通的网页及应用代理不同,在mac的终端中并没有开启默认的代理模式,所以需要手动进行设置,设置分为两部分:设置终端代理、设置其他IED 代理等 准备工作与环境 在终端设置代理之前,需要准备相应的环境。 1、代理服务器:诸如socks协议或者http协议的服务端,一般由公司运维已经搭建好。 2、代理客户端:本地协议转换及端口开放的客户端,一般默认端口号为1080。 二、配置过程 建议直接配置bash ba...阅读全文
golang中的rpc包用法
RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样。 我所在公司的项目是采用基于Restful的微服务架构,随着微服务之间的沟通越来越频繁,就希望可以做成用rpc来做内部的通讯,对外依然用Restful。于是就想到了golang标准库的rpc包和google的grpc。 这篇文章重点了解一下golang的rpc包。 介绍 golang的rpc支持三个级别的RPC:TCP、HTTP、JSONRPC。但Go的RPC包...阅读全文
今年最火的 Golang 云原生开源项目,可能就是它了!
来源 | 阿里巴巴云原生公众号在互联网与云计算技术发展的日新月异过去五年中,应用研发人员对效率与敏捷的极致追求,终于把业界带进了一个崭新的云原生时代。而云原生理念的迅速普及,火了 Docker,红了 Kubernetes ,也间接让一个编程语言成为了如今服务端的“当家花旦”。不消多讲,这位在云原生领域里正红的发紫的“角儿”,就是 Golang。不过,正如同 “PHP 不一定是最好的编程语言”一样,Go 语言本身也不是“万能钥匙”。Go 语言之所以能够乘上云原生这趟高速列车,究其原因,更多是与它如...阅读全文
Go语言快速入门笔记(二):并发编程部分
1.协程是轻量级的线程的理解(1)java里的Thread默认为1M,Groutine的Stack初始化为2K (2)一个thread对应一个kernel space,groutine则是多对多 2.第一个简单的多线程案列 for i := 0; i < 10; i++ { go func(i int) { println(i) }(i) } }3.如何做到多线程累加同一数据的安全性func TestGroutine1(t *testing.T) { count := 0 mutex := sy...阅读全文
给大家丢脸了,用了三年golang,我还是没答对这道resp.Body.Close() 引发的内存泄漏题
给大家丢脸了,用了三年golang,我还是没答对这道内存泄漏题。问题package main import ( "fmt" "io/ioutil" "net/http" "runtime" ) func main() { num := 6 for index := 0; index < num; index++ { resp, _ := http.Get("https://www.baidu.com") _, _ = ioutil.ReadAll(resp.Body) } fmt.Printf(...阅读全文
区块链司法可信存证,版权维护应用落地
区块链存证技术作为一种无中心的同步联动与存证技术,其保管和固定的电子数据将散布于不同电脑或终端上的各相关节点。因此,区块链存证技术具有共时性、透明性、集体参与性、可追溯性,以及极难被篡改的特点。 1.诉讼:现在我们很多行为都是在互联网上进行的,当然了,这一方面涉及的很多,比如证券、第三方支付系统、电子商务等等,一旦在这其中产生了纠纷,就可以用区块链司法可信存证来构建办案平台,大大提升了服务的效率。 2.版权:这个算是区块链技术最常用的一个场景。它可以对侵权的结果来进行取证;又可以根据它的侵权...阅读全文