8、defer的执行顺序是什么?
defer语句并不会马上执行 , 而是会进入一个栈 , 函数return前 , 会按先进后出的顺序执行 。 也说是说最先被定义的defer语句最后执行 。
9、defer函数遇到return以后是怎么执行的?
注:先进后出的原因是后面定义的函数可能会依赖前面的资源 , 自然要先执行;否则 , 如果前面先执行 , 那后面函数的依赖就没有
先defer再return , 函数执行之后 , return返回之前 , 按照先进后出的顺序执行
10、对于进程 , 线程 , 协程的理解是什么?
- 线程可以理解为轻量级的进程 协程可以理解为轻量级的线程
- 协程最大的优势就是可以轻松的创建上百万个 , 而不会导致系统资源衰减
11、有时候会遇到一些空的结构体 , 这个目的是什么?
空结构体不占任何内存 , 使用空结构体 , 可以帮咱们节省内存空间 , 提升性能golang
12、map怎么顺序读取?
map不能顺序读取 , 是因为他是无序的 , 想要有序读取 , 首先的解决的问题就是 , 把key变为有序 , 所以可以把key放入切片 , 对切片进行排序 , 遍历切片 , 通过key取值 。
代码示例:
package main
import (
\"fmt\"
\"sort\"
)
func main() {
map1 := make(map[int
string)
map1[1
= \"红孩儿\"
map1[2
= \"牛魔王\"
map1[3
= \"白骨精\"
map1[4
= \"小钻风\"
map1[5
= \"黄袍怪\"
map1[6
= \"孔雀大明王\"
map1[7
= \"白毛鼠\"
//获取所有的key , 取值后存储到切片
keys := make([
int0len(map1))
for k_ := range map1{
keys = append(keysk)
fmt.Println(keys)
//对key值进行排序
//内置函数sort包下的排序方法
sort.Ints(keys)
fmt.Println(keys)
for _key := range keys{
fmt.Println(key\"-->\"map1[key
)
//冒泡排序方法
for i := 1;i<len(keys);i++ {
for j := 0;j<len(keys)-1;j++ {
if keys[j
> keys[j+1
{
keys[j
keys[j+1
= keys[j+1
keys[j
for i := 1;i<=len(keys);i++ {
fmt.Println(i\"-->\"map1[i
)
13、你在项目里面会用到什么数据结构 , 例如map、slice
都会用到 , 包括基本数据类型:int、float、string、bool, 复合数据类型有:指针、数组、切片、字典(map)、通道、结构和接口
14、如果用range修改切片元素的值 , 会发生什么?
注:map和slice也会用到 , 当有明确的key值时 , 使用map , 如果没有明显的key , 就使用切片
我们经常会使用到range来帮助我们遍历一些数据 , 通常情况下都是查看操作多一些 , 但是当我们需要对其原地址上的内容进行变更时 , 通常都是使用 for i:=0; i<len(); i++ 来修改值 。 在使用range的时候 , 通常会将该数据结构进行拷贝 , 来遍历这一份拷贝后的副本 , 使用的是一个值传递 , 如果我们进行修改 , 修改的就只是副本 , 对原地址上的值不会产生任何影响 。
- 笔记本|续航媲美MacBook Air,这款Windows笔记本太适合办公了
- 比特币|买小众低端品牌笔记本,还不如二手一线品牌高配置,有道理吗?
- 笔记本电脑|华硕笔记本电脑问题不断?消费者很糟心
- 如何在 Notion 类产品中使用卡片笔记写作法:理念与实践
- 笔记本|一台当四台用!ROG幻16翻转本首发开卖:奢华配置18999元
- 华硕笔记本电脑问题不断?消费者很糟心
- 英特尔|AMD和Intel笔记本如何选?最新CPU天梯图告诉你答案
- 笔记本|久未露面的马云,驾着13亿游艇在西班牙游玩,说好当乡村教师呢?
- 联想|适合大一新生电气自动化专业的两款联想笔记本电脑
- 软件|高品质铸就好口碑 荣耀笔记本赢麻了:以创新科技引领体验升级