網站首頁 編程語言 正文
函數定義語法
與大部分語言一致,Go語言中的函數定義與其他語言基本一致
func function_name(Parameter-list) { // function body... } func function_name(Parameter-list) Return-Type { // function body... } func function_name(Parameter-list) (Multiple Return-Types){ // function body.. }
func: 函數定義關鍵字
function_name: 函數名稱,Go語言主要使用camel-case(駝峰)命名的方式,還根據函數的性質,用首字母大小寫區分作用,具體會在后面專門的章節講解Go語言的規范
Parameter-list: 參數列表,如果沒有可以忽略
Return-Type/Multiple Return-Types: 返回值的類型,即return返回值的類型,這里特別將三種形式進行了區分:
- 無返回值/單一返回值/多返回值
- 另外兩種的細小的區別在于括號的使用,單一返回類型一般不再添加括號,而多返回值則需要添加括號
- 另外為了美觀,參數列表后面的括號,建議與返回類型之間有一個空格
函數定義示例
無返回值函數
func HelloFunc() { fmt.Println("Hello, World") }
單一返回值函數
本示例中演示了參數定義方法和返回值類型定義方法
func HelloFunc(msg string) string { return "Hello, " + msg }
多返回值函數
第二個返回值的類型通常用于回傳錯誤,這樣方便程序進行異常處理
func HelloFunc(msg string) (string, error) { return "Hello, " + msg, nil }
我們再來看一下完整的代碼實現,主函數中調用HelloFunc時,也需要兩個變量接收相應的值
package main import "fmt" func HelloFunc(msg string) (string, error) { return "Hello, " + msg, nil } func main() { printString, err := HelloFunc("World") if err == nil { fmt.Println(printString) } }
方法(Method)定義
Go語言中并沒有類,所以在Go語言中提供了一種類似函數定義的方法定義,通過在函數名稱前增加Reciever類型,實現一種類似類中方法的定義,方法可以使用Reciver的屬性。我們來看一下語法:
func (Reciever-Name Type) function_name(Parameter-list) (Multiple Return-Types){ // function body.. }
由于大部分定義內容與上述函數定義相同,這里就不再贅述,只介紹一下新增的部分:
Reciever-Name:類型必須是自定義類型,不能是內置的int, string等,使用的話,在編譯階段就會報錯
方法(Method)示例
基本類型
我們來看一個通過基本類型實現的方法,這里使用到了一個未曾學習到的知識點——自定義類型type,后面還會詳細講解,不用在此處糾結。這句含義就是通過自定義類型mystring再次定義的變量,本質上與string同一類型。
type mystring string
這里注意我們的函數定義,在函數名前,多了(msg mystring)的定義,而在函數體內,我們也可以直接使用msg
func (msg mystring) HelloFunc() { str := "Hello, " + msg fmt.Println(str) }
而在main函數中進行調用時,與上面的函數調用不同,我們直接使用調用mymsg的方法HelloFunc,實現了與上面例子類似的方法
var mymsg mystring mymsg = "World" mymsg.HelloFunc()
完整代碼如下所示
package main import "fmt" type mystring string func (msg mystring) HelloFunc() { str := "Hello, " + msg fmt.Println(str) } func main() { var mymsg mystring mymsg = "World" mymsg.HelloFunc() }
結構體類型
其實從各個項目的源代碼來看,方法還是更多的與結構體(struct)和接口(interface)一起使用,這些都會在后面進行詳細講解,這里只需要了解即可。這里介紹一個簡單的例子,我們來計算長方形的面積。
- 定義了一個結構體rect,其中包含長和寬兩個屬性
- 計算面積的方法area(),Reciver定義為結構體類型,這樣方法體內,就可以使用長和寬計算面積
- 主函數中,定義了一個結構體,并且初始化長和寬分別為3和4
- 調用自定義結構體的r.area()完成面積計算
package main import "fmt" type rect struct { width float64 height float64 } func (r rect) area() float64 { return r.width * r.height } func main() { r := rect{3, 4} rectArea := r.area() fmt.Printf("Rect area is %v\n", rectArea) }
原文鏈接:https://blog.csdn.net/xiaoquqi/article/details/125592623
相關推薦
- 2022-10-05 VScode中添加頭文件和源文件(C/C++)的方法_C 語言
- 2022-11-19 Linux下定時自動備份Docker中所有SqlServer數據庫的腳本_docker
- 2022-05-27 Jmeter通過OS進程取樣器調用Python腳本實現參數互傳_python
- 2023-07-15 css 多余部分用省略號代替
- 2022-03-21 .NetCore使用Swagger+API多版本控制的流程分析_實用技巧
- 2023-02-07 Go動態調用函數的實例教程_Golang
- 2023-01-30 delphi?判斷字符串是否為純字母組合的函數_Delphi
- 2022-09-16 nginx緩存以及清除緩存的使用_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支