golang中首字母大写的变量、结构体、函数,都是可外部调用的,首字母小写的都是内部用。这点很简洁、很方便,不再用其它关键字来区别了,对比其它语言,golang的代码确实简单实用,开发效率高。但是也有不方便的地方,今天就遇到了,记录一下,加深印象。
在做的一个前后端分离的物联网平台,前端vue,后端golang,一个传递用户信息的接口/user/info,go中做了model结构如下:
package viewModels
type User struct {
Roles []string
Introduction string
Avatar string
Name string
}
然后HTTP请求返回是这样的:
data := viewModels.User{Roles: userRoles, Introduction: "", Avatar: avatar, Name: userName}
c.JSON(http.StatusOK, gin.H{
"code": code,
"msg": e.GetMsg(code),
"data": data,
})
这样通过http发给前端的报文里,response的data对象内是这样安排的:
Roles: (2) ["admin", "test", __ob__: Observer]
Introduction: ""
Avatar: "https://xyz/avatar.JPG"
Name: "admin"
发现里面的变量名都是和go后台的结构体一样,大写开头。一切都很简单方便不是?但是很不巧,在vue前台,之前写的各种代码都是用的小写:
{ roles, name, avatar, introduction }
所以,这里要么把前端的都撸成大写开头(工作不小啊),要么要新建个中转对象data:
const data = { roles: res.Roles, name: res.Name, avatar: res.Avatar, introduction: res.Introduction }
不简洁、不漂亮了! 当然,可以解决问题。 不可否认,博主才疏学浅,我相信肯定有比我这个更好的解决方法,大家可以尝试。
感悟:任何的设计,都是有一得有一失;人生的选择也是这样,得到了A,就会失去B,同时,失去了C,也会得到D。没有全面的赢家!
得到时,不要过分高兴,可能你没有意识到,也失去某些东西;
失去时,也不过分伤心,面对困难提高能力,得到了人生经验。
带着使命来到世上的你,给他人提供价值,才有价值