<p>I'm probably stuck in an OO mindset seeking inheritance, but is there any way to have a method work on multiple structs beyond embedding? I know that I can embed another struct so that the methods are promoted for the original struct but they only work on the inner struct. Is there any way I can make a method that works on the outer struct for both (like if I wanted to json.Marshal the entire struct).</p>
<p>Example here (I'd like to not have 2 encode functions):
<a href="http://play.golang.org/p/-Hr_zqU-o0" rel="nofollow">http://play.golang.org/p/-Hr_zqU-o0</a></p>
<p>Like I mentioned, I have a feeling i'm just returning to my OOP stuff and that I should make a function that has no receiver which I'd then pass the structs into for encoding, etc. How would you solve this?</p>
<p>Thanks!</p>
<hr/>**评论:**<br/><br/>nw0428: <pre><p>First of all, it will make your life easier to not think in "methods" go has functions not methods.
You can have your function take in an interface. <a href="https://godoc.org/golang.org/x/tools/go/types#Type" rel="nofollow">https://godoc.org/golang.org/x/tools/go/types#Type</a></p>
<p>This allows your function to take in any struct.</p>
<p>edit: Said Type meant empty interface "interface{}"
Maybe like this: <a href="http://play.golang.org/p/Sad8Y1Ibd7" rel="nofollow">http://play.golang.org/p/Sad8Y1Ibd7</a></p></pre>JakeTheDev: <pre><p>I guess just putting the json.Marshal in there was a bad example since I do a ton of other things to it. But I see what you're getting at. I guess I'm just so used to wanting to build an object to pass things to. </p>
<p>Thanks for your help</p></pre>nw0428: <pre><p>The other thing I should mention is that it sounds like you are looking for an interface.
<a href="https://gobyexample.com/interfaces" rel="nofollow">https://gobyexample.com/interfaces</a></p></pre>nuunien: <pre><p><a href="https://golang.org/doc/effective_go.html#methods" rel="nofollow">uh?</a></p></pre>echophant: <pre><p><a href="http://play.golang.org/p/aTJxLgB7Gk" rel="nofollow">Working with your example</a></p>
<p>For the example you provided, since marshaling JSON works on type
interface{}
anyway, you hardly even need to make a function for it at all, because it will accept any struct. One thing to note: encoding to JSON will only use exported (capitalized) fields, so I've capitalized your members accordingly. For examples not strictly about marshaling JSON, you'll want to use <a href="https://gobyexample.com/interfaces" rel="nofollow">interfaces</a>.</p></pre>JakeTheDev: <pre><p>I suppose my response to <a href="/u/nw0428" rel="nofollow">/u/nw0428</a> is also applicable here too.</p>
<p>Gotta get out of OOP -- thanks!</p></pre>
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传