XCFOX
2022-01-22 19:47:47 +08:00
有一说一,Go 语言是真的破烂。
拿 ORM 场景举例来说。
正常(TypeORM)是这样的:
```
const article = await articleRepository.findOne({ title:"Tales of Ten Worlds",published:true });
```
从 文字表里取一篇文章,取出来的变量直接从 findOne() 函数里传出来,非常顺畅。
Go (gorm) 语言是这样的:
```
var article Article
db.Where(&Article{Title: "Tales of Ten Worlds", Published: true}).First(&article)
```
先声明 article 为 Article ,再传指针到 First() 里,一下子打破了函数式编程的 「没有"副作用"」「不修改状态」的教条,这里将 article 的类型改为其他也不会有编译时错误。
或者这样(ent)的:
```
article :=client.Article.Query().
Where(article.TitleEQ("Tales of Ten Worlds"),article.PublishedEQ(true)).Limit(1)
```
这样确保了编译时类型安全但将查询条件改成了指令式的罗列,损失了简洁性。
Go 语言自身的缺陷也是对开发者的限制,比如 Go 语言的 ORM 和 C#、php 、TypeScript 之流比就显得 too simple 。