<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><h2>
golang传递基本类型的不同</h2>
<ol><li>golang传递值类型是指复制了一份值之后传递,改变形参并不能改变原有实参的值</li></ol><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">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 number">888</span>
<span class="token function">changeint</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">//888</span>
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">changeint</span><span class="token punctuation">(</span>int1 <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
int1 <span class="token operator">=</span> <span class="token number">999</span>
<span class="token punctuation">}</span>
</code></pre>
<ol start="2"><li>golang传递引用类型是传递地址,改变形参会改变原有实参的值</li></ol><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">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 function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span>
a<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">888</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">//map[1:888]</span>
<span class="token function">changemap</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">//map[1:999]</span>
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">changemap</span><span class="token punctuation">(</span>map1 <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
map1<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">999</span>
<span class="token punctuation">}</span>
</code></pre>
<ol start="3"><li>golang引用类型传递之后整体赋值,并不能改变原有实参的值</li></ol><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">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 function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span>
a<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">888</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">//map[1:888]</span>
<span class="token function">changemap</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">//map[1:888]</span>
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">changemap</span><span class="token punctuation">(</span>map1 <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
map2 <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span>
map2<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">999</span>
map1 <span class="token operator">=</span> map2
<span class="token punctuation">}</span>
</code></pre>
注:引用进行第二次赋值的时候,实际上把这份引用指向了另外一个变量,所以之后对这个变量的操作不会影响到外部的对象。
<ol start="4"><li>golang任何类型的全局变量都能被形参改变</li></ol><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">var</span> map1 <span class="token operator">=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</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>
map1<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">888</span>
map2 <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span>
map2<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">999</span>
<span class="token function">changemap</span><span class="token punctuation">(</span>map2<span class="token punctuation">)</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>map1<span class="token punctuation">)</span> <span class="token comment">//map[1:999]</span>
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">changemap</span><span class="token punctuation">(</span>map2 <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
map1 <span class="token operator">=</span> map2
<span class="token punctuation">}</span>
</code></pre>
<ol start="5"><li>golang传递值类型想要改变实参,需要传递值类型的指针</li></ol><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">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 number">888</span>
<span class="token function">changeint</span><span class="token punctuation">(</span><span class="token operator">&</span>a<span class="token punctuation">)</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token comment">//999</span>
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">changeint</span><span class="token punctuation">(</span>int1 <span class="token operator">*</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token operator">*</span>int1 <span class="token operator">=</span> <span class="token number">999</span>
</code></pre>
6.golang传递值类型时通常传递指针(在对象较大时能够提升性能,减少内存使用),同时传递类型要做到统一
<blockquote class="layui-elem-quote" style="width: 100%;overflow:hidden">
作者: csdniter
链接: https://blog.csdn.net/csdniter/article/details/106122520
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
</blockquote>
到此这篇关于“golang函数传参详解”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
golang 函数传多个参数_Golang中的参数传递示例详解
golang 没有名字参数_说说不知道的Golang中参数传递
想系统学习GO语言(Golang
Go 语言函数
golang基础学习-AES加密
Golang面试题总结
关于php中匿名函数与回调函数的详解
golang中函数,方法和接口的浅析(函数篇)
golang 中的闭包详细解释
Golang语言基础教程:函数的参数