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

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

一、语言结构和注意事项 package main // 声明 main 包,表明当前是一个可执行程序 import "fmt" // 导入内置的fmt包 func main(){ // main函数,是程序执行的入口 fmt.Println("Hello World!") // 在终端打印 Hello World! } 需要注意的是包裹代码的左大括号{ 在Golang中不能单独成为一行,例如下面这样: func main() { // 会报错 fmt....

2022-11-25 179 0
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 < 10; i++ { wg.Add(1) // 这里要注意讲i显示的当参数传入内部的匿名函数 go func(i i...

2022-11-25 193 0
Go获取与设置环境变量的方法详解

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

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

2022-11-25 262 0
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++ { x = x+1 } wg.Done() } 这里为什么输出是 12135(不同的机器结果不一样),而不是20000。...

2022-11-25 174 0
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 := make(map[int]int) go func() { for j := 0; j < 1000; j++ {...

2022-11-25 191 0
go语言区块链实战实现简单的区块与区块链

go语言区块链实战实现简单的区块与区块链

区块链实战 字节 字段 说明 4 版本 区块版本号,表示本区块遵守的验证规则 32 父区块头哈希值 前一区块的Merkle树根的哈希值,同样采取SHA256计算 32 Merkle根 该区块中交易的Merkle树根的哈希值,同样采用SHA256计算 4 时间戳 该区块产生的近似时间,精确到秒的UNI...

2022-11-25 208 0
go语言区块链学习调用以太坊

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

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

2022-11-25 184 0
go语言区块链学习调用智能合约

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

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

2022-11-25 193 0
详解go语言中并发安全和锁问题

详解go语言中并发安全和锁问题

首先可以先看看这篇文章,对锁有些了解 GO语言并发编程之互斥锁、读写锁详解 Mutex-互斥锁 Mutex 的实现主要借助了 CAS 指令 + 自旋 + 信号量 数据结构: type Mutex struct { state int32 sema uint32 } 上述两个加起来只占 8 字节空间的结构体表示了 Go语言中的互斥锁 状态: 在默认情况下,互斥锁的所有状态位都是 0,int32 中的不同位分别表示了不同的状态: 1位表示是否被锁定 1位表示是否有协程已经被唤...

2022-11-25 219 0
Go语言中log日志库的介绍

Go语言中log日志库的介绍

一、标准库log介绍 Go语言内置的log包实现了简单的日志服务。 1、使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法。 log包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。 logger会打印每条日志信息的...

2022-11-25 227 0
Go来合并两个csv的实现示例

Go来合并两个csv的实现示例

背景 通常我们处理文件都是用python+pandas,确实很香。但是今天突然有人找我用go写一个合并两个csv文件的,需要将两个csv按id进行合并,大致如下图 思路很简单,先读入两个csv文件,然后遍历比较id,如果相同就把另一个文件的内容加到第一个中。然后创建merge.csv,将上一步得到的数据写入csv即可。 代码部分 package main import ( "encoding/csv" "log" "os" "fmt" ) func joi...

2022-11-25 197 0
Go 中实现超时控制的方案

Go 中实现超时控制的方案

前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务、网络请求等;一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露、资源不释放等)。 Timer 在 go 中实现超时控制的方法非常简单,首先第一种方案是 Time.After(d Duration): func main() { fmt.Println(time.Now()) x := <-time.After(3 * time.Second) fmt.Println(x) } outp...

2022-11-25 187 0
GO的range具体使用

GO的range具体使用

GO 语言的 for…range  能做什么呢? for…range  如何使用 ? for…range  的返回值有哪些情况,可以对于任何数据结构使用吗? for…range  的返回值如果不需要,可以如何处理? for…range  的数据是如何传递的? 刚学习 golang 的 xdm 会不会有上面的疑问?其实很简单,我们就一个一个的来分享和实操一遍 GO 语言的 for…range  能做什么呢? golang 的 for…range&nb...

2022-11-25 186 0
Go 中闭包的底层原理

Go 中闭包的底层原理

1. 什么是闭包? 一个函数内引用了外部的局部变量,这种现象,就称之为闭包。 例如下面的这段代码中,adder 函数返回了一个匿名函数,而该匿名函数中引用了 adder 函数中的局部变量 sum ,那这个函数就是一个闭包。 package main import "fmt" func adder() func(int) int { sum := 0 return func(x int) int { sum += x ret...

2022-11-25 192 0
为什么GO不支持循环引用

为什么GO不支持循环引用

学习 Go 语言的开发者越来越多了,很多小伙伴在使用时,就会遇到种种不理解的问题。 其中一点就是包的循环引用的报错: package command-line-arguments imports github.com/eddycjy/awesome-project/a imports github.com/eddycjy/awesome-project/b imports github.com/eddycjy/awesome-project/a: import cycle not allowed...

2022-11-25 227 0