微信小程序GO语言后端趟坑小笔记



开始大规模编码前最好能把要用的前后端通信手段先在手机上测试通过,不要相信开发工具里的模拟器,模拟器通了在手机上不一定通。

如果之前没测通就开始大规模编码,之后发现死活连不上,再加好多测试代码就比较没劲了。



搞服务器还需要一个经过ICP备案的域名,端口只能用默认的,云服务器提供商提供已经经过ICP的子域名,可申请。

申请后到小程序的网页->服务器域名,对相应的服务把域名填写到其中。



requestweb-socket和服务器通信都需要用SSL,不要浪费时间在通过openssl命令自己签名的证书,直接从网上申请。

letsencrypt的证书也不推荐,生成的证书能不能用不知道,生成位置乱,再找到对应的证书麻烦。

腾讯云和阿里云的证书也是免费的,我才不会告诉你这两家我都申请了。

这里比较重点的是域名验证,我用的验证方法是证书提供商访问域名取得证书提供商提供的一个文件的方法,这个从理论上需要一个webserver,没有的话“python -m SimpleHTTPServer 80”一键搞定。

如果python环境都没有,go语言“http.Handle("/", http.FileServer(http.Dir("webroot")))”

拿到证书压缩包直接找nginx,因为这里是和go一样的crt+key的格式。



证书到手下面要做的就是把比较简单的request跑通,GO那边用log.Fatal(http.ListenAndServeTLS(":443", ssl_crt, ssl_key, nil))就可以简历SSL服务器,ssl_crtssl_key分辨写上已经拿到的crtkey的文件位置即可。

再次重申,务必在手机上用预览测试一次保证连接正常。



gowebsocket库强烈推荐用github.com/gorilla/websocket,而不是golang.org/x/net/websocket

我和golang.org/x/net/websocket的坑爹小故事:我没看文档里的例子(其实文档开头就让人去用github.com/gorilla/websocket,所以我怀疑我压根没看文档,),而是自己搜了一个坑爹例子。代码里没设置CheckOrigin,模拟器是可以正常进行websocket通信的,但是手机不通,而且是不会打有价值的出错信息的,就跟没事人一样啥也不打,或者输出一句完全没价值的报错。折腾了我很久。

github.com/gorilla/websocket第一次就打出了CheckOrigin有问题,并且文档最开头就会说明CheckOrigin的重要性和如何设置。



最后前面这套都搞通后,你可以在开发工具里打开不检查SSL域名,在本地搭服务器开发,用模拟器看看效果(有人和我说效果和手机也不完全一样)。

但是我建议还是隔一段至少用预览在手机上访问下服务器看看是不是工作正常。



最后,别问我为啥用GO语言最后端而不是nodejs。任性的人生不需要理由!