Golang基础问题

在这里插入图片描述

Go基础

文章目录

  • Go基础
    • ● Go有那些关键字?
    • ● Go方法与函数的区别?
    • ● Go函数返回局部变量的指针是否安全?
    • ● Go函数参数传递是值传递还是引用传递?
    • ● defer关键字的实现原理?
    • ● 内置函数make和new的区别?
    • ● for range 的时候它的地址会发生变化吗?
    • ● 简单说一下defer的底层实现原理?defer recover的问题?
    • ● uint类型溢出?
    • ● 介绍rune类型
    • ● golang中解析tag是怎么实现的?反射原理是什么?
    • ● 调用函数传入结构体时,应该传值还是指针?
    • ● Slice遇到过什么坑?
    • ● 两个切片要如何比较?
    • ● Go闭包是什么?
    • ● 深拷贝和浅拷贝?
    • ● init函数的执行时机?
    • ● Go 语言中的数组?

欢迎大家观看,如果遇到不合适的答案可以打在评论区,我们一起探讨。

● Go有那些关键字?

package、import、func、return、defer、var、const、interface、struct、chan、map、type、break、case、continue、for、fallthrough、else、if、switch、goto、default、range、go、select。

● Go方法与函数的区别?

函数是指不属于任何结构体的方法。但方法是属于某个结构体的。

● Go函数返回局部变量的指针是否安全?

是安全的。 Go编译器将会对每个局部变量进行逃逸分析。如果发现有局部变量的作用域超出该函数,则不会将内存分配在栈上,而是在堆上,因为他们不在栈区,即使释放函数,其内容也不会受影响。

● Go函数参数传递是值传递还是引用传递?

值传递。 Go中都是值传递,没有引用传递。 如果参数是引用类型,可以修改原内容数据,否则不可以。

● defer关键字的实现原理?

defer可以推迟当前函数返回前才实际执行。 defer和recover结合,形成了Go语言风格的异常与捕获机制。

● 内置函数make和new的区别?

1、作用变量类型不同,new可以对任何类型使用,make只能对切片、字典、通道使用。 2、返回类型不一样,new返回指针,make返回变量本身。 3、new分配的空间被清零,make分配的会初始化。

● for range 的时候它的地址会发生变化吗?

不会。在for range循环中,循环变量的地址在每次迭代时是复用的,直接传递循环变量的地址可能导致所有协程共享同一个地址,出现数据竞争和不期望的行为。

● 简单说一下defer的底层实现原理?defer recover的问题?

先进后出,类似于栈。defer延迟函数,释放资源,收尾工作;如释放锁,关闭文件,关闭链接;捕获panic; 每个 defer 语句都对应一个_defer 实例,多个实例使用指针连接起来形成一个单链表,保存在 gotoutine 数据结构中,每次插入_defer 实例,均插入到链表的头部,函数结束再一次从头部取出,从而形成后进先出的效果。 recover结合defer可以捕获异常,从而防止程序崩溃。recover只有在defer函数中有效。

● uint类型溢出?

无符号整型。2^32-1,如果超出了所能表示的范围,就会发生溢出。溢出不会引发错误或panic,而是导致结果按照模运算。

● 介绍rune类型

相当int32。 golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。byte 等同于int8,常用来处理ascii字符rune 等同于int32,常用来处理unicode或utf-8字符

● golang中解析tag是怎么实现的?反射原理是什么?

Go 中解析的 tag 是通过反射实现的,反射是指计算机程序在运行时可以访问、检测和修改它本身状态或行为的一种能力或动态知道给定数据对象的类型和结构,并有机会修改它。反射将接口变量转换成反射对象 Type 和 Value;反射可以通过反射对象 Value 还原成原先的接口变量;反射可以用来修改一个变量的值,前提是这个值可以被修改;tag是啥:结构体支持标记,name string json:name-field 就是 json:name-field 这部分

● 调用函数传入结构体时,应该传值还是指针?

传值时,函数会获得给结构体的一个副本,对该副本修改不会影响原来的结构体。 传指针时,引用类型,对指针指向的结构体进行任何的修改都会修改原来的结构体。

● Slice遇到过什么坑?

1、切片容量 切片容量自动增长,当容量不足时,Go会分配一个新的底层数组,并将旧的数组的内容复制到新的数组中。如果频繁增加元素可能导致意外。 应对策略:预先分配足够的容量。 2、切片是对底层数组的引用,多个切片可以共享同一个底层数组。修改一个切片的元素可能会影响其他共享同一底层数组的切片。 如果需要独立的副本,可以使用copy函数创建一个新的切片。 3、切片越界。 4、切片的零值是nil。

