Golang编程经验总结

本文总结了Golang编程的一些关键点,包括选择轻量级web框架如martini和goji,处理HTTP keepalive,使用数据库连接池的注意事项,如mysql和redigo/redis,以及如何捕获panic错误。此外,讨论了并发编程中的竞态条件问题,如何避免和检查,以及如何充分利用CPU多核。最后提到了代码热更新、进程管理和与其他语言交互的方法。
摘要由CSDN通过智能技术生成

如何选择web框架:
首先Golang语言开发web项目不一定非要框架,本身已经提供了Web开发需要的一切必要技术。当然如果想要ruby里面Rail那种高层次全栈式的MVC框架, Golang里面暂时没有,但是不是所有人都喜欢这种复杂的框架。Golang里面一些应用层面的技术需要自己去组装,比如session,cache, log等等. 可选择的web框架有martini, goji等,都是轻量级的。


Golang的web项目中的keepalive

关于keepalive, 是比较复杂的, 注意以下几点:

  1. http1.1 默认支持keepalive, 但是不同浏览器对keepalive都有个超时时间, 比如firefox:
    keep.jpg
    默认超时时间115秒, 不同浏览器不一样;

  2. Nginx默认超时时间75秒;

  3. golang默认超时时间是无限的, 要控制golang中的keepalive可以设置读写超时, 举例如下:

	server := &http.Server{
		Addr:           ":9999",
		Handler:        framework,
		ReadTimeout:    32 * time.Second,
		WriteTimeout:   32 * time.Second,
		MaxHeaderBytes: 1 << 20,
	}
	server.ListenAndServe()



github.com/go-sql-driver/mysql使用主意事项:

这是使用率极高的一个库, 在用它进行事务处理的情况下, 要注意一个问题, 由于它内部使用了连接池, 使用事务的时候如果没有Rollback或者Commit, 这个取出的连接就不会放回到池子里面, 导致的后果就是连接数过多, 所以使用事务的时候要注意正确地使用。


github.com/garyburd/redigo/redis使用注意事项:

这也是一个使用率极高的库, 同样需要注意,它是支持连接池的, 所以最好使用连接池, 正确的用法是这样的:

func initRedis(host string) *redis.Pool {
	return &redis.Pool{
		MaxIdle: 64,	
		IdleTimeout: 60 * time.Second,
		TestOnBorrow: func(c redis.Conn, t time.Time) error {
			_, err := c.Do("PING")

			return err
		},
		Dial: func() (redis.Conn, error) {
			c, err := redis.Dial("tcp", host)
			if err != nil {
				return nil, err
			}

			_, err = c.Do("SELECT", config.RedisDb)

			return c, err
		},
	}
}


另外使用的时候也要把连接放回到池子里面, 否则也会导致连接数居高不下。用完之后调用rd.Close(), 这个Close并不是真的关闭连接,而是放回到池子里面。



如何全局捕获panic级别错误:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值