Go语言有函数还有方法,神奇不。这有点像python了。javascript
func function_name( [parameter list] ) [return_types] { 函数体 }
举个例子:html
/* 函数返回两个数的最大值 */ func max(num1, num2 int) int { /* 声明局部变量 */ var result int if (num1 > num2) { result = num1 } else { result = num2 } return result }
var a int = 1 var b int = 2 var c int c = max(a, b)
func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("hello", "kris") fmt.Println(a, b) }
是否是有点像python.java
传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中若是对参数进行修改,将不会影响到实际参数。python
基础类型都是值传递,地球人都知道。git
引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。github
func swap(x *int, y *int) { var temp int temp = *x /* 保持 x 地址上的值 */ *x = *y /* 将 y 值赋给 x */ *y = temp /* 将 temp 值赋给 y */ }
天呀,我感受本身又回到了上学时代。(感受本身好年轻)golang
Go 语言能够很灵活的建立函数,并做为值使用。闭包
func main(){ /* 声明函数变量 */ getSquareRoot := func(x float64) float64 { return math.Sqrt(x) } /* 使用函数 */ fmt.Println(getSquareRoot(9)) }
是否是感受像javascript语言。函数
Go 语言支持匿名函数,可做为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于能够直接使用函数内的变量,没必要申明。学习
func getSequence() func() int { i := 0 return func() int { i += 1 return i } } func main() { next := getSequence() fmt.Println(next()) fmt.Println(next()) }
这个写法太。。。完美(真赶时髦)。我猜 func() int
是闭包的返回值。
Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者能够是命名类型或者结构体类型的一个值或者是一个指针。全部给定类型的方法属于该类型的方法集。
func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/ }
举个例子:
/* 定义结构体 */ type Circle struct { radius float64 } func main() { var c1 Circle c1.radius = 10.00 fmt.Println("Area of Circle(c1) = ", c1.getArea()) } //该 method 属于 Circle 类型对象中的方法 func (c Circle) getArea() float64 { //c.radius 即为 Circle 类型对象中的属性 return 3.14 * c.radius * c.radius }
感受写法很别扭,Circle给个人感受就是一个Java的类,而getArea()是这个类的方法。估计只要在函数前面加上(c Circle)
的都是属于c的方法。