1小时入门Go语言

为什么你要学Go语言 C语言比,复杂性低了很多。作者中有C语言的发明者。 与Python比,Go保持了接近C语言的性能, 它原生支持高并发 使用广泛,2020年3月TIOBE编程语言排行榜,Go已经冲进了前十了。著名的docker就是用Go写的 我为什么要学Go? 作为一个软件架构师,我不允许自己知识上有盲点。 环境准备 安装Go编译器 上官网 https://golang.google.cn/dl/ 在Featured downloads里根据你的操作系统下载最新版本。 双击打开,下一步下一步...阅读全文

简书 2020-04-23 10:32:55 乐享书

区块链之 RLP序列化

rlp序列化文档 RLP(Recursive Length Prefix,递归的长度前缀)是一种编码规则,可用于编码任意嵌套的二进制数据,特定的数据类型(例如:string,int等类型)则交给更高阶的协议处理。需要注意的是:int类型必须去掉首部0,且必须用大端模式表示。 编解码规则 编码规则 如果数据的长度是1个字节,并且它的值在[0x00, 0x7f] 范围之间,那么其RLP编码就是数据本身。即前缀为空,用前缀代表数据本身; 如果数据的长度是0-55字节,其RLP编码是前缀跟上(拼接)数据...阅读全文

简书 2020-04-23 10:32:55 孤独_漂流

【golang】slice底层函数传参原理易错点

