Go中的函數(shù)類型
- 普通函數(shù)
- 匿名函數(shù)
- 類方法
函數(shù)定義
普通函數(shù)的基本組成:關(guān)鍵字func
拆挥、函數(shù)名畔咧、參數(shù)列表娶靡、返回值牧牢、函數(shù)體和返回語句
Go為強類型語言,所以無論參數(shù)還是返回值姿锭,定義函數(shù)時塔鳍,都要聲明類型
func add(a,b int) int {
return a+b
}
Go中函數(shù)本身也為一種數(shù)據(jù)類型
函數(shù)調(diào)用
調(diào)用同一個包中的函數(shù)
即:定義在同一目錄下的Go文件中
直接調(diào)用:
func main() {
fmt.Println(add(1, 2)) // 3
}
調(diào)用其它包中的函數(shù)
將Add()
放到mymath
包中,需要被調(diào)函數(shù)名首字母應(yīng)大寫
package mymath
func Add(a, b int) int {
return a + b
}
在main
包中調(diào)用Add()
:
package main
import (
"fmt"
"mymath"
)
func main() {
fmt.Println(mymath.Add(1, 2)) // 3
}
系統(tǒng)內(nèi)置函數(shù)
函數(shù)名 | 說明 |
---|---|
close |
用于在管道通信中關(guān)閉一個管道 |
len |
用于返回某個類型的長度(字符串呻此、數(shù)組轮纫、切片、字典和管道) |
cap |
用于返回某個類型的最大容量(只能用于數(shù)組焚鲜、切片和管道) |
new 蜡感、make
|
new 和 make 均用于分配內(nèi)存,new 用于值類型和用戶自定義的類型(類)恃泪,make 用于內(nèi)置引用類型(切片郑兴、字典和管道)。它們在使用時將類型作為參數(shù):new(type) 贝乎、make(type) 情连。new(T) 分配類型 T 的零值 并返回其地址,也就是指向類型 T 的指針览效,可以用于基本類型:v := new(int) 却舀。make(T) 返回類型 T 的初始化之后的值,所以 make 不僅分配內(nèi)存地址還會初始化對應(yīng)類型锤灿。 |
copy 挽拔、append
|
分別用于切片的復(fù)制和動態(tài)添加元素 |
panic 、recover
|
兩者均用于錯誤處理機制 |
print 但校、println
|
打印函數(shù)螃诅,在實際開發(fā)中建議使用 fmt 包 |
complex 、real 、imag
|
用于復(fù)數(shù)類型的創(chuàng)建和操作 |
new
和make
new
函數(shù)作用于值類型术裸,僅分配內(nèi)存空間倘是,返回的是指針
make
函數(shù)作用于引用類型,除了分配內(nèi)存空間袭艺,還會對對應(yīng)類型進(jìn)行初始化搀崭,返回的是初始值。
在 Go 語言中
- 引用類型:切片(slice)猾编、字典(map)和管道(channel)瘤睹,
- 值類型: 其它
p1 := new(int) // 返回 int 類型指針,相當(dāng)于 var p1 *int
p2 := new(string) // 返回 string 類型指針
p3 := new([3]int) // 返回數(shù)組類型指針答倡,數(shù)組長度是 3
type Student struct {
id int
name string
grade string
}
p4 := new(Student) // 返回對象類型指針
println("p1: ", p1)
println("p2: ", p2)
println("p3: ", p3)
println("p4: ", p4)
s1 := make([]int, 3) // 返回初始化后的切片類型值轰传,即 []int{0, 0, 0}
m1 := make(map[string]int, 2) // 返回初始化的字典類型值,即散列化的 map 結(jié)構(gòu)
println(len(s1)) // 3
for i, v := range s1 {
println(i, v)
}
println(len(m1)) // 0
m1["test"] = 100
for k, v := range m1 {
println(k, v)
}