<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
與大部分語言一致,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) } }
Go語言中並沒有類,所以在Go語言中提供了一種類似函數定義的方法定義,通過在函數名稱前增加Reciever型別,實現一種類似類中方法的定義,方法可以使用Reciver的屬性。我們來看一下語法:
func (Reciever-Name Type) function_name(Parameter-list) (Multiple Return-Types){ // function body.. }
由於大部分定義內容與上述函數定義相同,這裡就不再贅述,只介紹一下新增的部分:
Reciever-Name:型別必須是自定義型別,不能是內建的int, string等,使用的話,在編譯階段就會報錯
我們來看一個通過基本型別實現的方法,這裡使用到了一個未曾學習到的知識點——自定義型別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)一起使用,這些都會在後面進行詳細講解,這裡只需要瞭解即可。這裡介紹一個簡單的例子,我們來計算長方形的面積。
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 %vn", rectArea) }
到此這篇關於一文了解Go語言中的函數與方法的用法的文章就介紹到這了,更多相關Go語言 函數 方法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45