<p>Hello,</p>
<p>i'm fairly new to Go and i wanna mainly use to for web-development. Coming from PHP and being used to frameworks doing everything for me, this seems to be quite a challenge :P. I decided to start building tools that i'd need in order to not go mental, one of those tools would be a small "ORM" that helps keeping my models (structs) in sync with the database, in this case Postgres. </p>
<p>I want to build a CLI tool that helps generating getters/setters and update the database schema. Reflections seem to be the right way to do so, but i have 1 problem: how do i use a struct inside my compiled CLI-tool? F.e. i need it to do following: </p>
<pre><code>$mytool generate mystruct -> generate getters/setters for file "mystruct.go"
</code></pre>
<p>and </p>
<pre><code>$mytool schema:update -> look at all struct files and update DB for changes
</code></pre>
<p>My problem is: how do i use a struct based on an argument? I can't import it, because the tool is already compiled, right? What am i missing?</p>
<p>Regards</p>
<hr/>**评论:**<br/><br/>ElectricSpock: <pre><p>This doesn't sound like a reflection problem, rather parsing the code. I don't want to do the full research for you, but I think you just want to generate AST from the file. Why not starting your research with this package: <a href="https://golang.org/pkg/go/ast/" rel="nofollow">https://golang.org/pkg/go/ast/</a>.</p>
<p>EDIT: Actually, there's parsing package as well: <a href="https://golang.org/pkg/go/parser/" rel="nofollow">https://golang.org/pkg/go/parser/</a>.</p></pre>ChristophBerger: <pre><p>There are a couple of ORM libraries available on GitHub (like gorm, gorp, or xorm, just to name a few popular ones). Would one of these fit your purposes? (Disclaimer: I don't know any of these in detail.) </p>
<p>Or if you want to explicitly write your own ORM tool, these libraries would show how others have approached the same problem. </p></pre>beertocode: <pre><p>Agree with ChristophBerger. Maybe have a look at ORM tools first. E.g. have a look at gorm:
<a href="https://github.com/jinzhu/gorm" rel="nofollow">https://github.com/jinzhu/gorm</a></p>
<p>You can just define the struct and let gorm create the DB for you, then you can retrieve objects and map them to the struct or save a struct straight to the database without writing any getters or setters. (to be honest it sounds odd a bit to me if you want to have code generated for every single get/set. So, I might misunderstood you). Another cool thing is automigration feature. When you e.g. add a new field into a struct, gorm can automatically create that new column for you.</p>
<p>However, so far I feel that the go community tend to rather build the things straight from the standard library. So you should always consider whether it's faster to develop now and easier to maintain later if you just write a few functions by yourself rather than relying on an ORM.</p>
<p>Have fun with go!</p></pre>
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传