切片底层结构 切片的底层结构主要包括引用数组的地址data,切片长度len与切片容量cap。 type SliceHeader struct { Data uintptr Len int Cap int } 以切片为参数调用函数 Go语言中,如果以切片为参数调用函数时,有时候会给人一种参数采用了传引用的方式的假象:因为 在被调用函数内部可以修改传入的切片的元素。 任何可以通过函数参数修改调用参数的情形,都是因为函数参数中传人了指针参数(只有底部结构有指针地址类型,都可以改变原值,因为虽然函数拷贝...阅读全文

简书 2020-04-23 10:32:54 dongzaidong

2020 区块链 golang 版本(2)

封面 今天我们依旧是理论,代码实现随后就来。 交易流程 如果没有交易那么比特币就失去意义,即使现在拥有一套比特币的源码,也无法再创造出一下个比特币。比特币货币发行也是离不来交易,这都说明交易在区块链中的重要性。 1.创建交易 创建一个地址,然后通过往这个地址发送比特币就完成一次交易。 2.广播交易(校验交易) 当交易完成,就会发送到网络中每一个节点,每一个节点在接收到交易后,需要先进行校验。校验签名和金额,其实只有校验通过该节点才会继续广播。每一个节点的校验都是独立,并不依赖于其他节点。那么如果...阅读全文

排序算法-归并排序、堆排序、插入排序、选择排序、冒泡排序 golang

1.冒泡排序(Bubble Sort) 冒泡排序也叫做起泡排序 执行流程 1 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置 ✓ 执行完一轮后,最末尾那个元素就是最大的元素 2 忽略 1 中曾经找到的最大元素,重复执行步骤 1,直到全部元素有序 for end := len(this.Array) - 1; end > 0; end-- { for begin := 1; begin <= end; begin++ { if this.ComWithIndex(begin, ...阅读全文

简书 2020-04-23 10:32:52 SteveKwok

排序算法-归并排序、堆排序、插入排序、选择排序、冒泡排序 golang

作者说明:郭玉乐 yulekwok@gmail.com 1.冒泡排序(Bubble Sort) 冒泡排序也叫做起泡排序 执行流程 1 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置 ✓ 执行完一轮后,最末尾那个元素就是最大的元素 2 忽略 1 中曾经找到的最大元素,重复执行步骤 1,直到全部元素有序 for end := len(this.Array) - 1; end > 0; end-- { for begin := 1; begin <= end; begin++ { ...阅读全文

简书 2020-04-23 10:32:52 移动端技术

CentOS7开启SSH并且安装Docker与oh-my-zsh

开启SSH 修改SSH配置文件/etc/ssh/sshd_config vi /etc/ssh/sshd_config 修改38行PermitRootLogin和65行PasswordAuthentication为yes 设置密码, 输入命令 passwd 重启SSH服务使修改生效 service sshd restart ##centos 7 安装zsh配置oh-my-zsh 安装: yum install -y zsh 设置默认shell: chsh -s /bin/zsh 安装Git: y...阅读全文

简书 2020-04-23 10:32:51 Ozixue

Golang的Context及其源码分析

简介 在Go服务中,对于每个请求,都会起一个协程去处理。在处理协程中,也会起很多协程去访问资源,比如数据库,比如RPC,这些协程还需要访问请求维度的一些信息比如说请求方的身份,授权信息等等。当一个请求被取消或者超时的时候,其他所有协程都应该立即被取消以释放资源。Golang的context包就是用来传递请求维度的数据、信号、超时给处理该请求的所有协程的。在处理请求的方法调用链中,必须传递context,当然也可以使用WithCancel, WithDeadline, WithTimeout或者W...阅读全文

Segmentfault 2020-04-25 19:32:32 Chaaaaaaaaaunce 等

MySQL的事务隔离级别是什么?

????我是平也,这有一个专注Gopher技术成长的开源项目「go home」 背景介绍 想必事务大家都已经非常熟悉了,它是一组SQL组成的一个执行单元,要么全执行要么全不执行,这也是它的一个特性——原子性。而事务的应用场景也非常广泛,最经典的就是转账问题,A给B打钱,不能出现A钱扣了B还没收到的状况,否则业务就乱套了。 事务的特性 于是呢,根据用户对这些场景的严苛要求,总结出了事务应该具备的四个特性,分别是原子性、一致性、隔离性、持久性,简称事务的ACID属性。 原子性 Atomicity,事...阅读全文

Segmentfault 2020-04-25 18:32:34 平也

golang rpc usage

# golang rpc usage ## 引言 这个文章不对RPC的底层实现做深入剖析,也不讲解RPC是什么~~ ## sample RPC三步走,方法模型、服务端搭建、客户端设计 ### model 我们以设计一个做加法运算的方法为例子 ``` type Math int //Math类 type Args struct { Ops1 int Ops2 int } func (m *Math) Add(args Args, reply *int) e...阅读全文

Go语言中文网 2020-04-22 18:21:32 antonlin

用golang实现一个简单的监控工具

背景是这样的,有一次我的服务器突然挂掉了,是由于cpu占用过高,但是我又不知道是哪个进程造成的。于是便想找一个监控工具来监控我的机器,我希望这个工具足够简单,没有复杂的配置,开箱即用,能够监控到当cpu负载过高时,发生的时间以及当时是什么进程造成这样的问题。很可惜,我并没有找到这样的工具(若有这样方便的工具请告知我),但我实在不想因此而给服务器上一套很重的监控系统。于是乎,我决定自己写一个工具。思路如下: 每隔一段时间就查看cpu占用率,当超过了设置的百分比,就触发记录; 调用top命令,按照c...阅读全文

51CTO博客 2020-04-21 19:51:08 wx5e1abbbb0a5e5

使用Go开发前端应用

前言 我们知道,在目前各种容器化盛行的时代,Go在开发容器化应用当中,成为大家首选的后端开发语言。目前,最流弊的容器化管理编排系统k8s,几乎每个大的云厂商都在使用。而k8s就是Google使用go语言开发出来的。而现在,go已经可以用来开发前端语言了,有种“一切可以用go语言实现的功能,最终都会用go语言实现”的感觉。这篇文章主要用来介绍,用go语言如何入门前端开发。 go开发环境安装 首先,你需要先下载安装一下go。下载地址:golang.org/ 安装其实很简单,这里就不说了,安装完成之后...阅读全文

掘金 2020年04月21日 zhongzhong05

并发访问 slice 如何做到优雅和安全?

抛出问题 由于 slice/map 是引用类型,golang函数是传值调用,所用参数副本依然是原来的 slice, 并发访问同一个资源会导致竟态条件。 看下面这段代码: package main import ( "fmt" "sync" ) func main() { var ( slc = []int{} n = 10000 wg sync.WaitGroup ) wg.Add(n) for i := 0; i < n; i++ { go func() { slc = append(slc,...阅读全文

掘金 2020年04月22日 hantmac

Go gRPC进阶-go-grpc-middleware使用(八)

<div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown"> <h3 id="前言">前言</h3> <p>上篇介绍了gRPC中TLS认证和自定义方法认证,最后还简单介绍了gRPC拦截器的使用。gRPC自身只能设置一个拦截器,所有逻辑都写一起会比较乱。本篇简单介绍<a href="https://github.com/grpc-ecosystem/go-grpc-middleware">go-grpc-midd...阅读全文

Go语言中文网 2020-04-22 11:44:06 939496716

记一次奇妙的go-protobuf包升级之旅

今天聊一个最近升级go的protobuf的故事。过程很是奇妙(曲折)???? 前两天,一个项目的dependabot提示包github.com/golang/protobuf 可以从V1.3.5升级到V1.4.0 Round One 本以为直接升级就行,但是没过CI,是发现旧版(V1.3.5)测试代码用了pb生成代码的XXX_Size()方法计算消息大小 在新版(v1.4.0)里panic了 我们来看下他们有啥不同: 为简化,我们proto文件用官方的helloworld.proto 通过以下方...阅读全文

掘金 2020年04月22日 newbmiao

Go语言(十四)日志项目

日志项目 日志库需求分析 日志库产生的背景 程序运行是个黑盒 日志是程序之外的表现 通过日志,可以知道程序的健康状态 日志打印的级别 Debug:日志最详细,对程序的影响比较大 Trace: 用来追踪问题 Info: 比较重要的信息,比如访问日志 Warn:警告日志,表明程序存在问题 Error: 错误日志,运行程序时发生的错误 Fatal: 严重错误日志 日志存储的位置 直接输出到控制台 打印到文件里 直接打印到网络中,比如kafka 为什么使用接口 定义日志库的标准或者规范 易于扩展 利于程...阅读全文

51CTO博客 2020-04-22 11:00:53 wx5b285b48ed74e

golang 如何解析url中的多个参数

以下面的url为例,这个例子实际上是《go语言圣经》中7.7章节http.handler的一个例子。我们需要更新袜子socks的价钱为16,鞋子shoes的价格为100。我们把它们写到同一个url中。对于这种一个url有多个参数的情况该如何处理呢? http://localhost:8000/update?item=socks&price=16&item=shoes&price=100 使用如下的代码来查看请求参数。req.URL.Query()的返回值是Values类型,这个类型实际上是typ...阅读全文

简书 2020-04-21 17:36:02 yufeifly

Golang 高并发编程For循环中使用Goroutine最容易犯的错误

file Golang goroutine是Go语言强大的特性之一,合理的利用它才能发挥最大的价值 1、经调查 发现初学者一般会犯以下错误使用goroutine func goroutineRun(values []int) { for value := range values { go value.test() } } 或者使用闭包调用 func goroutineRun(values []int) { for value := range values { go func() { fmt....阅读全文

简书 2020-04-21 17:35:47 开发者阿俊