函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。 函数声明告诉了编译器函数的名称,返回类型,和参数。 Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。
函数定义
func function_name( [parameter list] ) [return_types] {
函数体
}
很简单,跟C语言和php和java和nodejs和javascript差不多
package main
import "fmt"
// 返回两个数的最大值
func max(num1, num2 int) int {
var result int
if num1 > num2 {
result = num1
} else {
result = num2
}
return result
}
func main() {
var a int = 200
var b int = 300
fmt.Println(max(a, b))
}
go的函数可以返回多个值
很简单,自己理解
package main
import "fmt"
// 返回两个数的最大值
func max(num1, num2 int) int {
var result int
if num1 > num2 {
result = num1
} else {
result = num2
}
return result
}
func swap(x, y string) (string, string) { // 注意屁股这里 (string, string) 用来决定返回多少个值
return y, x
}
func main() {
var a int = 200
var b int = 300
fmt.Println(max(a, b))
var c string = "下北泽"
var d string = "日本"
e, f := swap("IceCliffs", "Google")
fmt.Println(swap(d, c))
fmt.Println(swap(e, f))
}
Go函数变量作用域
作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。 Go 语言中变量可以在三个地方声明:
- 函数内定义的变量称为局部变量
- 函数外定义的变量称为全局变量
- 函数定义中的变量称为形式参数
局部变量
跟其它语言一样,非常简单
package main
import "fmt"
func main() {
var a, b, c int
a = 10
b = 20
c = a + b
fmt.Printf("结果: a = %d, b = %d and c = %d\n", a, b, c)
}
全局变量
package main
import "fmt"
// 这玩意就是全局变量
var gVar int = 114514
func main() {
var a, b, c int
a = 10
b = 20
c = a + b
fmt.Printf("结果: a = %d, b = %d and c = %d\n", a, b, c)
fmt.Println("全局变量:", gVar)
}
形参和实参
跟别的语言一样,吐血,,非常简单,自己理解吧
package main
import "fmt"
var a int = 114
func main() {
var a int = 10
var b int = 20
var c int = 0
fmt.Printf("main()函数中 a = %d\n", a)
c = sum(a, b)
fmt.Printf("main()函数中 c = %d\n", c)
}
/* 函数定义-两数相加 */
func sum(a, b int) int {
fmt.Printf("sum() 函数中 a = %d\n", a)
fmt.Printf("sum() 函数中 b = %d\n", b)
return a + b
}
总的来说,上面这个程序会输出一系列信息,包括main()函数中的局部变量a的值、sum()函数中的参数a和b的值,以及main()函数中的局部变量c的值。最后,程序会计算并打印出a和b的和,并将结果赋给c。
数组
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
相对于去声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], numbers[1] ..., numbers[99] 更加方便且易于扩展。
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
(引用自菜鸟教程)
声明一维数组
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var variable_name [SIZE] variable_type
以上为一维数组的定义方式。例如以下定义了数组 balance 长度为 10 类型为 float32:
var balance [10] float32
初始化数组
很简单
package main
import "fmt"
func main() {
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
for key, value := range balance {
fmt.Println(key+1, "->", value)
}
}
简简单单打印一个杨辉三角
package main
import "fmt"
func GetYangHuiTriangleNextLine(inArr []int) []int {
var out []int
var i int
arrLen := len(inArr)
out = append(out, 1)
if 0 == arrLen {
return out
}
for i = 0; i < arrLen-1; i++ {
out = append(out, inArr[i]+inArr[i+1])
}
out = append(out, 1)
return out
}
func main() {
nums := []int{}
var i int
for i = 0; i < 10; i++ {
nums = GetYangHuiTriangleNextLine(nums)
fmt.Println(nums)
}
}