教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go语言 接口结构体互相转换 匿名接口 匿名结构体

go语言 接口结构体互相转换 匿名接口 匿名结构体

发布时间:2021-12-09   编辑:jiaochengji.com
教程集为您提供go语言 接口结构体互相转换 匿名接口 匿名结构体等资源,欢迎您收藏本站,我们将为您提供最新的go语言 接口结构体互相转换 匿名接口 匿名结构体资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

go的接口结构体几种转换情况

<ul><li>1.结构体指针类型赋值给接口
2.接口转换成结构体指针类型
3.接口之间相互转化</li><li>-结构体内部嵌入接口变量有何目的? 其他结构体指针可以赋值给这个接口变量
-结构体内部嵌入匿名接口有何目的? 可以直接实例化一个结构体指针,接口之间可以相互转换,可以之间调用接口的方法</li><li>go的接口断言 var p interface{} //或者其他接口类型 v, err := p.(string)</li><li>类似于C的 void *p = arg; char *body = (char*)p;</li></ul><pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> socketPeer <span class="token keyword">struct</span> <span class="token punctuation">{</span> id <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> socksession <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> SessionManager <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Session <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Peer <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> socketConnector <span class="token keyword">struct</span> <span class="token punctuation">{</span> socketPeer <span class="token comment">//匿名结构体</span> SessionManager<span class="token comment">//匿名接口</span> ses Session <span class="token comment">//接口变量,用于接收转换的结构体指针类型</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>s <span class="token operator">*</span>socketConnector<span class="token punctuation">)</span><span class="token function">GetSesson</span><span class="token punctuation">(</span><span class="token punctuation">)</span> Session<span class="token punctuation">{</span> <span class="token keyword">return</span> s<span class="token punctuation">.</span>ses <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">Newc</span><span class="token punctuation">(</span><span class="token punctuation">)</span> Peer<span class="token punctuation">{</span> s <span class="token operator">:=</span> <span class="token operator">&</span>socketConnector<span class="token punctuation">{</span><span class="token punctuation">}</span> s<span class="token punctuation">.</span>ses <span class="token operator">=</span> <span class="token operator">&</span>socksession<span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token keyword">return</span> s <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> s <span class="token operator">:=</span> <span class="token function">Newc</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%T\n"</span><span class="token punctuation">,</span> s<span class="token punctuation">)</span> <span class="token comment">//接口之间转换 Peer -> Session</span> k <span class="token operator">:=</span> s<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">GetSesson</span><span class="token punctuation">(</span><span class="token punctuation">)</span> Session <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">GetSesson</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%T\n"</span><span class="token punctuation">,</span> k<span class="token punctuation">)</span> <span class="token comment">//接口转换成结构体指针类型 Peer -> *socketConnector</span> k2 <span class="token operator">:=</span> s<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token operator">*</span>socketConnector<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">GetSesson</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%T\n"</span><span class="token punctuation">,</span> k2<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">/* [gdut17@localhost cellnet_test]$ go run test.go *main.socketConnector *main.socksession *main.socksession */</span> </code></pre>

再看一个例子
/*
1.结构体嵌套组合共同实现一个接口,子类结构体指针可以赋值给接口类型吗?<可以>
2.结构体内嵌一个匿名接口,另一个结构体指针赋值给这个匿名接口,那本结构体如何调用这个匿名接口的方法?<通过已有的接口变量转换成这个匿名接口>

*/

