教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang函数传参详解

golang函数传参详解

发布时间:2022-03-14   编辑:jiaochengji.com
教程集为您提供golang函数传参详解等资源,欢迎您收藏本站,我们将为您提供最新的golang函数传参详解资源
<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>

***golang中的基本类型分为值类型和引用类型***参考Go中的值类型和引用类型

<h2>
函数传参的两种方式</h2>

<em>1.值传递</em>
<em>2.引用传递</em>

注:

<ol><li>golang函数传参都是以复制变量的方式,不支持引用的方式</li><li>特殊的是:go语言闭包函数对外部变量是以引用的方式使用 参考由"go语言闭包函数对外部变量是以引用的方式使用"引发的闭包探讨</li></ol>

摘自go语言高级编程里的一段话:

<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传递值类型时通常传递指针(在对象较大时能够提升性能,减少内存使用),同时传递类型要做到统一

到此这篇关于“golang函数传参详解”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang 函数传多个参数_Golang中的参数传递示例详解
golang 没有名字参数_说说不知道的Golang中参数传递
想系统学习GO语言(Golang
Go 语言函数
golang基础学习-AES加密
Golang面试题总结
关于php中匿名函数与回调函数的详解
golang中函数,方法和接口的浅析(函数篇)
golang 中的闭包详细解释
Golang语言基础教程:函数的参数

[关闭]
~ ~