Go知识点复习

Go知识点复习

1.关于包的使用和GOPATH的配置

  • src:用于以代码包的形式组织并保存Go源码文件, 需要手动创建
  • pkg目录:用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件
  • bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

//Add.go
package mylib

func Add(a, b int) (ret int)  {
	ret = a + b
	return ret
}
//main.go
package main

import (
	"mylib"
	"fmt"
)
func main() {
	fmt.Println( mylib.Add(10, 10) )
}

环境变量配置

GOPATH=C:\Users\yqq\Desktop\QBlockChainNotes\Go语言\Go语言编写比特币\SimpleBlockChain
GOBIN=$GOPATH\bin

关于go run , go build , go install 命令

  • go run是直接编译执行, 不会生成exe文件
  • go build 用于编译测试, 检查是否有错误
  • go install第一步编译导入的包文件, 放到pkg目录下; 第二步编译主程序生成可执行文件.

go语言实现区块链

1.挖矿原理

package main

import (
	"crypto/sha256"
	"strconv"
	"fmt"
	"time"
)

func main()  {

	startTime := time.Now()
	time.Sleep(3 * time.Second)
	for i := 0; i <100000000000000000; i++{

		data := sha256.Sum256([]byte(strconv.Itoa(i)))
		fmt.Printf("%10d, %x\n", i, data)
		if string(data[len(data) -  2 : ]) == "00"{   
			fmt.Printf("挖矿成功, 耗时%f 秒\n", time.Since(startTime).Seconds())
			break
		}
	}
}

2.PoW工作量证明实现

通过调整nonce是Hash值小于设定的某个值, 类似 000000xxxxxx…xxxx, 如下:

000000aece8f5d530b8b3c24e80dc7d8c55db4fc131e315f73e14699000c9373
//挖矿核心代码
func (pow *ProofOfWork)Run() (int, []byte ){

	var hashInt big.Int
	var hash [32]byte
	nonce := 0

    //通过调整变化 nonce是 当前区块的hash值小于设定的一个值
	for nonce < maxNonce{
        data := pow.prepareData(nonce) //准备数据(由各种信息拼接在一起, nonce是可变的)
		hash = sha256.Sum256(data) //计算出hash
		fmt.Printf("\r%x", hash)

		hashInt.SetBytes(hash[:]) //获取要对比的数据

		//找一个数(data的hash值) : 小于  1 << (256-targetBits)
		if hashInt.Cmp(pow.target) == -1{
			break
		}else{
			nonce ++
		}
	}

	fmt.Println("\n\n")
	return  nonce, hash[:]   
}
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值