golang常用手册:数组、变量作用域、函数

1,470 阅读3分钟

学习是一个趁热打铁的过程,高效的学习能提高大脑反应。所以我们接着了解go语言的数组、变量作用域、函数。

数组

  • 和其他语言申明类似:var variable_name [SIZE] variable_type
  • 所有数据的数据类型相同且唯一
  • 数据长度固定且不可更改
  • 通过位置获取元素

我们可以看看一小段代码:

//定义名称为balance长度为10的float32数组
var balance [10] float32

//初始化
balance = {1000.0, 2.0, 3.4, 7.0, 50.0}

//当然下面这样直接申明和初始化
var balance = [10]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

//如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

//多维数组格式: var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
var a = [3][4]int{  
 {0, 1, 2, 3} ,   /*  第一行索引为 0 */
 {4, 5, 6, 7} ,   /*  第二行索引为 1 */
 {8, 9, 10, 11}   /*  第三行索引为 2 */
}

变量作用域

正如我们了解的其他语言一样,go一样存在了变量以及他的作用域。同样的,跟我们以往的了解一样,go的变量作用域有以下几点:

  • 局部变量(在函数中申明的变量。作用域只在函数体内,参数和返回值变量也是局部变量)
    • 形式参数(函数参数)
  • 全局变量(在函数外申明的变量)
package main

import "fmt"

/* 声明全局变量 */
var g int

func main() {

   /* 声明局部变量 */
   var a, b int

   /* 初始化参数 */
   a = 10
   b = 20
   g = a + b

   fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)
}

注意:go语言中局部变量和全局变量可以同名,但是函数中会悠闲考虑同名的局部变量。

函数

和其他任何语言一样,go语言一样存在函数,函数固定格式如下:

func function_name( [parameter list] ) [return_types] {
   函数体
}

func是函数申明标志,function_name是函数名称,当然函数参数和函数返回值都是可以没有的。

需要注意的是,go语言可以有多个返回值:

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Mahesh", "Kumar")
   fmt.Println(a, b)
}

函数参数传递方式(和C语言类似):

  • 值传递
    • 将需要传递的数据拷贝一份并赋值给被调用函数的参数
  • 引用传递
    • 在调用函数的时候把数据的内存地址传递过去,在函数中依据地址对数据进行修改将会影响实际值。(和c语言中的指针操作一样)

函数的用法:

  • 作为数据值使用(不推荐,一定层面上降低了可读性)
  • 闭包:匿名函数,可在动态编程中使用
  • 方法:包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。
    • 语法:func (variable_name variable_data_type) function_name() [return_type]{···}

关于方法的demo我们参考下菜鸟教程

package main

import (
   "fmt"  
)

/* 定义函数 */
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
}

总结

go语言有着和其他语言的共性,均有数组、变量作用域、函数等基本概念。

其中数组和其他语言的操作方式基本相同,变量作用域也是一样的效果,唯一值得注意的是局部变量和全局变量同名时,在方法中优先考虑局部变量。

函数,其实也是我们java中说的方法,但是go语言中的方法则是有指明 接受者 的函数。


如果你认可我所做的事情,并且认为我做的事对你有一定的帮助,希望你也能打赏我一杯咖啡,谢谢。

支付宝捐赠