Go语言简单源代码剖析

https://github.com/beego/samples/tree/master/WebIM
项目在github上面的地址
是beego提供的一个应用小项目,只是对本人第一次剖析go语言的一个小记录,也算自己剖析代码的思路记录,希望对他人也能有所帮助
(1)阅读readme文档,知晓项目大致内容,项目用到的各种配置文件
(2)查看main包文件WebIM.go

import (
    "github.com/astaxie/beego"
    "github.com/beego/i18n"

    "samples/WebIM/controllers"
)

const (
    APP_VER = "0.1.1.0227"
)

func main() {
    beego.Info(beego.BConfig.AppName, APP_VER)
    // Register routers.
    beego.Router("/", &controllers.AppController{})
    // Indicate AppController.Join method to handle POST requests.
    beego.Router("/join", &controllers.AppController{}, "post:Join")

    // Long polling.
    beego.Router("/lp", &controllers.LongPollingController{}, "get:Join")
    beego.Router("/lp/post", &controllers.LongPollingController{})
    beego.Router("/lp/fetch", &controllers.LongPollingController{}, "get:Fetch")

    // WebSocket.
    beego.Router("/ws", &controllers.WebSocketController{})
    beego.Router("/ws/join", &controllers.WebSocketController{}, "get:Join")

    // Register template functions.
    beego.AddFuncMap("i18n", i18n.Tr)

    beego.Run()
}

main文件包含了三个引用包,一般main文件里的函数都被封装的很好,但是先看main文件,就可以知晓程序运行顺序,再一点一点的分析每个函数的作用
(2)
beego.Router()函数:注册路由,Router 函数的两个参数函数,第一个是路径,第二个是 Controller 的指针。路由就是告诉 beego,当用户来请求的时候,该如何去调用相应的 Controller。
PS:由于我主要是想搞明白聊天室的工作原理,所以对于beego工具的运作方法暂且不细细去看,重点是controllers
(3)
app.go
先看开发文档了解功能:供用户选择技术和用户名的欢迎页面

package controllers

import (
    "strings"
    "github.com/astaxie/beego"
    "github.com/beego/i18n"
)

var langTypes []string //支持的语言,从配置文件获取

func init() {
    // Initialize language type list.
    langTypes = strings.Split(beego.AppConfig.String("lang_types"), "|")

    // Load locale files according to language types.
    for _, lang := range langTypes {
        beego.Trace("Loading language: " + lang)
        if err := i18n.SetMessage(lang, "conf/"+"locale_"+lang+".ini"); err != nil {
            beego.Error("Fail to set message file:", err)
            return
        }
    }
}

// baseController represents base router for all other app routers.
//基本控制器为所有其他的app路由提供了基本
// It implemented some methods for the same implementation;
// thus, it will be embedded into other routers.
type baseController struct {
    beego.Controller // Embed struct that has stub imp
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值