我的博客

golang 总结

目录
  1. 数据类型
    1. 内置类型和引用类型
    2. 数组、切片和映射
    3. 结构类型
    4. 接口
  2. 函数和方法

Go 语言是静态类型语言。编译时编译器就知道程序中用到的所有值的类型。类型让编译器知道这个值占用多少内存,以及这些内存的含义。

数据类型

内置类型和引用类型

内置类型:
数值、字符串、布尔

引用类型:
切片、映射、通道、接口、函数

内置类型和数组作为参数在函数调用时传递时,需要复制其值,如果值很大时,开销可观(尤其是数组),这时可以传递指针,而且由于被调用的函数得到的是一个副本,所以在函数内对值的修改,不会影响调用者传入的变量。

引用类型作为函数参数时,传递的是一个标头,需要复制的内容是比较少的(标头中包含了指向实际数据的指针)。

数组、切片和映射

数组声明时就需要确定长度,且长度无法修改。分配连续内存,元素的值类型必须相同。

切片是对数组的封装,其长度可变,但是底层是数组。当需要的长度超过其数组的长度时,会自动扩容。

映射是无序集合,使用散列表实现

结构类型

1
2
3
type MyStruct struct {
Name string
}

接口

1
2
3
4
type MyInterface interface {
fun1()
fun2()
}

函数和方法

1
2
3
4
5
6
7
8
9
10
11
func fun(str string) (result int, error){

}
struct CertainStruct struct{}
func (c CertainStruct) func1(str string) (result int){

}

func (c *CertainStruct) func2(str string) (result int){

}

函数使用 func 关键字声明,如上,fun 是函数名,后面第一个括号里是参数,第二个括号里是返回值,返回值可以有 0 个或多个。

方法也是函数,但是在 func 关键字后面多了一个括号,说明这个方法和某种 struct 绑定。这个成为接收者,实际上也是函数的参数。就相当于类的方法,接收者就是方法属于的类,要使用这个类型的 struct 的变量或指针来调用这个函数。可以看到上面这两个方法的接收者类型一个带星号,一个不带。带星号的,方法执行时会得到这个 struct 的一个引用,不带星号的则得到它的副本

参考资料

《Go 语言实践》(Go IN ACTION) [美] William Kennedy, Brian Ketelsen, Erik St. Martin 著 李兆海 译,谢孟军 审校

评论无需登录,可以匿名,欢迎评论!