随笔分类 - golang
golang
摘要:我和朋友写的《Go语言从基础到中台微服务实战开发》已出版在京东,当当上可以购买了
本书从Go开发基础开始讲起,介绍了Go的基本语法 数据类型 Goroutines Channel HTTP HTTPS TCP/UDP服务 Go并发 Go数据库操作 编译发布 从开发到发布整个流程,不但介绍了基本的语法,还讲了Go并发的一些底层原理,别小看这些原理,大公司很重视和面试经常会问到很多这方面的知识,掌握了底层数据结构和调度原理有能力造轮子和创新创造出新的语言工具和新的有竞争力的产品,而不是停留在熟练工的基础上。
Docker和k8s是目前比较流行的云原生技术,可以颠覆传统的机器集群部署,自动扩展开,虚拟化,k8s内部是一个强大复杂的网络架构,像细胞一样可以不断分裂 灭亡 重生 有很强的自我繁殖和生存能力
Go的火爆当然离不开区块链了,文中介绍了智能合约 公链 钱包 等概念 介绍了以太坊 Fabric等开源工程,对理解区块链从事区块链开发工作有帮助和指导作用。
阅读全文
摘要:Go博客系统
有没有好用的go写的博客系统推荐个?
搜索了发现很多示例网站都是打不开的
github上的都是几年没更新的了
很多都是传上去后就没维护更新的了
阅读全文
摘要:golang以太坊开发介绍
读取一个账户的余额相当简单。调用客户端的BalanceAt方法,给它传递账户地址和可选的区块号。将区块号设置为nil将返回最新的余额。
传区块号能让您读取该区块时的账户余额。区块号必须是big.Int类型。
account_balance.go 完整代码
阅读全文
摘要:go run命令,编译并运行go代码示例
进入到go文件所在目录,执行go run xxx.go
阅读全文
摘要:中台设计概念
中台大概可以划分为:业务中台、数据中台、算法中台、技术中台、研发中台、组织中台、字典中台
业务中台:提供重用服务,例如用户中心、订单中心之类的开箱即用可重用能力,为战场提供了空军支援能力,随叫随到,威力强大;
数据中台:提供数据分析能力,帮助从数据中学习改进,调整方向,为战场提供了海军支援能力;
算法中台:提供算法能力,帮助提供更加个性化的服务,增强用户体验,为战场提供了陆军支援能力,随机应变,所向披靡;
技术中台:提供自建系统部分的技术支撑能力,帮助解决基础设施,分布式数据库等底层技术问题,为前台特种兵提供了精良的武器装备;
研发中台:提供自建系统部分的管理和技术实践支撑能力,帮助快速搭建项目、管理进度、测试、持续集成、持续交付,是前台特种兵的训练基地;
组织中台:为项目提供投资管理、风险管理、资源调度等,是战场的指挥部,战争的大脑,指挥前线,调度后方。
字典中台:为项目提供国际、国家、业界等标准规范字典并保持及时更新。
阅读全文
摘要:自动支持图片webp格式压缩,图片服务器升级webserver
webp server 是开源免费的。
图片服务器升级,自动支持webp,得先升级openresty
用go写的 webserver 请求到jpg png gif这些,再缓存起来,外面请求还是jpeg这些,实际先到go返回的webp格式,当浏览器不支持webp的才返回源文件。
提升加载时间,图片从434KB减少到340KB,1/4(25%)的压缩率。
根据 caniuse 的统计情况,主流浏览器(接近80%)都支持 webp 了,如果遇到 Safari 这样的奇葩,直接返回原图。
最重要的一点是——我们访问的 URL 可以完全不用改变,访客访问的依然是xxx.jpg ,但是得到的图片格式为:image/webp,而且体积减少了不少(25%)。
阅读全文
摘要:mysql数据库表上百万记录优化思路杂谈
我的mysql数据库表上百万记录,插入数据的时候超慢,插入一笔都差不多将近1秒钟了
有没有做索引?数据量大了一般要做分区分表处理的,实时性要求高的一般要做缓存或者数据总线分层处理的
你用的是不是ssd硬盘?ssd硬盘比机械硬盘快很多倍。
数据库光靠调参数,以经提升到最快0.007秒多一笔插入的速度了
看来还是大数据技术比较重要
调整了那些参数提升这么多?
调了很多参数,mysql、springboot、shardingsphere、druid
可能需要评估一下如何加入Hadoop来进行存储及处理区块链的数据
阅读全文
摘要:对各种开发语言优劣的讨论,入门难度,IDE,大型网站并发性,java,golang,php,python,api接口,前后端分离
现在很多有高并发要求的 java c++的接口改成golang的
有个朋友公司就是把java写的接口改成golang的,听他说的是效率提高了上百倍,节省了大量服务器
java入门比较难,要达到熟练独立开发一个网站出来需要比较长的学习时间
php Python入门很容易,要做大型网站深入也很难
php Python零基础一星期就可以入门了
java你搞一个月门都没有找到
php做个小网站还是比较快的
Python做个小工具还是很好的,一个文件就可以直接运行起来了
金融相关的用java比较多,比较成熟了,招人也容易
现在流行前后端分离了
golang java 做API接口更有优势的
Python做科学计算,自动化,人工智能的更有优势
springboot springcloud 做API还是很不错的,之前的tomcat 那些容器搞得太复杂了
阅读全文
摘要:golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的
使用Golang包依赖管理工具gb替代go来构建项目
这个gb就是一个替代go的build 和 test的工具,可以让项目在任意路径时运行构建
github地址:https://github.com/constabulary/gb
阅读全文
摘要:不要在 MySQL 中使用“utf8”,请使用“utf8mb4”
问题的症结在于,MySQL的“utf8”实际上不是真正的UTF-8。
“utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。
MySQL一直没有修复这个bug,他们在2010年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。
当然,他们并没有对新的字符集广而告之(可能是因为这个bug让他们觉得很尴尬),以致于现在网络上仍然在建议开发者使用“utf8”,但这些建议都是错误的。
在这个不合法的字符集发布了之后,MySQL就无法修复它,因为这样需要要求所有用户重新构建他们的数据库。最终,MySQL在2010年重新发布了“utf8mb4”来支持真正的UTF-8。
阅读全文
摘要:golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
下面这个程序运行的能num结果是什么?
这道题考察的是对并发的理解,主要是并发多协程操作一个共享变量的问题
阅读全文
摘要:golang学习笔记19 用Golang实现以太坊代币转账
在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产。并且它必须是遵循erc20标准的,至于erc20标准,大家可以参考这篇文章 https://theethereum.wiki/w/index.php/ERC20_Token_Standard
它实际上一段智能合约代码,智能合约代码中必须要有以下的一些function 和 event。
阅读全文
摘要:golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
gomobile的使用-用go语言编写移动端sdk和app开发
gomatcha/matcha: Build native mobile apps in Go.
用go语言做app的组件sdk感觉不错,界面UI把相关组件集成进去使用
阅读全文
摘要:golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
python,封装好的框架scrapy,其他常用,urllib2,解析用的包的beautifulsoup,配合selenium。以上是随便爬爬。
大型的分布式爬取,难点一个在反反爬,动态ip池,接打码,爬虫行为模式控制,是个体力活;
另一个在爬取和落盘的效率,所以到了一定规模分布式一般用go/java/scala多
用python的scrapy,所有平台都能跑,scrapy是主流方案,各种周边都很成熟,爬视频python有现成的包
python的pyspider框架比较完善,抓取大量网站,解析大量页面时做分布式和后台管理都比较方便
java爬虫配合jsoup也是不错的选择
nodejs主要框架有cheerio、crawler、spiderman
go语言爬虫框架:gocolly/colly,goquery,colly,chromedp,webloop,go_spider,Pholcus
阅读全文
摘要:golang学习笔记16 beego orm 数据库操作
beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自 Django ORM 和 SQLAlchemy。
目前该框架仍处于开发阶段,可能发生任何导致不兼容的改动。
阅读全文
摘要:golang学习笔记14 golang substring 截取字符串
golang 没有java那样的substring函数,但支持直接根据 index 截取字符串
mystr := "hello world"
fmt.Print(mystr[0:5])
阅读全文
摘要:golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
#string到int
int,err:=strconv.Atoi(string)
#string到int64
int64, err := strconv.ParseInt(string, 10, 64)
#int到string
string:=strconv.Itoa(int)
#int64到string
string:=strconv.FormatInt(int64,10)
#int到int64,把int先转成字符串再转成int64,返回带err参数的需要忽略掉
s := strconv.Itoa(int)
s64,_ := strconv.ParseInt(s,10,64)
复数,求平方,10的5次方
cmplx.Pow(10,5)
阅读全文
摘要:golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
今天测试了重新建一个项目生成新的表,然后复制到旧的项目上,启动的时候报上面的错误,这个提示很必须唯一很难定位问题,后面发现是项目名称不一致导致的
把新的项目名称全部替换成之前的项目名称就可以了(注意:所有拷贝过来的文件和内容有这个的都要替换掉),例如:"newprojecname/models" 替换成"oldprojecname/models"
另:jetbrain的golang IDE 查找替换的快捷键跟普通eclipse不一样的,要用ctrl+shift+R 组合,可以替换项目中所有文件的关键字,还是挺方便的。
阅读全文
摘要:golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好
jetbrain家的全套ide都很好用,一定要dark背景风格才装B
注册的可以找个代理的 license 服务器 或者自己搭建一个
https://www.jetbrains.com/go/download
从File-->setting 里面进去也可以设置风格和字体大小
阅读全文
摘要:golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
阅读全文