DarrenWang

心向往之


  • 首页

  • 归档

多语言支持

发表于 2018-08-03 | 分类于 go开发
# 14.5 多语言支持 我们在第十章介绍过国际化和本地化,开发了一个go-i18n库,这小节我们将把该库集成到beego框架里面来,使得我们的框架支持国际化和本地化。
阅读全文 »

表单支持

发表于 2018-08-03 | 分类于 go开发
# 14.3 表单及验证支持 在Web开发中对于这样的一个流程可能很眼熟:
阅读全文 »

用户认证

发表于 2018-08-03 | 分类于 go开发

14.4 用户认证

在开发Web应用过程中,用户认证是开发者经常遇到的问题,用户登录、注册、登出等操作,而一般认证也分为三个方面的认证

阅读全文 »

小结

发表于 2018-08-03 | 分类于 go开发

14.7 小结

这一章主要阐述了如何基于beego框架进行扩展,这包括静态文件的支持,静态文件主要讲述了如何利用beego进行快速的网站开发,利用bootstrap搭建漂亮的站点;第二小结讲解了如何在beego中集成sessionManager,方便用户在利用beego的时候快速的使用session;第三小结介绍了表单和验证,基于Go语言的struct的定义使得我们在开发Web的过程中从重复的工作中解放出来,而且加入了验证之后可以尽量做到数据安全,第四小结介绍了用户认证,用户认证主要有三方面的需求,http basic和http digest认证,第三方认证,自定义认证,通过代码演示了如何利用现有的第三方包集成到beego应用中来实现这些认证;第五小节介绍了多语言的支持,beego中集成了go-i18n这个多语言包,用户可以很方便的利用该库开发多语言的Web应用;第六小节介绍了如何集成Go的pprof包,pprof包是用于性能调试的工具,通过对beego的改造之后集成了pprof包,使得用户可以利用pprof测试基于beego开发的应用,通过这六个小节的介绍我们扩展出来了一个比较强壮的beego框架,这个框架足以应付目前大多数的Web应用,用户可以继续发挥自己的想象力去扩展,我这里只是简单的介绍了我能想的到的几个比较重要的扩展。

阅读全文 »

pprof支持

发表于 2018-08-03 | 分类于 go开发

14.6 pprof支持

Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具,在两个地方有包:

1
2
3
4
5
<!-- more -->

net/http/pprof

runtime/pprof

其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来

beego支持pprof

目前beego框架新增了pprof,该特性默认是不开启的,如果你需要测试性能,查看相应的执行goroutine之类的信息,其实Go的默认包”net/http/pprof”已经具有该功能,如果按照Go默认的方式执行Web,默认就可以使用,但是由于beego重新封装了ServHTTP函数,默认的包是无法开启该功能的,所以需要对beego的内部改造支持pprof。

  • 首先在beego.Run函数中根据变量是否自动加载性能包
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    if PprofOn {
    BeeApp.RegisterController(`/debug/pprof`, &ProfController{})
    BeeApp.RegisterController(`/debug/pprof/:pp([\w]+)`, &ProfController{})
    }
    ```
    - 设计ProfController
    ```Go

    package beego

    import (
    "net/http/pprof"
    )

    type ProfController struct {
    Controller
    }

    func (this *ProfController) Get() {
    switch this.Ctx.Param[":pp"] {
    default:
    pprof.Index(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "":
    pprof.Index(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "cmdline":
    pprof.Cmdline(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "profile":
    pprof.Profile(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "symbol":
    pprof.Symbol(this.Ctx.ResponseWriter, this.Ctx.Request)
    }
    this.Ctx.ResponseWriter.WriteHeader(200)
    }

使用入门

通过上面的设计,你可以通过如下代码开启pprof:

1
2

beego.PprofOn = true

然后你就可以在浏览器中打开如下URL就看到如下界面:

图14.7 系统当前goroutine、heap、thread信息

点击goroutine我们可以看到很多详细的信息:

图14.8 显示当前goroutine的详细信息

我们还可以通过命令行获取更多详细的信息


go tool pprof http://localhost:8080/debug/pprof/profile

这时候程序就会进入30秒的profile收集时间,在这段时间内拼命刷新浏览器上的页面,尽量让cpu占用性能产生数据。

(pprof) top10

Total: 3 samples

   1 33.3% 33.3% 1 33.3% MHeap_AllocLocked

   1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors

   1 33.3% 100.0% 1 33.3% runtime.sigprocmask

   0 0.0% 100.0% 1 33.3% MCentral_Grow

   0 0.0% 100.0% 2 66.7% main.Compile

   0 0.0% 100.0% 2 66.7% main.compile

   0 0.0% 100.0% 2 66.7% main.run

   0 0.0% 100.0% 1 33.3% makeslice1

   0 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP

   0 0.0% 100.0% 2 66.7% net/http.(*conn).serve    

(pprof)web

图14.9 展示的执行流程信息

links

  • 目录
  • 上一节: 多语言支持
  • 下一节: 小结

Go环境配置

发表于 2018-08-03 | 分类于 go开发

1 GO环境配置

欢迎来到Go的世界,让我们开始探索吧!

阅读全文 »

参考资料

发表于 2018-08-03 | 分类于 go开发

附录A 参考资料

这本书的内容基本上是我学习Go过程以及以前从事Web开发过程中的一些经验总结,里面部分内容参考了很多站点的内容,感谢这些站点的内容让我能够总结出来这本书,参考资料如下:

阅读全文 »

前端编码规范

发表于 2016-05-24 | 更新于 2017-04-24 | 分类于 前端

原文:https://github.com/gionkunz/chartist-js/blob/develop/CODINGSTYLE.md

这是一份旨在增强团队的开发协作,提高代码质量和打造开发基石的编码风格规范,其中包含了 HTML, JavaScript 和 CSS/SCSS 这几个部分。我们知道,当一个团队开始指定并实行编码规范的话,错误就会变得更加显而易见。如果一段特定的代码不符合规范的话,它有可能只是代码风格错误,而也有可能会是 bug。早期指定规范就使得代码审核得以更好的开展,并且可以更精确的地定位到错误。只要开发者们能够保证源代码源文件都严格遵循规范,那接下去所使用的混淆、压缩和编译工具则可投其所好不尽相同。

阅读全文 »

关于iOS的深浅拷贝以及对象的强弱类型

发表于 2016-03-07 | 更新于 2016-03-08 | 分类于 iOS开发
首先是相关的苹果官方文档Copying Collections,在官方文档的介绍中说明了:有两种对象拷贝方式,一种是浅拷贝,是一般的拷贝方式,另外一种是深拷贝。两者的不同之处在于,浅拷贝只是拷贝了一个对象的引用,指针所指向的地址是一样的,相当于指针复制,例如
1
2
NSString* string = @”a”;
NSString* stringCopy = [string copy];// stringCopy与string地址相同,retainCount+ 1,属于浅拷贝
阅读全文 »

使用hexo搭建博客记录

发表于 2016-02-18 | 更新于 2016-03-07 | 分类于 记录

通过各种寻找资料,总算搭建好了自己的技术博客,在此记录一下几个关键点

阅读全文 »
1…910

王梦涛

100 日志
4 分类
4 标签
GitHub Weibo
© 2016 – 2018 王梦涛
由 Hexo 强力驱动 v3.6.0
|
主题 – NexT.Pisces v6.3.0