Go中使用加密算法的方法

Go中使用加密算法的方法

哈希算法  md5 128bit,16字节 如:md5 (“hello world!”) = fc3ff98e8c6a0d3087d515c0473f8677 // 32位16进制数字 func Test(t *testing.T) { //方法一 str := "hello world!" has := md5.Sum([]byte(st...
使用教程 615
Golang中实现简单的Http Middleware

Golang中实现简单的Http Middleware

本文主要针对Golang的内置库 net/http 做了简单的扩展,通过添加中间件的形式实现了管道(Pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件的形式添加一些功能到管道中,一次请求和响应在管道中的执行过程如下 首先, 我定义了三个测试的中间件 Middleware1,2,3 如下 func Middleware1(n...
使用教程 579
Go 协程超时控制的实现

Go 协程超时控制的实现

Go 协程超时控制 Select 阻塞方式 Context 方式 先说个场景: 假设业务中 A 服务需要调用 服务B,要求设置 5s 超时,那么如何优雅实现? Select 超时控制 考虑是否可以用 select + time.After 方式进行实现 这里主要利用的是通道在携程之间通信的特点,当程序调用成功后,会向通道中发送信号。没调用成功前,通道会阻塞。...
使用教程 581
Go语言指针使用分析与讲解

Go语言指针使用分析与讲解

普通指针 和C语言一样, 允许用一个变量来存放其它变量的地址, 这种专门用于存储其它变量地址的变量, 我们称之为指针变量 和C语言一样, Go语言中的指针无论是什么类型占用内存都一样(32位4个字节, 64位8个字节) package main import ( "fmt" "unsafe" ) func main() { var p...
使用教程 597
Go语言异常处理案例解析

Go语言异常处理案例解析

异常处理 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常 golang中提供了两种处理异常的方式 一种是程序发生异常时, 将异常信息反馈给使用者 一种是程序发生异常时, 立刻退出终止程序继续运行 打印异常信息 Go语言中提供了两种创建异常信息的方式 方式一: 通过fmt包中的Errorf...
使用教程 565
golang中tar压缩和解压文件详情

golang中tar压缩和解压文件详情

查看官方文档,官方自带的演示: // 官方演示 package main import ( "archive/tar" "bytes" "fmt" "io" "log" "os" ) func main() { // 将若干文件写入压缩文档 // 这边源文件是直接写在代码里哈,然后...
使用教程 612
聊聊Golang的语言结构和变量问题

聊聊Golang的语言结构和变量问题

一、语言结构和注意事项 package main // 声明 main 包,表明当前是一个可执行程序 import "fmt" // 导入内置的fmt包 func main(){ // main函数,是程序执行的入口 fmt.Println("Hello World!") // 在终端打印 Hello World! } 需要注意的是包裹代码的...
使用教程 600
Go并发编程之sync.Once使用实例详解

Go并发编程之sync.Once使用实例详解

一.序 单从库名大概就能猜出其作用。sync.Once使用起来很简单, 下面是一个简单的使用案例 package main import ( "fmt" "sync" ) func main() { var ( once sync.Once wg sync.WaitGroup ) for i := 0; i <...
使用教程 591
Go获取与设置环境变量的方法详解

Go获取与设置环境变量的方法详解

前言 今天的文章比较基础,但却是必须掌握的,而且本文有些内容,也许你之前没想过。希望这篇文章能够让你理解环境变量并掌握 Go 环境变量相关操作。 01 从安装 Go 说起 其实不止是安装 Go,其他语言一本也会有类似的问题。一般来说,安装完 Go 后,会建议将 go 可执行程序配置到 PATH 环境变量中。 比如我本地的 PATH 环境变量的值: $ echo $PAT...
使用教程 621
Go 互斥锁和读写互斥锁的实现

Go 互斥锁和读写互斥锁的实现

先来看这样一段代码,所存在的问题: var wg sync.WaitGroup var x int64 func main() { wg.Add(2) go f() go f() wg.Wait() fmt.Println(x) // 输出:12135 } func f() { for i:=0;i<10000;i++ {...
使用教程 590
Go使用sync.Map来解决map的并发操作问题

Go使用sync.Map来解决map的并发操作问题

前言 在 Golang 中 map 不是并发安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入确实解决了 map 的并发安全问题,不过 sync.Map 却没有实现 len() 函数,如果想要计算 sync.Map 的长度,稍微有点麻烦,需要使用 Range 函数。 map 并发操作出现问题 func main() { demo := mak...
使用教程 589
go语言区块链学习调用以太坊

go语言区块链学习调用以太坊

geth 以太坊智能合约开发中最常用的命令行工具。 Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。全名go-ethereum。 1. geth 简介 1.1 下载地址: 官网(很慢):https://geth.ethereum.org/downloads/ 国内镜像:h...
使用教程 590
go语言区块链学习调用智能合约

go语言区块链学习调用智能合约

1. 获取abi文件 合约的接口 在remix工具中编译合约后,会有一个abi,复制 然后新建一个xx.abi文件,把赋值的粘贴到里面 注意:代码变了,重新编译后abi也会变,所以一定要用最新的abi 也可以通过solc生成abi: solc --bin test.sol -o test.abi 2. 安装abigen工具 用来生成go文件,...
使用教程 597