<pre><code class="lang-go hljs"> <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> f1 <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">func1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token function">func2</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> f2 <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">myfun</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">//基类</span> <span class="token keyword">type</span> base <span class="token keyword">struct</span> <span class="token punctuation">{</span> b_id <span class="token builtin">int</span> f f1 <span class="token comment">//接口变量</span> <span class="token punctuation">}</span> <span class="token comment">//派生类</span> <span class="token keyword">type</span> son <span class="token keyword">struct</span> <span class="token punctuation">{</span> base f2 <span class="token comment">//匿名接口, 将被初始化为 &other{}</span> s_id <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token comment">//第三方结构体</span> <span class="token keyword">type</span> other <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">//实现f2接口的方法</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>b <span class="token operator">*</span>other<span class="token punctuation">)</span><span class="token function">myfun</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"myfun"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">//base、son分别实现f1接口的方法</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>b <span class="token operator">*</span>base<span class="token punctuation">)</span><span class="token function">func1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"func1"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>s <span class="token operator">*</span>son<span class="token punctuation">)</span><span class="token function">func2</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"func2"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//o := &other{}</span> <span class="token comment">//实例化派生类对象</span> s <span class="token operator">:=</span> <span class="token operator">&</span>son<span class="token punctuation">{</span> f2 <span class="token punctuation">:</span> <span class="token operator">&</span>other<span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> s<span class="token punctuation">.</span>f <span class="token operator">=</span> s <span class="token comment">//s的f接口变量赋值为自身s</span> s<span class="token punctuation">.</span><span class="token function">func1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> s<span class="token punctuation">.</span><span class="token function">func2</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">//测试结构体指针赋值给接口</span> <span class="token keyword">var</span> f f1 f <span class="token operator">=</span> s f<span class="token punctuation">.</span><span class="token function">func1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> f<span class="token punctuation">.</span><span class="token function">func2</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">//测试结构体内部接口变量的转换,调用匿名接口的方法</span> <span class="token comment">//o.myfun()</span> s<span class="token punctuation">.</span>f<span class="token punctuation">.</span><span class="token punctuation">(</span>f2<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">myfun</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

匿名接口与匿名结构体
一、匿名接口

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> f1 <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">fun1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> node1 <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>n <span class="token operator">*</span>node1<span class="token punctuation">)</span><span class="token function">fun1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"fun1"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>n <span class="token operator">*</span>node1<span class="token punctuation">)</span><span class="token function">Anonymous</span><span class="token punctuation">(</span>arg <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token builtin">int</span><span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s\n"</span><span class="token punctuation">,</span> arg<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token number">0</span> <span class="token punctuation">}</span> <span class="token comment">//注意,返回的是f1接口类型</span> <span class="token keyword">func</span> <span class="token function">NewNode</span><span class="token punctuation">(</span><span class="token punctuation">)</span> f1 <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token operator">&</span>node1<span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> f <span class="token operator">:=</span> <span class="token function">NewNode</span><span class="token punctuation">(</span><span class="token punctuation">)</span> f<span class="token punctuation">.</span><span class="token function">fun1</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">/* 这是一个匿名接口,因为结构体node1实现了Anonymous方法,所以f1接口可以转换为这个匿名接口 interface { Anonymous(arg string) int } */</span> <span class="token comment">//1</span> f<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">Anonymous</span><span class="token punctuation">(</span>arg <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token builtin">int</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Anonymous</span><span class="token punctuation">(</span><span class="token string">"qwe"</span><span class="token punctuation">)</span> <span class="token comment">//2</span> fx <span class="token operator">:=</span> f<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">Anonymous</span><span class="token punctuation">(</span>arg <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token builtin">int</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>fx<span class="token punctuation">.</span><span class="token function">Anonymous</span><span class="token punctuation">(</span><span class="token string">"qwe"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

二、匿名结构体

<pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> f <span class="token operator">:=</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span> id <span class="token builtin">int</span> name <span class="token builtin">string</span> <span class="token punctuation">}</span><span class="token punctuation">{</span> id <span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> name <span class="token punctuation">:</span> <span class="token string">"qwe"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"% v\n"</span><span class="token punctuation">,</span> f<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

空接口作为函数参数

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> student <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">test</span><span class="token punctuation">(</span>args <span class="token operator">...</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token boolean">_</span><span class="token punctuation">,</span> v <span class="token operator">:=</span> <span class="token keyword">range</span> args <span class="token punctuation">{</span> <span class="token keyword">switch</span> v<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token keyword">type</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token builtin">int</span><span class="token punctuation">:</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"int"</span><span class="token punctuation">)</span> <span class="token keyword">case</span> <span class="token builtin">string</span><span class="token punctuation">:</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"string"</span><span class="token punctuation">)</span> <span class="token keyword">case</span> student<span class="token punctuation">:</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"student"</span><span class="token punctuation">)</span> <span class="token keyword">case</span> <span class="token operator">*</span>student<span class="token punctuation">:</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"student"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> s <span class="token operator">:=</span> <span class="token function">new</span><span class="token punctuation">(</span>student<span class="token punctuation">)</span> <span class="token comment">//&student{}</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">"2"</span><span class="token punctuation">,</span> student<span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> s<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