● 两个切片要如何比较?

切片不能使用==进行比较,要使用reflect.DeepEqual()进行比较。

● Go闭包是什么?

闭包就是一个可以引用自身作用域之外的变量的函数。即使外部函数完成执行并且作用域被破坏,依然可以访问。

● 深拷贝和浅拷贝?

切片、字典、通道都是引用拷贝,也就是浅拷贝。其余的都是值拷贝,也就是深拷贝。 深拷贝拷贝的是数据本身,创造一个新的对象,并在内存中开辟一个新的内存地址,与原对象是完全独立的,不共享内存,修改新对象时不会影响原对象的值。释放内存时,也没有任何关联。 浅拷贝拷贝的是数据地址,只复制指向的对象的指针,新旧对象的内存地址是一样的,修改一个另一个也会变。释放内存时,同时释放。

● init函数的执行时机?

一个包下可以有多个 init 函数,每个文件也可以有多个 init 函数。多个 init 函数按照它们的文件名顺序逐个初始化。应用初始化时初始化工作的顺序是,从被导入的最深层包开始进行初始化,层层递出最后到 main 包。不管包被导入多少次,包内的 init 函数只会执行一次。应用初始化时初始化工作的顺序是,从被导入的最深层包开始进行初始化,层层递出最后到 main 包。但包级别变量的初始化先于包内 init 函数的执行。

● Go 语言中的数组?

数组是存放元素的容器,Go 语言中数组的长度是数组类型的一部分,定义数组时必须指定存放元素的类型和容量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/368790.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城学习-06-使用vagrant快速创建linux虚拟机

这一节的内容是在Windows上安装虚拟机。 为什么要按照虚拟机呢? 原因是很多软件只能在Linux下运行,有的虽然也可以在Windows上运行,但从安装到运行会遇到很多问题,为这些解决这些问题花时间对于大多数人特别是初学者是没有什么价…

Access,Trunk,Hybrid网络设备链接类型详解

带着问题找答案:网络链路上的数据包怎么看,是否携带vlan-id如何看,以及如何设计链接类型满足用户要求,请看如下解析。 第一种:链接类型access 无标记数据帧 第二种:链接类型trunk 第三种&#xf…

EtherCAT通讯介绍

一、EtherCAT简介 EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网技术,是由德国公司Beckhoff Automation在2003年首次推出的。它是一种开放的工业以太网标准,被设计用于满足工业自动化应用中的高性能和低…

c++习题09-分离整数的各个数

