首页 > 其他分享 >golang 值类型与引用类型

golang 值类型与引用类型

时间:2022-08-21 16:36:47浏览次数:112  
标签:slice 变量 E5% golang 引用 类型 指针

转自:https://www.zhihu.com/search?type=content&q=golang%20%20%E5%80%BC%E7%B1%BB%E5%9E%8B%E3%80%81%E5%BC%95%E7%94%A8%E7%B1%BB%E5%9E%8B%E3%80%81%E6%8C%87%E9%92%88%E7%B1%BB%E5%9E%8B

值类型和引用类型

值类型包括:所有integer,所有float,bool,string,数组structure

引用类型包括:指针,slice,map,chan,interface

通过使用方法来区分值类型和引用类型

初始化

变量初始化分为声明和赋值两部分

var b int  // b = 0
b = 1

var p *int  // p = nil
p = &b

 

对于值类型,声明了但是未赋值时,其值是类型零值,可以看出值类型变量存的就是变量的值

对于引用类型,声明了但是未赋值时,其值是nil, 可以看出引用类型变量存的是变量的指针

事实上,和指针不同,slicemapchannel 都是结构体,指针零值是nil代表它还没有存储任何一个内存地址 ,而slice等的零值是成员变量为相应变量类型零值slice结构体, 为了更方便初始化slicemapchannel结构体,golang设计者设计了一个make函数,专门用来初始化slicemapchannel
但是为什么slicemapchannel也叫引用类型? 回到那句话,区分引用类型和值类型是在使用的时候区分,这三种类型的成员变量都包含一个指向我们存储的值指针 ,操作我们存储的值的时候必须通过这个指针来操作,所以它们是引用类型

函数传参

无论是值类型还是引用类型,传递的都是这个变量存储值的一个副本

func f(i int, p *int){
    // i是原始变量值的一个副本,i存储的值与原始变量值相等
    // 操作i=1并不会使原始变量值变成1

    // p是原始变量值的一个副本,它们存储了相同的指针,指向同一个地址
    // 操作 *p = 1 会使原始变量指向的值变成1
    // 操作 p = &i 会使p指向i,但是对原始变量没有影响
}

 

标签:slice,变量,E5%,golang,引用,类型,指针
From: https://www.cnblogs.com/fulaien/p/16610207.html

相关文章

  • Golang学习(二)
    12.单元测试12.1引入在我们工作中有时需要去确认一个函数或者一个模块的结果是否正确,如:  12.2传统的方法解决问题在main函数中调用addUpper函数,看看实际输出结果......
  • 第四章 4 数据类型-字典 练习题
    第四章4数据类型-字典练习题基础知识1字典中多个元素之间使用____________分隔开,每个元素的“键”与“值”之间使用________分隔开逗号,冒号2字典对象的___________......
  • redis数据结构介绍以及命令操作string和hash类型
    redis的数据结构redis存储的是:key,value格式的数据,其中key都是字符串,value有5中不同的数据结构value的数据结构:(1)字符串类型string......
  • 数据类型_列表
    一、列表数据类型“列表”是一个值,它包含多个字构成的序列。1spam=["hello",3.14159,True,"elephant"]2[]变量spam只被赋予值:列表值,但列表值本身包含多个值。[]......
  • 序列类型操作
    序列类型的操作遍历从第一个元素到最后一个元素依次访问(序列类型)foriin序列: print(i)#i是序列中的值(如果该序列为字典,那么i为字典的键)foriinenumerate(序列......
  • Mybatis 源码6 结果集映射流程 ,mybatis插件实现原理和基于mybatis插件实现参数化类型T
    Mybatis源码6结果集映射流程,mybatis插件实现原理和基于mybatis插件实现参数化类型TypeHandler一丶前情回顾书接上回,下面是SimpleExecutor执行查询的主要逻辑prepa......
  • RUST基础:类型别名
    Rust基础入门书籍推荐《深入浅出RUST》我们可以用type关键字给同一个类型起个别名(typealias)。实例如下:1typeAge=u32;23fngrow(age:Age,year:u32)->Age{......
  • Golang中slice操作的一些坑
    packagego_testsimport("bytes""fmt""testing")//0、引用类型funcTestT0(t*testing.T){s1:=[]int{1,2,3}f1:=func(s[]int......
  • python输入和类型转换
    输入获取用户使用键盘录入的内容使用的函数是input()变量=input(‘提示的信息’)1.代码从上到下执行,遇到input函数之后 类型转换根据代码的需要,将一种数据类型......
  • Notepad plus 通过NppExec插件编译/运行 golang,php,python等语言
        1. 在Notepadplus的插件-->插件管理中,添加nppExec插件。          2.打开插件-->NppExec,选择Showconsole,和Follow($CURRE......