在win11上用hertz的protobuf生成工具和gorm的一些细节问题 | 青训营笔记

284 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第十二天

在之前我学习了GO框架的三件套(Gorm、Kitex、Hertz)之后 开始尝试着实践这些知识,这篇文章也是分享我的错误经验和心路历程。

关于gorm的实践细节问题

首先我在课上了解到gorm的一些相关概念之后,就知道这个框架主要是用来“玩”数据库的。

“这不JDBC(java技术)吗!”———当时自信的我如是说到!

首先我先按照官方文档上建议的,安装环境

go get -u gorm.io/gorm

然后我就看了一眼官方文档上的快速入门,发现有一丝不对劲

db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})

这是在官方文档上的获取数据库对象的代码

db, err := gorm.Open(
    mysql.Open("user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"),
    &gorm.Config{}
)

这是老师上课时展示的代码

到这里我愣了一下,不过我想着这个可能是官方文档的快速入门针对于不同数据库的统一简称吧。

我也没有多想就继续安装数据库驱动那些必备的东西

当我一切都弄好之后,尝试调用数据的时候,却发现它返回的值全是0或者“”,只有id是正常返回的

image.png 我反反复复检查了好久,生成数据库对象是对的,sql语句是对的

我还拿了同组的gorm项目跑了一下,他能运行我的就不行还是那个结果

之后我网上查资料才发现

我的结构体写的不对

type Customer struct {
	ID int64
	name string `gorm:"column:name"`
	gender int64 `gorm:"column:gender"`
	cost int64 `gorm:"column:cost"`
	point int64 `gorm:"column:points"`
}

我当时是这样写的,这个对于其他语言来说可能没有什么问题

但是go不一样,go得换成这样的

type Customer struct {
   ID int64
   Name string `gorm:"column:name"`
   Gender int64 `gorm:"column:gender"`
   Cost int64 `gorm:"column:cost"`
   Point int64 `gorm:"column:points"`
}

Go里面,是通过首字母的大小写来控制封装,大写公开,小写隐藏,而我在Java里小写习惯了,这里也很自然的小写了

大写了之后果然结果就出来了

image.png

关于hertz的实践细节问题

同样的,我在课上了解到hertz框架的用途之后,也就直接打算动手实践了

首先也是安装环境那些啥的这里也就不过多讲了

反正前面hertz的示例代码的生成和运行都很顺利

然后,我在官方文档上看到了

image.png 这个基于protobuf IDL创建项目当时就心动了,马上开始着手实践

但是我这个东西弄了很久,然后它报了一个这个错误

image.png

翻译一下就是编译时在hz调用proto-gen-hertz的时候需要生成软链接(symlink)

但是呢,系统没给权限

image.png

然后我就尝试着默认以管理者的身份运行那个hz.exe

image.png

结果,确实不报错了,但是相应的service代码还是没有给我生成出来

我猜测这个大概是因为在每一次以管理者的身份运行那个hz.exe的时候,那个win系统就会让你确认一遍是不是真的要给权限,当你确认之后呢,它会重新打开那个程序,所以那个程序前面的命令啥的全没了。

然后我就上网找资料,结果我发现原来windows有一个开发者模式

image.png

只要把这个打开就好了

我的代码也成功生成了!!!

参考文档: