初级会员
  • 第 3478 位会员
  • npc_hp110
  • 274332280@qq.com
  • 2015-09-07 13:15:02
  • Offline
  • 19 95

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • struct tags https://github.com/golang/go/wiki/Well-known-struct-tags
  • 评论了主题 beego orm的问题
    Ormer是一个接口类型,需要给这个类型赋值一个具体的实例。 var o Ormer = NewOrm()
  • 可以直接把内存中的xlsx文件发送到浏览器,不用先保存到本地磁盘: ``` func DownloadXlsx(w http.ResponseWriter, req *http.Request, filename string, file *xlsx.File) { w.Header().Add("Content-Disposition", "attachment") //w.Header().Add("Content-Type", "application/vnd.ms-excel") w.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") var buffer bytes.Buffer file.Write(&buffer) r := bytes.NewReader(buffer.Bytes()) http.ServeContent(w, req, filename, time.Now(), r) } ```
  • 高并发的情况下,各个goroutine打印的日志会混在一起。如果能把goroutine的id打印到日志里面,会清晰很多。
  • 这两者的区别在于:它们是**不同的类型实现的方法** 带星号的**func (this *User) GetSring() string** 是类型***User**(就是User的指针类型)实现了GetString方法。 不带星号的**func (this User) String() string** 是类型User实现了GetString方法 。 **User** 和 ***User** 是不同的类型,从面向对象的角度可以理解是不同的类。 另外一点,**(this *User)** 和 **(this User)**都是它们实现的方法的参数。 从这个角度看,这两个函数和下面两个函数是一样的: ``` func GetString(this *User) string func String(this User) string ``` 如果用**u.GetString()/u.String()**的方式调用这两个方法时,golang会自动以对应的类型传参: ``` u := User{} x := u.GetString() //自动以对应的*User类型传参,和GetString(&u)效果一样 u1 := &User{} x = u1.String() //自动以对应的User类型传参,和String(*u1)效果一样 ``` 由于***User**和**User**类型实现了不同的方法, 它们在类型判断时也会有不同的表现: ``` type I1 interface { GetString() string } type I2 interface { String() string } var u User var i1 I1 = u //会panic, 因为类型User没有实现GetString() string u1 := &User{} var i2 I2 = u1//会panic, 因为类型*User没有实现String() string ```