go语法笔记 函数和数组篇 | 青训营笔记

48 阅读4分钟

函数是基本的代码块,用于执行一个任务。 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)
    }
}