【Go】函數的使用

目錄

函數返回多個值

init函數和import

init函數

main函數

函數的參數

值傳遞

引用傳遞(指針)


函數返回多個值

用法如下:

package mainimport ("fmt""strconv"
)// 返回多個返回值,無參數名
func MultFunc1(a int, b int) (int, string) {a = a + 1b = b + 1//數字轉字符串itoa := strconv.Itoa(b)return a, itoa}// 返回多個返回值,有參數名
func MultFunc2(a int, b int) (r1 int, r2 int) {//形參有默認值 是0fmt.Println("形參r1: ", r1, "r2: ", r2)r1 = a + 1r2 = b + 1return}func MultFunc3(a int, b int) (int, int) {a = a + 1b = b + 1return a, b}func main() {var a, b = MultFunc1(1, 2)fmt.Println("a=", a, "b=", b)var c, d = MultFunc2(3, 4)fmt.Println("c=", c, "d=", d)var e, f = MultFunc3(5, 6)fmt.Println("e=", e, "f=", f)
}

形參是有默認值的 0 ""(空串) false?

init函數和import

init函數

init函數可以在package main 中,可在其他package中,可在同一個package中出現多次

main函數

main 函數只能在package main中。

執行順序

golang中有兩個保留的函數:init函數(能夠應用于所有的package)和main函數(只能用于package main)。這兩個函數在定義的時候不能有任何的返回值和參數

雖然package里面可以寫任意多個init函數,但這無論是對于可讀性還是以后的可維護性來說都是不方便的,所以建議用戶在一個package中每個文件只寫一個init函數。

程序的初始化和執行都始于main包

如果main包還導入了其它的包,那么就會在編譯時將它們依次導入。有時一個包會被多個包同時導入,那么它只會被導入一次(例如很多包可能都會用到fmt包,但它只會被導入一次,因為沒有必要導入多次)。

當一個包被導入時,如果該包還導入了其它的包,那么會先將其它包導入進來,然后再對這些包中的包級常量和變量進行初始化,接著執行init函數(如果有的話),依次類推。

等所有被導入的包都加載完畢了,就會開始對main包中的包級常量和變量進行初始化,然后執行main包中的init函數(如果存在的話),最后執行main函數。下圖詳細地解釋了整個執行過程:

測試例子

代碼結構如下

Lib1.go

package lib1import "fmt"func init() {fmt.Print("我是lib1")
}func Lib1Test() {fmt.Println("lib1Test")
}

Lib2.go

package lib2import ("fmt"
)func init() {fmt.Print("我是Lib2")
}
func Lib2Test() {fmt.Println("lib2Test")
}

main.go

注意:如果文中沒有使用,就需要家一個_

package mainimport ("fmt""goProject/aaa/lib1""goProject/aaa/lib2"
)func init() {fmt.Print("我是Lib3.go")
}func main() {lib1.Lib1Test()lib2.Lib2Test()}

注意看打印的結果

輸出的順序與我們上面圖給出的順序是一致的

函數的參數

函數如果使用參數,該變量可稱為函數的形參

形參就像是定義在函數體內的局部變量

調用函數,可以通過兩種方式傳遞參數:

值傳遞

值傳遞是指在調用函數的時候將實際的參數復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,則不會影響到實際的參數。

默認情況下,Go 語言使用的是值傳遞,即在調用過程中不會影響到實際參數。

下面使用一個經典的案例:兩數交換

package mainimport "fmt"// 值傳遞
func Swap1(a int, b int) {var temp = aa = bb = temp}// 引用傳遞
func Swap2(a *int, b *int) {var temp = *a*a = *b*b = temp}func main() {a := 1b := 2Swap1(a, b)fmt.Println("值傳遞 a=", a, "b=", b)Swap2(&a, &b)fmt.Println("引用傳遞 a=", a, "b=", b)
}

執行結果如下:

第一種值傳遞的方式交換失敗,是因為副本拷貝

第一種是引用傳遞,他是傳遞地址,那么引出了指針

引用傳遞(指針)

指針在C++中有用到。引用傳遞是指在調用函數時將實際參數的地址傳遞到函數中,那么在函數中對參數所進行的修改,將影響到實際參數。

詳情,可以去看看C++,我也去看看!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43072.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

相鄰不同數字的標記

鏈接:登錄—專業IT筆試面試備考平臺_牛客網 來源:牛客網 時間限制:C/C 1秒,其他語言2秒 空間限制:C/C 262144K,其他語言524288K 64bit IO Format: %lld 題目描述 小紅拿到了一個數組,每個數…

ctfshow web入門 nodejs web334--web337

web334 有個文件下載之后改后綴為zip加壓就可以得到兩個文件 一個文件類似于index.php 還有一個就是登錄密碼登錄成功就有flag username:ctfshow password:123456因為 return name!CTFSHOW && item.username name.toUpperCase() && item.password passwor…

SpringBoot的熱部署和日志體系

SpringBoot的熱部署 每次修改完代碼,想看效果的話,不用每次都重新啟動代碼,等待項目重啟 這樣就可以了 JDK官方提出的日志框架:Jul log4j的使用方式: (1)引入maven依賴 (2&#x…

軟件開發語言都有哪些?

構建高效、穩定且安全的服務器應用,開發者們需要選擇合適的編程語言。以下是幾種流行的網絡服務器開發語言,每種語言都有其獨特的特性和適用場景。 Java Java是一種廣泛使用的高級編程語言,以其“一次編寫,到處運行”的理念而著稱…

光譜優化算法(Lightning Search Optimization, LSO)及其Python和MATLAB實現

光譜優化算法(Lightning Search Optimization, LSO)是一種基于自然界雷暴現象啟發的新型優化算法,旨在尋找最優解或近似最優解的問題。LSO算法不僅可以用于連續優化問題,還能用于離散優化問題。接下來將詳細介紹LSO算法的背景、原…

內鏡像源-大全

1、pip安裝鏡像 阿里鏡像 https://developer.aliyun.com/mirror/ 清華大學開源軟件鏡像 https://mirrors.tuna.tsinghua.edu.cn/ 浙大鏡像源 http://mirrors.zju.edu.cn/ 網易鏡像源 https://mirrors.163.com/ sohu鏡像源 https://mirrors.sohu.com/ 中科大鏡像 https://mirr…

OS Copilot測評-CSDN

登錄控制臺 安裝插件 sudo yum install -y os-copilot效果如下 配置 AccessKey ID 與 AccessKey Secret 注意安全,使用完成后,別忘了去控制臺刪除,一般情況使用子Key就可以 檢測是否可用 co hi實際操作(當前為官方案例請求) 實操1&…

RoPE 旋轉位置編碼,詳細解釋(下)NLP 面試的女生徹底說明白了

RoPE 旋轉位置編碼,詳細解釋(下)NLP 面試的女生徹底說明白了 原創 看圖學 看圖學 2024年07月01日 07:55 北京 書接上文,上文見:這么解釋 RoPE 旋轉位置編碼,女朋友睜大了雙眼(上) …

C++ explicit 用法

一、概述 explicit關鍵字用于防止構造函數或轉換操作符在不明確的情況下被隱式調用,從而避免意外的類型轉換。這在類的設計中非常有用,可以增強代碼的可讀性和安全性。 二、用法示例 1. 用于構造函數 假設有一個簡單的類 A: class A { p…

metersphere鏈接騰訊郵箱步驟

1、打開騰訊郵箱生成授權碼 路徑:設置-賬戶-賬戶安全 生成的授權碼只會展示1次,注意保存 2、在系統設置-系統參數設置-郵件設置填寫授權碼和SMTP信息 SMTP信息在郵箱的客戶端設置中可以獲取到對應的信息 3、信息填寫完后,可以測試連接&…

python中TensorFlow框架的簡單深度學習項目圖像分類示例

??引言 👍👍點關注編程夢想家(大學生版)-CSDN博客不迷路?? 這個示例項目使用了CIFAR-10數據集,這是一個包含10個類別的60,000張32x32彩色圖像的數據集,類別包括飛機、汽車、鳥類等。模型是一個簡單的…

Pytest單元測試系列[v1.0.0][高級技巧]

playwright結合pytest使用 安裝配置環境 PS D:\Programs\Python\com.davieyang.demo> pip install pytest-playwright Collecting pytest-playwrightDownloading pytest_playwright-0.3.0-py3-none-any.whl (10 kB) Requirement already satisfied: pytest in c:\program …

集成sa-token前后端分離部署配置corsFliter解決跨域失效的真正原因

文章目錄 1.前言2.問題復現3.解決方法3.1 方式一:后端修改CorsFilter源碼3.2 方式二:前端禁用或移除瀏覽器referrer-policy引用者策略 4.總結 1.前言 緣由請參看下面這篇文章:sa-token前后端分離解決跨域的正確姿勢 https://mp.weixin.qq.co…

桌面記筆記的軟件:能加密的筆記app

在日常生活和工作中,很多人都有記筆記的習慣。無論是記錄會議要點、學習心得,還是生活中的點滴靈感,筆記都是我們不可或缺的好幫手。然而,傳統的紙筆記錄方式逐漸不能滿足現代人的需求,因為紙質筆記不易保存、查找困難…

STM32 - SPI硬件外設

配合我的上一篇SPI ??????通信 協議-CSDN博客一起理解更佳,本文后看 SPI 是由摩托羅拉(Motorola)公司開發的全雙工同步串行總線,是 MCU 和外圍設備之間進行通信的同步串行端口。主要應用在EEPROM、Flash、RTC、ADC、網絡控制器、MCU、DSP以及數字信…

網上怎么樣可以掙錢,分享幾種可以讓你在家賺錢的兼職項目

當今社會,壓力越來越大,工作、家庭、生活等等,方方面面都需要錢,僅靠一份工作賺錢,已經很難滿足我們的需求。所以很多人都會嘗試做一些副業,兼職來補貼家用。 現在呢,有很多人都想在網上賺錢&am…

微型導軌如何提升數控機床的穩定性?

數控機床是加工設備中常用的機床,精度和穩定性是衡量數控機床性能的重要指標。而微型導軌作為數控機床中重要的傳動元件,數控機床與其具體結構性能是密不可分的,那么微型導軌如何提高數控機床的穩定性呢? 1、微型導軌通過采用先進…

githup開了代理push不上去

你們好,我是金金金。 場景 git push出錯 解決 cmd查看 git config --global http.proxy git config --global https.proxy 如果什么都沒有,代表沒設置全局代理,此時如果你開了代理,則執行如下,設置代理 git con…

關于SQL NOT IN判斷失效的情況記錄

1.準備測試數據 CREATE TABLE tmp_1 (val integer);CREATE TABLE tmp_2 (val integer, val2 integer);INSERT INTO tmp_1 (val) VALUES (1); INSERT INTO tmp_1 (val) VALUES (2); INSERT INTO tmp_2 (val) VALUES (1); INSERT INTO tmp_2 (val, val2) VALUES (NULL,0);2.測…

掃地機器人工作原理

掃地機器人的工作原理主要可以歸納為以下幾個步驟: 一、啟動與建圖 掃地機器人開機后,通常會從充電底座啟動。使用激光導航或視覺導航技術的掃地機器人會開始掃描周圍環境,繪制室內地圖。激光導航的掃地機器人通過激光發射器和接收器測量機…