区块链是一种数据存储的结构,通过GO语言可以方便的创建一个区块链 直接上代码 1:区块接口和方法packagecoreimport(cryptosha256encodinghextime)typeBlockstruct{Indexint区块链编号索引Timesint64区块链创建时间戳PrevHashstring上一个区块链hashHashstring当前区块的hashDatastring交易数据}创建创世区块funcFirstBlock()Block{varbkBlockbk。Index0bk。Timestime。Now()。Unix()bk。PrevHashbk。Data创世区块bk。HashgetHash(bk)returnbk}创建一个区块funcCreateBlock(oldBlockBlock,datastring)Block{varbkBlockbk。IndexoldBlock。Index1bk。Timestime。Now()。Unix()bk。PrevHasholdBlock。Hashbk。Datadatabk。HashgetHash(bk)returnbk}funcgetHash(bBlock)string{str:string(b。Index)string(b。Times)b。PrevHashb。Datahash:sha256。New()hash。Write(〔〕byte(str))bytes:hash。Sum(nil)hashCode:hex。EncodeToString(bytes)返回哈希值returnhashCode} 2:创建区块链类和方法添加区块到区块链typeBlockChainstruct{list〔〕Block}加入区块链func(bcBlockChain)Add(datastring){num:len(bc。list)ifnum0{还没有任何区块添加创世区块block:FirstBlock()bc。listappend(bc。list,block)}else{oldBlock:bc。list〔len(bc。list)1〕varnewBlockCreateBlock(oldBlock,data)ifbc。verifyBlock(newBlock,oldBlock){bc。listappend(bc。list,newBlock)}else{fmt。Println(验证区块错误)}}}交易记录func(bcBlockChain)GetList(){for,v:rangebc。list{fmt。Println(index:,v。Index)fmt。Println(times:,v。Times)fmt。Println(PrevHash:,v。PrevHash)fmt。Println(Hash:,v。Hash)fmt。Println(data:,v。Data)fmt。Println()}}验证区块验证索引验证hashfunc(bcBlockChain)verifyBlock(newBlockBlock,oldBlockBlock)bool{验证索引ifnewBlock。Index!oldBlock。Index1{returnfalse}验证hashifnewBlock。PrevHash!oldBlock。Hash{returnfalse}newHash:getHash(newBlock)ifnewBlock。Hash!newHash{returnfalse}这里为了增加生成难度判断后缀code:newHash〔len(newHash)1〕ifcode1{returntrue}else{fmt。Println(验证hash后缀错误:,newHash)returnfalse}returntrue} 最后测试方法: funcmain(){blockchain:core。BlockChain{}fori:0;i10;i{blockchain。Add(交易记录:strconv。Itoa(i))time。Sleep(time。Second1)}blockchain。GetList()} 测试结果: PSF:goblockgorunmain。go index:0 times:1640488480 PrevHash: Hash:a91a1da064bd40523be90634584c7c6a23bef44390f855ce8ff671d48b8d9e06 data:创世区块 index:1 times:1640488481 PrevHash:a91a1da064bd40523be90634584c7c6a23bef44390f855ce8ff671d48b8d9e06 Hash:28b659f29d8c8564adc23861e2fa2291dd23d14d672f080fa80ab70dcde7c059 data:交易记录:1 index:2 times:1640488482 PrevHash:28b659f29d8c8564adc23861e2fa2291dd23d14d672f080fa80ab70dcde7c059 Hash:12b668c4d98cade9d12d651598d302663bcf64435a4e6ed1987cd1d730f324ea data:交易记录:2 index:3 times:1640488483 PrevHash:12b668c4d98cade9d12d651598d302663bcf64435a4e6ed1987cd1d730f324ea Hash:c420f63c9a8f73672f23b353f5fd752dee644e0f764740d090319dacccfa7be6 data:交易记录:3 index:4 times:1640488484 PrevHash:c420f63c9a8f73672f23b353f5fd752dee644e0f764740d090319dacccfa7be6 Hash:ff37f186a13a4871c398869a259f288e4f504c7adcb613172fc7fbfba6488a45 data:交易记录:4 index:5 times:1640488485 PrevHash:ff37f186a13a4871c398869a259f288e4f504c7adcb613172fc7fbfba6488a45 Hash:0911b845ed602ab4f9c726b3d5dacea6c388c9e0c28db60a4aad62d94720f860 data:交易记录:5 index:6 times:1640488486 PrevHash:0911b845ed602ab4f9c726b3d5dacea6c388c9e0c28db60a4aad62d94720f860 Hash:8f0f744d190bf204b4441900df2412d99d613bc030ab607b736c99bf1da451b5 data:交易记录:6 index:7 times:1640488487 PrevHash:8f0f744d190bf204b4441900df2412d99d613bc030ab607b736c99bf1da451b5 Hash:3f8181b0570d615bfd0cae38f38813a46413d2ef8f40fc0bd312b7ff93fa57c5 data:交易记录:7 index:8 times:1640488488 PrevHash:3f8181b0570d615bfd0cae38f38813a46413d2ef8f40fc0bd312b7ff93fa57c5 Hash:17ca30a31359c73ecd9b7e43319e0736d0d3043f94e541e7b9e19914f192b8ea data:交易记录:8 index:9 times:1640488489 PrevHash:17ca30a31359c73ecd9b7e43319e0736d0d3043f94e541e7b9e19914f192b8ea Hash:becffe7bb98f299739f6205bf16996e73315b5b752765d36ba7fc050de4abe1c data:交易记录:9