Go语言—值类型和引用类型

一、值类型

  1. 定义

    变量直接存储的值,内存通常在栈中分配; var i = 5 -> i-->5

  2. 应用

    int、float、bool、string、数组、struct

二、引用类型

1. 定义

​ 变量存储的是一个地址,这个地址存储最终的值。
内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,通过GC回收。

​ ref r--->地址--->值

2. 应用

  指针、slice、map、chan、接口、func

3.nil的定义:

  // nil is a predeclared identifier representing the zero value for a 
  // pointer, channel, func, interface, map, or slice type.

  var nil Type // Type must be a pointer, channel, func, interface, map, or slice type

  只有 slice、map、channel、interface、pointer、func 这些类型的值才可以是 nil

4.如何判定interface里面的动态值是否为空

  对于一个接口的零值就是它的类型和值的部分都是nil。

三、实例

package main

import "fmt"

func swap(a *int, b *int) {
    // 获取指针地址指向的值
	tmp := *a
	*a = *b
	*b = tmp
	return
}

func main() {
	one := 100
	two := 200
    // 获取指针地址
	swap(&one, &two)
	fmt.Printf("one:%d
", one) //one:200
	fmt.Printf("two:%d
", two) //two:100
}
原文地址:https://www.cnblogs.com/haima/p/13855811.html