• 分类:【Golang
  • 浏览【30】
  • 评论【0】
  • 更新【2018-6-29 21:05:59】

go可以很容易实现一个文件服务器,只需要使用函数 func ServeFile(w ResponseWriter, r *Request, name string)即可。 package main import ( "log" "net/http" "fmt" ) func helloHandler(res http.ResponseWriter, req *http.Request) { http.ServeFile(res, req, "E:/go-work/src/go-learning/foo.xlsx") } func main() { fmt.Println("web

阅读全文
  • 分类:【前端
  • 浏览【50】
  • 评论【0】
  • 更新【2018-6-25 15:10:28】

//上传图片 var imagesBase64 = []; $("input[type=file]").on("change", function (e) { var image = e.target.files[0]; var imgFile = new FileReader(); var imgShow = new Image(); imgFile.readAsDataURL(image); imgFile.onload = function () { var imgData = this.result; //base64数据 imagesBase64.

阅读全文
  • 分类:【linux
  • 浏览【69】
  • 评论【0】
  • 更新【2018-6-14 13:26:49】

修改terminal apt-get update更新软件源,安装zsh,设置默认terminal为zsh,chsh -s /usr/bin/zsh。非root用户需要在root权限下修改/etc/passwd文件才能实现。 nginx设置: sudo /etc/init.d/nginx restart # or start, stop 或 sudo service nginx restart # or start, stop 有时候我们改了配置文件只是要让配置生效,这个时候不必重启,只要重新加载配置文件即可。sudo nginx -s reload 目录/etc/nginx/site

阅读全文
  • 分类:【系统架构
  • 浏览【78】
  • 评论【0】
  • 更新【2018-6-12 21:34:47】

“过早的优化是万恶之源”,这句话或多或少在哪听过,不过为什么优化也会带来问题,恐怕只有经历过的人才能理解其中的意义。 关于程序优化,产品优化这些词在开发工作中一定有经历过。某位程序员做事一丝不苟,对程序开发特别注重性能问题,花大量时间来优化某段代码。某位产品在提出需求的时候总是有一些目前用不到的功能,说是为了方便将来扩展。 那么实际工作中这种优化到底起到了什么作用?个人认为弊多于利。 问题一:过早引入新技术 甲同学在做一个员工日常工作内容列表的接口时,认为该接口会产生性能问题,将来数据增多的时候会有性能瓶颈,于是利用了某项缓存技术,觉得缓存一定比直接查数据库速度快,于是就引入了缓存数据库。把数

阅读全文
  • 分类:【系统架构
  • 浏览【84】
  • 评论【0】
  • 更新【2018-6-10 21:54:23】

消息队列(MQ)在系统架构中发挥了重要作用,其主要作用有系统解耦,流量削峰,异步消息存储,分布式系统最终一致性等。 本文介绍的是消息系统中消息发布者和订阅者间参数如何约定和传递?实际应用场景中,一种消息的发布者和订阅者都有可能是多个,也就是多对多的关系,这样就形成了消息参数传递的复杂性,就算一开始参数有约定,大家都按照最初约定来开发,但不免开发过程中各端需求变化带来的修改。例如最开始为了实现系统解耦而引进了消息队列,此时消息参与者较少,只有一个发布者和一个订阅者,这种情况最简单(其实最简单还是直接调接口),双方简单约定了需要传递的参数。 { userId:123, userName:&qu

阅读全文
  • 分类:【Golang
  • 浏览【181】
  • 评论【0】
  • 更新【2018-4-15 21:21:36】

beego注解路由匹配不到,返回404页面 router.go使用了两种方式注册路由: ns := beego.NewNamespace("/admin", beego.NSRouter("/", &controllers.UserController{}, "get:Welcome"), beego.NSInclude( &controllers.UserController{}, ), controller中的路由注解设置: // @router /admin/user/get-all-user [get] func (c *UserGroupController) GetA

阅读全文
  • 分类:【Golang
  • 浏览【206】
  • 评论【0】
  • 更新【2018-4-09 19:08:42】

go语言可以很轻松的实现并发获取数据,就算是新手也可以按部就班的套用现成的并发模式来实现并发。以下是一个简单的测试程序,其中有串行,并行。 package main import ( "sync" "time" "fmt" ) func main() { syncFunc() fmt.Println(">>>>>>>>>>>>>>>") asyncFunc() fmt.Println(">>>>>>>>>>>>>>>") asyncChanFunc() } // 串行执行 func syncFunc() { var n,m,x int start := time.Now(

阅读全文
  • 分类:【Golang
  • 浏览【178】
  • 评论【0】
  • 更新【2018-4-05 10:21:56】

go test命令是一个按照一定的约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源文件并不是go build构建包的一部分,它们是go test测试的一部分。 在\*_test.go文件中,有三种类型的函数:测试函数、基准测试函数、示例函数。一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确; go test命令会调用这些测试函数并报告测试结果是PASS或FAIL。基准测试函数是以Benchmark为函数名前缀的函数,它们用于衡量一些函数的性能;go test命令会多次运行基准函数以计算一个平均的执行时间。示例函数是以Example为函

阅读全文
  • 分类:【Golang
  • 浏览【249】
  • 评论【0】
  • 更新【2018-3-19 11:27:57】

一、 包的导入语法 在写Go代码的时候经常用到import这个命令用来导入包文件,看到的方式参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用 fmt.Println("hello world") 上面这个fmt是Go语言的标准库,他其实是去GOROOT下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块: 相对路径 import "./model" //当前文件同一目录的model目录,但是不建议这种方式import 绝对路径 import "short

阅读全文
  • 分类:【疑难杂症
  • 浏览【207】
  • 评论【0】
  • 更新【2018-3-19 10:59:32】

github上提交了很多commit但是没有Contributions绿色方块,原因是提交的email和github不匹配,使用git log查看记录中使用的邮箱是否是github的邮箱,如果不是也不需要做什么修改,只需要在github上添加对应的邮箱地址即可。 右上角头像-settings-emails-Add email address 验证邮箱后就会立马重新统计

阅读全文