反射

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token string">"reflect"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> ChatREQ <span class="token keyword">struct</span> <span class="token punctuation">{</span> Content <span class="token builtin">string</span> <span class="token comment">// 发送的内容</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%v\n"</span><span class="token punctuation">,</span> reflect<span class="token punctuation">.</span><span class="token function">TypeOf</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token operator">*</span>ChatREQ<span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token boolean">nil</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Elem</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//main.ChatREQ</span> <span class="token keyword">var</span> r reflect<span class="token punctuation">.</span>Type <span class="token operator">=</span> reflect<span class="token punctuation">.</span><span class="token function">TypeOf</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token operator">*</span>ChatREQ<span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token boolean">nil</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Elem</span><span class="token punctuation">(</span><span class="token punctuation">)</span> msg <span class="token operator">:=</span> reflect<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span>r<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Interface</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%T\n"</span><span class="token punctuation">,</span> msg<span class="token punctuation">)</span> <span class="token comment">//*main.ChatREQ</span> c <span class="token operator">:=</span> <span class="token function">new</span><span class="token punctuation">(</span>ChatREQ<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%T\n"</span><span class="token punctuation">,</span> c<span class="token punctuation">)</span> <span class="token comment">//*main.ChatREQ</span> <span class="token punctuation">}</span> </code></pre>

接口A包含了接口B,结构体A实现了接口A,结构体B实现了接口B,结构体A内包含了接口A的变量、接口B的匿名字段,请问结构体A能否调用接口B的方法?可以,只需要初始化结构体A时,实例化匿名字段接口B=&B{}

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> A <span class="token keyword">struct</span> <span class="token punctuation">{</span> this InterA InterB <span class="token punctuation">}</span> <span class="token keyword">type</span> B <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> InterA <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">funA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> InterB <span class="token punctuation">}</span> <span class="token keyword">type</span> InterB <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">funB</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>a <span class="token operator">*</span>A<span class="token punctuation">)</span> <span class="token function">funA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"funA"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>b <span class="token operator">*</span>B<span class="token punctuation">)</span> <span class="token function">funB</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"funB"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>a <span class="token operator">*</span>A<span class="token punctuation">)</span> <span class="token function">GetInter</span><span class="token punctuation">(</span><span class="token punctuation">)</span> InterA <span class="token punctuation">{</span> <span class="token keyword">return</span> a<span class="token punctuation">.</span>this <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> a <span class="token operator">:=</span> <span class="token operator">&</span>A<span class="token punctuation">{</span> InterB<span class="token punctuation">:</span> <span class="token operator">&</span>B<span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> a<span class="token punctuation">.</span>this <span class="token operator">=</span> a a<span class="token punctuation">.</span><span class="token function">funA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> a<span class="token punctuation">.</span><span class="token function">GetInter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token punctuation">(</span>InterB<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">funB</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

骚操作

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> Student <span class="token keyword">struct</span> <span class="token punctuation">{</span> id <span class="token builtin">int</span> name <span class="token builtin">string</span> this Inter <span class="token punctuation">}</span> <span class="token keyword">type</span> Inter <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">show</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>s <span class="token operator">*</span>Student<span class="token punctuation">)</span><span class="token function">show</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%d %s\n"</span><span class="token punctuation">,</span> s<span class="token punctuation">.</span>id<span class="token punctuation">,</span> s<span class="token punctuation">.</span>name<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>s <span class="token operator">*</span>Student<span class="token punctuation">)</span><span class="token function">GetName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token builtin">string</span><span class="token punctuation">{</span> <span class="token keyword">return</span> s<span class="token punctuation">.</span>name <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> s <span class="token operator">:=</span> <span class="token operator">&</span>Student<span class="token punctuation">{</span> id <span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> name <span class="token punctuation">:</span> <span class="token string">"qwe"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> s<span class="token punctuation">.</span>this <span class="token operator">=</span> s s<span class="token punctuation">.</span><span class="token function">show</span><span class="token punctuation">(</span><span class="token punctuation">)</span> name <span class="token operator">:=</span> s<span class="token punctuation">.</span>this<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">GetName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">GetName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“go语言 接口结构体互相转换 匿名接口 匿名结构体”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
interface作为struct field,谈谈golang结构体中的匿名接口
Go语言的函数、方法和接口
Go结构体嵌入接口类型
Go语言接口interface
golang 结构体断言_Golang的面向对象编程【结构体、方法、继承、接口】-Go语言中文社区...
Go语言函数类型实现接口
Go语言编程之面向“对象”编程篇
Go语言面组合式向对象编程基础总结
【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
go语言语法自我总结

[关闭]
~ ~