首页 > 其他分享 >基础小知识

基础小知识

时间:2024-03-29 15:30:22浏览次数:32  
标签:slice 函数 知识 基础 传递 线程 进程 指针

Go

make | new

都是用于分配相应类型的内存空间。

区别:

  • make
  • 仅支持 slice、map、channel 三种数据类型的内存分配和初始化
  • 返回值是所创建类型的本身
  • 分配堆上的内存空间,通过GC回收
  • new
  • 分配内存,内存里存的值是对应类型的零值。
  • 返回值是所创建类型的指针引用
  • 分配栈上的内存空间,在函数被调用完毕后自动释放

为什么针对slice, map和chan类型专门定义一个make函数?

  • slice, map和chan的底层结构上要求在使用时必须初始化,如果不初始化,那值就是零值,也就是nil
  • map如果是nil,是不能往map插入元素的,插入元素会引发panic
  • chan如果是nil,往chan发送数据或者从chan接收数据都会阻塞
  • 对于nil slice,append会对slice的底层数组做扩容,通过调用mallocgc向Go的内存管理器申请内存空间,再赋值给原来的nil slice

defer

  • 执行顺序:栈后进先出
  • defer 与 return 谁先谁后:return 之后的语句先执行,defer 后的语句后执行
  • 在函数退出之前,因为return会生成一个临时变量,defer可以修改返回值(有名返回值或者函数返回指针)

init()

  • 在main函数之前执行
  • 执行顺序:import –> const –> var –>init()–>main()
  • 按照解析的依赖关系,没有依赖的包最先初始化
  • 一个文件可以有多个init()函数

函数间参数传递

  1. Go语言中函数之间参数的传递, 全部是值传递
  • 值类型 传递, 将会重新拷贝一份内容, 传递到函数中
  • 指针类型 传递, 会创建一个新的指针, 但是新的指针还是指向原来的内存空间
  1. 选择值传递还是指针传递
  • 不想变量被修改, 选择值传递,想要被修改, 选择指针传递
  • 变量特别大,考虑到节约空间, 选择指针传递

_ 下划线

  • 用在import:仅让导入的包做初始化,而不使用包中其他功能
  • 用在返回值:忽略某个值
  • 用在变量:用作类型断言
  • 用在函数定义中:省略带名的参数

其他

进程 | 线程 | 协程

  • 进程:是操作系统对一个正在运行的程序的一种抽象,是资源分配的基本单位。

  • 线程:是轻量级的进程,进程中的实际运作单位,是操作系统调度的基本单位。

  • 协程:是用户态的线程,调度完全由用户控制,拥有自己的寄存器上下文和栈。

  • 一个程序至少有一个进程,一个进程至少有一个线程

  • 进程与线程区别:

    • 进程间相互独立互不干扰,线程共享进程的资源,线程之间通信比进程之间通信更方便。
    • 进程之间的切换比线程之间的切换开销大。
    • 进程让操作系统实现并发性,线程让进程的内部实现并发。
  • 线程与协程区别:

    • 线程是操作系统提供的,由内核调度,协程是由程序调度。
    • 协程是子程序切换不是线程切换
  • 多进程使用场景:对资源的管理和保护要求高,不限制开销和效率时

  • 多线程使用场景:要求效率高,频繁切换时,资源的保护管理要求不是很高时

标签:slice,函数,知识,基础,传递,线程,进程,指针
From: https://blog.csdn.net/qq_43157273/article/details/137146576

相关文章

  • Linux基础命令
    Linux基础命令目录Linux基础命令一、Linux的优势二、Shell1.Shell的概念2.Shell的内、外部命令三、目录结构四、命令简述1.命令行格式2.编辑命令行的辅助操作3.获得命令帮助的方法4.通配符5.别名:alias6.pwd(printworkdirectory)7.切换工作目录:cd8.ls命令9.复制:CP10.创建文件......
  • pytorch的基础函数
    [torch.arange]是PyTorch中的一个函数,用于生成一个一维的张量(tensor),其中包含从起始值(包括)到结束值(不包括)的等差数列。这个函数非常类似于Python的内置range函数,但是生成的是PyTorch张量而不是Python列表。torch.arange(start=0,end,step=1,*,out=None,dtype=No......
  • 基础K线组合形态
    ------......
  • 华为云网络知识
    1.对等网络peer2.NAT网关(NETGW)购买一个公网NET网关,然后购买一个或多个EIP(弹性公网),然后在EIP界面将这一个或多个EIP绑定到这个NET网关上,在NET网关界面通过SNAT规则的配置,可以将某个内网ECSip或者ip段配置到这个EIP上,从而似的ECS可以访问公网。DNAT是反向的公网访问互联网的,如......
  • Bootloader/IAP零基础入门(1.1) —— 设计一个Bootloader引导进入APP的程序,包含中断向量
    前言(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动/单片机/RTOS的实习岗位,可C站直接私聊,或者邮件:[email protected],此消息至2025年1月1日前均有效(2)在上一章节中,我们详细介绍了如何让Bootloader引导进入APP程序。但是上一章节的工程是无法使用......
  • 【知识点】hashcode和equals
    哈希计算(Hashing)是一种将数据通过哈希函数(HashFunction)转换成固定长度的值(hashvalue)的过程,是一个通用的计算方式。在Java中的表现就是hashcode()方法,在Object类上,常用于HashMap、HashSet等集合中,用于快速查找、唯一约束等作用。equals()方法是从逻辑上判断两个对象是否相等,如......
  • 基于Java+Neo4j的知识图谱+全文检索的知识库管理系统(附文档+代码)
      在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等。针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电子化管理显得尤为重要。【springboot+elasticsearch+neo4j+vue+activiti】实......
  • YOLOv5-小知识记录(三)
    0.写在前面    本篇介绍SPP模块、FPN模块模块,主要也是对YOLOv5的内容的补充:Yolo系列算法-理论部分-YOLOv4-CSDN博客Yolo系列算法-理论部分-YOLOv5-CSDN博客    上一篇:        YOLOv5-小知识记录(二)-CSDN博客1.SPP模块    SpatialPy......
  • 虚拟线程知识分享
    1相关概念-操作系统线程(operatingsystemthreads):即硬件设备配备的线程,一般和服务器硬件的核心数量,例如interCPU的大核拥有两个操作系统线程,小核拥有一个操作系统线程。云服务器的线程数一般和服务器配置上的核心数量相同。-平台线程(PaltformThread):java.lang.Th......
  • HTML基础标签
    基础标签:加粗标签:加粗标签:      作用:为文本添加加粗效果      基本语法:        <b>文本</b>  <strong>文本</strong>      注意:双标签      书写标签时:快捷键:记住标签的单词,直接配合tab/回车键,直......