- 博客(41)
- 资源 (26)
- 收藏
- 关注
原创 类型别名和类型定义
看到一段代码type IntAlias = int觉得很好奇,怎么中间有个=,搞得跟赋值语句似的。这是什么语法?原来这是类型别名,跟类型定义不同。在Go1.9以前声明类型别名的时候是没有=的,Go1.9以后就有了。所以我以前看到的代码都是老代码,而且我也一直那样写。我一直是用类型定义,从来没用过类型别名。类型别名拥有之前类型的方法,但类型定义不行。例如,你可以这样写代码// 定义商标结构type Brand struct {}// 为商标结构添加Show方法func
2020-06-30 12:40:54 715
原创 go get无法访问github怎么办?
在控制台下输入go get github.com/xxx/xxx结果提示访问github.com超时。虽然我的浏览器可以通过sock5代理访问github.com,但是控制台不行。后来找到一个简单的解决方案:在win10系统里设置两个环境变量:设置好环境变量后,重启控制台即可访问github.com。...
2020-06-30 12:39:42 4005 3
原创 go语言实现最短路径走迷宫算法
今天看了一个介绍走迷宫算法的视频,就自己动手写了一遍。写一篇日志以免将来忘记。首先是迷宫的表示。如左下图,起始位置是左上角黄色位置,重点位置是右下角黄色位置。在这个二维矩阵里,0表示道路通畅,可走;1表示有障碍物,不可走。最终计算出来的结果如右下角所示,从左上角0开始,每走一步,累加一次,这样就可以显示出整条路径的先后顺序。要走最短路径,只要从终点位置,不断递减1寻找上一步的位置直到回到起始位置即可。算法的主要过程:从矩阵中一点向外探索,总共有四个方向,分别是上下左右,如下图。当探索
2020-06-29 14:39:22 755
原创 golang实现简单的布隆过滤器
关于布隆过滤器的概念性的介绍,我就不多做解释了,可以详细查看一下文章最后的那篇参考资料。我实现这个布隆过滤器是从三个公式开始的,如下图所示只有先处理好这些布隆过滤器的参数以后,才方便创建一个布隆过滤器。三个计算公式对应的实现代码如下:// 计算布隆过滤器位图大小// elemNum 元素个数// errorRate 误判率func CalBloomSize(elemNum uint64, errRate float64) uint64 { var bloomBitsSize = f
2020-06-27 01:40:12 880
原创 xshell连接断开自动重连的设置
最近我的香港服务器老是不稳定,时不时的就断开连接,这导致我本地的代理也断开,无法查阅一些境外的技术网站。很是苦恼。不过今天总算解决了这个麻烦。原来xshell软件自带有断开重连的功能。如下图所示:这样设置好了以后,再断开就会自动重连了,效果如下:(全文完)参考链接:https://blog.csdn.net/chunxiaqiudong5/article/details/79393026...
2020-06-22 23:53:41 3870
原创 goconvey的使用
今天试用了一下goconvey,结果就掉坑里去了。网上看了很多网友写的教程,都是坑。其中最大的坑,是没有任何人提到如何用浏览器查看我自己写的项目的测试结果。go test那肯定是没问题的。启动goconvey的http服务也是没问题的。但是在浏览器里看不到我的项目的测试用例啊。这怎么搞?没人说啊,我也不知道其他人怎么那么顺利,到我这里就不灵了。还是得靠自己摸索。最后我摸索出合理的goconvey使用方法: goconvey.exe -workDir ../src/golan
2020-06-22 20:45:58 580
原创 go语言的new和make有什么不同?
golang中的new和make有什么不同?golang中好像很少用到new这个内建函数,但是make却用得很频繁。我只用过一次。new(big.Int).SetBytes(...)new用来给指针分配内存并将分配的内存空间初始化为零值,通常都用来分配值类型内存空间。有没有给引用类型指针分配内存空间。可能有这种应用场景,但我没有遇到过。make用于初始化引用类型,如slicemapchannel而且非它不可。下面我要尝试用new给引用类型分配内存。..
2020-06-20 00:00:35 152
原创 base58编码与解码实现
Base58编码是比特币地址生成算法中的最后一个步骤。算法简单,和上大学时候学过的十进制转十六进制一样,只不过现在变成了十进制转58进制,核心过程就是不断的除58求余。下面是Go语言的实现过程:func Base58Encode(data []byte) string { var ( alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" bigNum = new(big.Int).SetBytes(da
2020-06-19 11:19:45 2233
原创 如何卸载阿里巴巴PC流氓软件
今天真的是恶心到我了。我有一个移动硬盘插在PC上,用了一段时间后本打算简单的退出这个硬盘,想安全地拔下。没先到360软件提示有一个进程在占用这个硬盘,不能安全地弹出。靠,我想着什么软件这么流浪,连我的移动一盘都要扫描?一查原来是阿里的PC安全服务。然后我就打算直接把这个进程杀了。结果根本就杀不死。这么流氓!这已经触及到我PC操作的极限了,只能求助于网友。结果在网上看到很多网友声讨阿里软件的流氓。于是我先把所有的阿里软件都卸载了。然后跟着这个网友的操作搞定了这个流氓服务。h
2020-06-18 11:02:39 4842
原创 分层确定性钱包为什么用父私钥和父公钥能推导出相同的子公钥?
用父私钥推导子私钥,可以推导出两种子私钥,一种是普通的子私钥,一种是增强型子私钥。而题目里说的相同的子公钥其实只是普通的子公钥。也就是说,用父公钥是无法推导出相同的子公钥的。用普通父私钥推导子私钥的过程是这样的:childExtendKey = HMAC-SHA256(父公钥 | 子索引号,父链码)而childExtendKey由64字节组成,前32字节是子扩展私钥,后32字节是子链码子私钥 = 父私钥 + 子扩展私钥子公钥 = (子私钥 mod secp256k1.N)*secp25
2020-06-17 10:34:10 807 3
原创 央视网站Error多
今天偶然看到一个关于王小云的信息,说她在开讲啦里面讲了一期密码学。于是我很感兴趣去看看怎么回事。结果就看到下面这张图片。这错误数量也太惊人了吧。难道是我电脑的问题?
2020-06-16 09:00:24 125
原创 自己动手写个人网站——03增加游戏
因为我之前有段时间开发过一个网页版的简易的德州扑克的游戏。这个游戏的是一个网友开源的。而我当时刚好在学习golang,加上自己也喜欢打德州扑克,就研究了一下。我发现那个作者的代码根本无法运行,有好几个bug没有修复。本着拿来主义好羞耻,就不要再去麻烦作者的心里,我开始自己修复那个游戏。我看作者已经完成了大部分的功能,对我来说最麻烦的扑克牌素材之类的,作者都已经准备好了,我觉得应该没什么太大的问题了。我觉得修复一些bug应该不在话下。当时我经过几天时间的修复,还真的搞定了,可以玩了。我的可
2020-06-13 12:16:05 264
原创 自己动手写个人网站——02修正导航栏功能
好不容易磨磨唧唧弄出一个可以看的网站界面,后来发现有个很大的问题:导航栏的按钮没法实现跳转。可能是我在前端方面练习得太少了,感觉自己很菜,测试了好几种方法都没搞定。更让我有点接受不了的是,里面的导航栏里的类型是nav-justified, 而这个类型在bootstrap文档里说明了是过时的。我也是醉了,过时了的东西还挂在最新的说明文档里推荐给大家使用。我是看这个导航栏好看才用的,现在功能上有些问题就只能放弃了。于是我用回了最原始的nav-pills类型的导航栏。用回这个导航栏还遇到一个麻烦,我发现在刷新
2020-06-13 12:04:27 245
原创 自己动手写个人网站——01准备前端框架
准备前端框架的过程就像上购物网站一样。看见好多东西,都想要,但仔细想想并不适合我。网上有很多免费的模板,免费的图片。我浏览了很多,都发现不是很理想。比如图片太大了,这会导致网页加载慢。比如图片画的不符合我的构想的布局,大多数图片都把重要的元素放在图片的中央,而我写的网页刚好不是那样的,我设计的网页是中间是文章或者视频等主要的内容,而网页的四周再点缀一些好看的图片就行了。但我终究没有找到让自己满意的图片。最后实在累得不行就放弃了。到这里,我突然很想要一个UI设计师,帮我设计一款清爽的网页背景图片。
2020-06-13 11:36:31 384
原创 我对区块链行业的一点不成熟的想法
我是2017年的年中才开始关注到区块链行业并入职一家区块链小公司的。我做区块链的初衷,只是为了实现弯道超车。因为我毕业后一直在一家公司从事嵌入式方面的工作,后来觉得这一行的薪水不高,并且经常受限于硬件方面。加上我自己曾经努力想补好硬件方面的短板而屡屡受挫,不得不承认自己很不适合做硬件方面的工作,所以不得不给自己在嵌入式方面判了"死刑"而转投互联网。入门互联网行业后,磕磕碰碰做了一些软件开发和系统维护方面的工作,深感自己要学的东西非常多,要短期超越同行非常难,何况我还是个半路出家的。机缘巧合之下,我关注到了
2020-06-13 08:28:17 400 1
原创 bootstap的初体验-05选项卡组件的使用
选项卡是一个比较常见的组件,在很多网站都有使用。学了一下,感觉东西有点多。选项卡从界面上讲分为两个部分,上面的是选项卡,下面的是面板。选项卡部分用ul和li定义,而面板部分用div定义。如下代码所示:<!-- 这是选项卡 --><ul class="nav nav-tabs"> <li><a href="#pan1" data-toggle="tab">博客</a></li> <li><a href
2020-06-12 18:28:20 176
原创 bootstap的初体验-04组件
bootstrap提供了丰富的组件,深入进去看,真实让人眼花缭乱。让我映印象刻的有两个组件。一个是徽章一个是巨幕。徽章原来我以前看到的这种带数字的按钮状的叫徽章。还有这种列表式的徽章巨幕以前看到类似这种页面,以为是排版很好的页面,没想到这个也可以用组件做,效果真的很不错,我喜欢。(全文完)参考资料:https://v3.bootcss.com/components/...
2020-06-12 08:12:17 127
原创 bootstap的初体验-03布局
bootstrap的布局内容很多很丰富,以一个个去尝试,能很好的扩展人的视野,尤其是像我这种没见过什么世面的程序员。确实增长了很多见识。很多时候,不是自己不想做得更好,只是受限于自己的见识,没见过更好的。而一旦见过了更好的,就觉得这应该添加到自己的list里面去,以后就这么干。例如这个小黑块真的是太让人喜欢了,醒目,强烈的区分度啊。我就是喜欢这一行文字前面那一竖的小灰块,看着就是让人感觉更专业,更正式。但是也有一些让我觉得有些摸不着头脑的设计,感觉效果没有多好,一般般嘛,如.
2020-06-12 05:29:52 112
原创 bootstap的初体验-02自适应的行和列
bootstrap的核心理念就是响应式设计。这个响应式设计有点抽象,望文却生不了义。什么叫响应式设计?就是一套源代码能够自适应各种不同分辨率的屏幕,如智能手机,平板,PC。因为要做到自适应各种分辨率的屏幕,所以bootstrap要做:自适应的布局自适应的图片自适应的脚本现在先来看看bootstrap怎么做到自适应的布局。这要归功于bootstrap的栅格系统。什么是栅格系统?栅格系统就是bootstrap自定义的行和列,利用这套行和列就能自适应于各种屏幕。栅格系统
2020-06-11 22:45:38 280
原创 bootstap的初体验-01HelloWorld
要做web编程,免不了要做前端开发。看了很多网友的意见,说是bootstrap简单易上手,于是入坑了。今天是第一天,温习了一下HTML,CSS和jQuery的一些基础知识,然后就开始入门bootstrap了。入门总是从最单的事情做起,慢慢建立信心。下载bootstrap下载jQuery新建项目把bootstrap复制到项目文件夹下把jQuery复制到项目文件夹下的js文件夹下创建并编辑index.html这里最关键的是三行代码: <link rel=
2020-06-11 21:16:47 204
原创 隐藏搜狗输入法软件的自定义状态栏
搜狗输入法的自定义状态栏有时候真的好烦,尤其是当它在右下角,挡住了你想要点击某个东西的时候。所以关闭它,世界就清净多了。下面就是关闭它的截图,很简单。照图操作即可。
2020-06-11 10:20:09 1833
原创 原来日志级别都有标准规定
最近在看go web编程方面的东西,其实就是beego了。然后我看到源码里有这么一行代码:// RFC5424 log message levels.const ( LevelEmergency = iota LevelAlert LevelCritical LevelError LevelWarning LevelNotice LevelInformational LevelDebug)我有点懵了,没想到日志级别都有标准规定:RFC5424。好奇心的驱使下去看了一下
2020-06-11 00:29:31 554
原创 go web编程由浅入深4——实现一个简单静态文件服务器
实现一个简单的静态服务器,代码很简单,只需要在前面的代码里增加以下几行代码即可:pwd ,err := os.Getwd();if err != nil { panic(err)}mux.Handle("/static",http.StripPrefix("/static", http.FileServer(http.Dir(pwd))))这样就简单实现了一个静态文件服务器。完整代码如下:package mainimport ( "io" "net/http" "os"
2020-06-10 14:23:15 138
原创 go web编程由浅入深3——用我们自定义的Server
还记得之前有个http.ListenAndServe吗,现在来看看它的定义:func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe()}可以看出,原来内部是实现了一个Server结构体,然后调用这个结构体对象的ListenAndServe函数。下面我们就自己来实现一个Ser
2020-06-10 13:32:03 230
原创 go web编程由浅入深2——用我们自定义的ServeMux
上一篇文章我们看到go的http库底层默认用的一个ServeMux对象来处理路由。现在我们要自己实现一个简单的ServeMux来取代底层默认的ServeMux对象。代码如下:package mainimport ( "io" "net/http")func main() { mux := http.NewServeMux() mux.HandleFunc("/hi", sayHi) mux.Handle("/", &MyHandler{}) if err := http.
2020-06-10 12:44:33 599
原创 go web编程由浅入深1——注册简单handler函数
这个小系列我打算彻底弄懂golang的Http库,一点一滴慢慢深入。下面是最简单的go web编程例子。通过把一个简单的函数注册到http服务器的路由中去。package mainimport ( "io" "net/http")func main () { http.HandleFunc("/", sayHi) if err := http.ListenAndServe("127.0.0.1:8080", nil); err != nil { panic(err) }}
2020-06-10 12:22:03 357
原创 golang练习之聊天室——服务端增加消息转发功能
上一篇我们完成了客户端和服务端不停地发送接收消息的功能,接下来,我们要给服务端增加一个功能:在客户端端之间做消息转发。要实现消息转发,首先要有客户列表。这个列表表示当前在线的客户,这样更容易实现。这可以在客户端连上来的时候就保存客户的信息。客户之间发送消息的时候,用#隔开,前面是要发送到的客户端的ip和端口,后面是消息的内容。代码如下:package mainimport ( "errors" "github.com/apex/log" "net" //"github.com/de
2020-06-10 09:19:27 303
原创 golang练习之聊天室——丰富客户端功能
前面一篇设计的客户端太简陋了,只向服务端发送一个hello world就退出了。现在我们要丰富一下客户端的功能。让客户端不仅能向服务端发送数据,也能接收服务端发送过来的数据。server代码:package mainimport ( "github.com/apex/log" "net")func handleOneClient(client net.Conn) { defer client.Close() buf := make([]byte, 1024) for { n
2020-06-10 09:19:06 174
原创 golang练习之聊天室——基本通信
今天开始练习用golang写网络服务了,首先就拿聊天室来练手吧。先试试基本的通信,熟悉一下基本的API。server端代码:package mainimport ( "github.com/apex/log" "net")//我靠,为什么不能用指针调用接口,这是什么骚设计?//func handleOneClient(client *net.Conn) {func handleOneClient(client net.Conn) { buf := make([]byte,
2020-06-10 09:18:48 190
原创 golang练习之聊天室——服务端增加日志文件和客户端命令功能
前面我们实现了大部分聊天室的功能,但有个核心的功能没做好,那就是每个客户端无法显示当前在线的客户有哪些。现在我们就增加这个功能。在客户端和服务端之间的网路协议增加一条:当客户端和网络端用*隔开的时候,就表示客户端要向服务端发送命令,现在暂定命令是members,然后服务端就向客户端发送当前所有在线客户的列表。在增加一个实用的功能,那就是服务端把日志写到日志文件里面去。当然,前面的例子只实现了客户端之间通信,根本没有实现聊天室群通信的功能,在这里实现了。sever代码package
2020-06-10 09:18:02 253
原创 cgo的简单尝试
研究ethereum源码的时候,运行其椭圆曲线签名算法提示我错误,说是找不到gcc。然后我就安装好gcc。我想这是用go源码调用c代码啊,好像是一个叫cgo的功能来者。好奇心的驱动下,写了两个demo感受了一下。C代码直接写在go源码里package main/*#include <stdio.h>int Sum(int a, int b){ return a+b;}*/import "C"import "fmt"func main(){ var a, b
2020-06-08 02:39:39 220
原创 ChainLink的VRF体验之彩票合约
今天体验了一下ChainLink的VRF功能,用的是社区的一个模拟彩票抽奖的智能合约。下面是智能合约的主要代码:RandomNumberGenerator.solpragma solidity ^0.6.2;import "./VRFConsumerBase.sol";import "./Lottery.sol";contract RandomNumberGenerator is VRFConsumerBase { address requester; bytes32
2020-06-07 12:27:25 1334 1
原创 为什么solidity空字符串打印到event里却是0x20?【未解决】
之前遇到一个问题,一直就接着我,在研究argent智能合约的时候,最后一次打印日志,明明是空的字符串,打印出来却变成了0x40,在好奇心的驱使下,我写了一小段代码做测试,代码如下:contract TestLog { bytes constant internal EMPTY_BYTES = ""; event Logempty(bytes data); function Log() public { emit Logempty(EMPTY_BYTES);
2020-06-05 16:44:35 328
原创 argent钱包软件转账免手续费之谜——钱包合约初始化细节
这里我想通过公开的数据获取到足够的信息,最后尽量能重现创建我的钱包合约的整个过程。我钱包里的看到的那个地址上回说了是一个智能合约地址,这和传统的以太坊外部账号地址不同。仔细研究这个智能合约,发现它只是一个代理合约。这个合约真正的功能实现是另有其人,就是合约里的implementation变量存储的智能合约地址。contract Proxy { address implementation;...}经过分析智能合约代码,发现是从它的创建者合约传入的该地址,而这个值是0xb6d642
2020-06-05 11:56:00 1085
原创 以太坊智能合约地址生成之CREATE2指令
承接上篇,不多做介绍,直接上代码:func Create2ContractAddr(sendAddr string, salt string, byteCode []byte) (string,error) { //keccak256( 0xff ++ sendAddr ++ salt ++ keccak256(byteCode))[12:] var ( data []byte err error buf []byte ) data = append(data, byte(0xf
2020-06-04 11:20:50 2702
原创 以太坊智能合约地址生成之CREATE指令
以太坊智能合约地址生成是有规则的,是可以提前预测的。不信,看下面的代码:import ( "encoding/binary" "encoding/hex" "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3")//根据RLP编码规则把int变量值转变成字节切片func RlpInt2Bytes(i int)[]byte { var data [4]byte if i <= 255 { if i =
2020-06-04 11:14:19 1953
原创 以太坊智能合约Event的哈希值验证
最近在研究以太坊,看到智能合约的Event部分,在etherscan上看到下面这张图标题就是这个topic0,据说这是Received(blablabal)那一串的哈希值。怀着动手一试的想法,我用golang测了一下,诚不欺我也。代码如下:t.Run("test keccak256 event", func(t *testing.T) { var testcases = []struct { str string want string } { { //"even
2020-06-04 11:01:48 1367
原创 以太坊地址生成算法golang实现
实现代码:func NewAddress(strPrivKey string) (string, error) { var ( uncompressPubKey []byte pubKeyHash256 []byte err error buf []byte ) if buf, err = hex.DecodeString(strPrivKey); err != nil { return "", err } privKey := secp256k1.PrivKeyFrom
2020-06-04 10:45:26 1290
原创 以太坊地址检测算法golang实现
早些时候,以太坊地址是没有区分大小写的。后来不知道从什么时候开始,提交了一个EIP55提案,建议以太坊地址以大小写区分来验证地址的合法性。比特币地址在最后添加4个字节的校验和后缀来做校验,以太坊却是以大小写的形式做校验,也算是一种新颖的做法。下面代码实现了转换部分大小写的以太坊地址为带校验的地址,以及检测一个地址是否带校验功能。源码如下:func ToValidateAddress(address string) string { addrLowerStr := strings.ToLower(ad
2020-06-04 10:42:41 1864
allcontract.sol
2020-06-07
linux下wav格式音频播放小程序
2012-09-11
几个经典算法源代码文件
2012-09-02
嵌入式课设四个集合
2011-12-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人