目录 一,题目 二,思路 三,代码 一,题目 二,思路 一开始我想到的是将简单容易输出的1000以内的数先进行相应的运算,再输出之后再对1000以上的数字进行判断(主要还是想先将很大的数变小&#x…

WPF自定义模板--TreeView 实现菜单连接线

有些小伙伴说&#xff0c;在TreeView中&#xff0c;怎么每一个都加上连接线&#xff0c;进行显示连接。 代码和效果如下&#xff1a; 其实就是在原来的模板中增加一列显示线条&#xff0c;然后绘制即可 <Window x:Class"XH.TemplateLesson.TreeViewWindow"xmln…

工具发送formdata请求 Multipartfile 接收

1.需求&#xff1a; 接收到 (Multipartfile file 文件 》使用工具转发到别的请求&#xff0c;将文件传到别的接口 主要代码&#xff1a; InputStreamResource inputstreamResource new InputstreamResource(file.getInputstream(), file.getoriginalfilename());MultiReso…

谷歌地图 | 路线优化 API 助力企业解锁物流新潜能

在当今竞争激烈的市场环境中&#xff0c;企业面临着越来越大的压力&#xff0c;需要提高运营效率、降低成本并满足不断增长的客户期望。对于依赖车队进行交付或服务的企业来说&#xff0c;这些挑战尤为艰巨。 近日&#xff0c; Google 地图平台路线优化 API 已经正式上线。路线…

LTSPICE仿真电路:(十九)磁珠的一些简单仿真

1.作用 简单来说就是用来滤波的&#xff0c;将高频信号转化为热量滤除掉&#xff0c;低频有用信号正常通过 2.参数 上图几个参数比较简单&#xff0c;就是字面上的意思&#xff0c;更重要的就是频率阻抗图 不同曲线代表不同型号的磁珠&#xff0c;实际上除了额定电流外&#…

成都晨持绪:开一家抖音网店到底能不能赚钱

在数字化时代的浪潮中&#xff0c;抖音以其独特的魅力迅速占领了社交媒体的舞台。众多创业者纷纷把目光投向这个新兴平台&#xff0c;企图在短视频的海洋里找到属于自己的财富岛屿。但是&#xff0c;开一家抖音网店到底能不能赚钱呢? 我们要认识到&#xff0c;抖音作为一个流量…

LLM - 词表示和语言模型

一. 词的相似度表示 (1): 用一系列与该词相关的词来表示 (2): 把每个词表示一个独立的符号(one hot) (3): 利用该词上下文的词来表示该词 (3): 建立一个低维度的向量空间&#xff0c;用深度学习方法将该词映射到这个空间里(Word Embedding) 二&#xff1a;语言模型 (1): 根…

精准畜牧业:多维传感监测及分析动物采食行为

全球畜牧业呈现出一个动态且复杂的挑战。近几十年来&#xff0c;它根据对动物产品需求的演变进行了适应&#xff0c;动物生产系统需要提高其效率和环境可持续性。在不同的畜牧系统中有效行动取决于科学技术的进步&#xff0c;这允许增加照顾动物健康和福祉的数量。精准畜牧业技…

#LinuxC高级 笔记一

linux命令 什么是嵌入式&#xff1f; 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统 计算机系统组成&#xff1f; 硬件、软件 操作系统&#xff1f; ios windows harmo…

新能源组合灶,一灶两用(电燃灶+电陶炉),电生明火,无需燃料

在科技日新月异的今天&#xff0c;厨房电器的创新不断为我们的生活带来便捷与惊喜。华火新能源电燃灶&#xff0c;以其独特的设计和卓越的性能&#xff0c;成为未来厨房的首选&#xff0c;为您打造全新的烹饪体验。 中国人的烹饪文化源远流长&#xff0c;讲究火候的掌控和明火烹…

【实验室精选】PFA反应瓶带鼓泡球 高效气体鼓泡 化学分析优选

PFA反应瓶带鼓泡球是一种特殊设计的实验室容器&#xff0c;它集成了鼓泡球和PFA&#xff08;全氟烷氧基&#xff09;材料的反应瓶&#xff0c;用于气体的鼓泡和液体的混合。以下是它的一些特点和用途&#xff1a; 特点&#xff1a; 鼓泡球设计&#xff1a;鼓泡球周围布满小孔&…

网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 基…

API-正则表达式

学习目标&#xff1a; 掌握正则表达式 学习内容&#xff1a; 什么是正则表达式语法元字符修饰符 什么是正则表达式&#xff1a; 正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c;正则表达式也是对象。 通常用来查找、替换那些符合正则表达式的文本&a…

Python28-7.1 降维算法之PCA主成分分析

降维算法是一类数据处理技术&#xff0c;主要用于将高维数据映射到低维空间中&#xff0c;从而减少数据的维度。降维不仅可以减少计算复杂度&#xff0c;提高算法性能&#xff0c;还可以帮助数据可视化。常见的降维算法包括主成分分析&#xff08;PCA&#xff09;、线性判别分析…

Studying-代码随想录训练营day29| 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

第29天&#xff0c;贪心part03&#xff0c;快过半了(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 134.加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列 134.加油站 文档讲解&#xff1a;代码随想录加油站 视频讲解&#xff1a;手撕加油站…

后端之路——阿里云OSS云存储

一、何为阿里云OSS 全名叫“阿里云对象存储OSS”&#xff0c;就是云存储&#xff0c;前端发文件到服务器&#xff0c;服务器不用再存到本地磁盘&#xff0c;可以直接传给“阿里云OSS”&#xff0c;存在网上。 二、怎么用 大体逻辑&#xff1a; 细分的话就是&#xff1a; 1、准…

【Linux】目录和文件的权限意义

现在我们知道了Linux系统内文件的三种身份&#xff08;拥有者、用户组与其他人&#xff09;&#xff0c;知道每种身份都有三种权限&#xff08;rwx&#xff09;&#xff0c;也知道能够使用chown、chgrp、chmod修改这些权限与属性&#xff0c;当然&#xff0c;利用IS-l去查看文件…