golang笔记

golang笔记

一、内存逃逸

本应在栈中内存,被分配到了堆中
1 返回指针对象 在外部被使用
2 reutrn 函数 使用了上面方法的敞亮
3 入参是interface{} 动态参数
4 make超过栈大小
-gcflags="-m"查看分配内存信息

返回变量vs返回指针
返回变量, 会多一步复制变量, 返回指针 复制指针, 如果有该对象内的属性 或者大对象的化 ,应分配到堆中, 反之返回变量

二、gc

1.3 标记清楚 - stw
1.5 三色标记 - 白 灰 黑,
并发操作时, 灰色指向白色 被断, 黑色可能直接引用白色
强三色 弱三色: 黑色不能直接指向白色 白色上游链路必须有灰色链路
写屏障 黑色引用白色, 白色置灰 stw
删除屏障, 灰色删除白色 白色置灰
缺点 栈的对象可能会频繁回收, 如果频繁屏障 难以接受

1.8 混合写屏障
gc开始时 栈中的对象标记黑
gc期间 新建的对象标记黑
堆中新建 标记灰色
删除的对象,标记灰色

三、gmp

Goroutine 协程 gomaxproes设置
Machine 物理内核
Procssor 协调管理器
Gmp模型, gotoutine 协程, machine 线程绑定物理内核, processor调度中心
初始化会有一个m0, 每一个线程会有g0, 创建g1时, 放到本地队列, g0调度g1运行,本地队列满时, 前半部打散和g1一起放到全局队列, p2 work stealing, 先从全局队列拿g,min (全局队列g的个数/maxgoprocs, 本地队列 / 2), 如果全局队列没有g, 从别的p的本地队列, stealing后一半 g, 如果g1 阻塞, hand off唤醒其他线程,和p绑定, 没有线程则放到全局队列, 阻塞完成后会优先抢p,如果p正在和其他线程执行, 放到全局队列

golang用法与关键字

1.变量声明
var a int
var a int = 100
var a = 100
a :=100 只能方法体内
var a b int = 100, 200
var a b = 100, “123”
var (
a int = 100
b bool = “123”
)

2.const iota
const length int = 100, length不可更改
const (
A = iota
B
C
)
iota 从0开始, 每行+1, iota只能配合const使用

3.func function1(a int, b string) (int, string) {}
4.init 与 import
在这里插入图片描述

5.go中unused限制
如果想只init()
import (
_ “lib2” // 匿名 只执行init()
. “lib3” lib3// 中所有方法导入到当前go 可以直接Test()
bieming “lib4” // lib4.Test()
)
6.defer 多个defer 压栈出栈形式, 先进后出
defer和return, 先return 后defer
7.切片
固定数组: var myArray [10]int , 传递时 值拷贝
var myArray [10]int{1,2,3}
for index, value := range myArray {}
动态数组 var myArray []int{1, 2, 3}, 传递时 传递指针

分配切片空间, slice1 := make([]int, 3), 分配3个空间

slice2 := make([]int, len, cap),
slice2 = append(slice2, 5)
append时超过原有cap, 开辟新空间, 新空间等于原来的cap

s3 := slice1[0, 2], [0, 2)左闭右开, s3也会指向slice1指针, slice1发生改变, s3同样发生改变

s4 := make([]int, 3)
copy(s4, slice1) slice1copy到s4里
8.map
myMap := make(map[string]string, cap), 也可以不加cap, 添加时候 会自动扩容
for key, value := range myMap {}
delete(myMap, “xxx”)
map传递时, 传递指针, 其他方法修改 全局生效

9.struct
封装:
type MyStruct struct {
Name string,
Author string
}
myS := MyStruct{Name: “xxx”, Author: “xxxx”}
func (my *MyStruct) (newName string) {
my.Name = newName
}
继承:
type NewStruct struct {
MyStruct // 代表继承MyStruct属性
age int
}
方法一: newStruct := NewStruct{MyStruct{ “xxxx”, “xxxxx”}, age: 10}
方法二: var newStruct NewStruct
newStruct.Name = “xxxx”
多态:
type AnimalIf interface {
GetColor string
GetType string
}
type Cat struct {
Color string
}
func (cat *Cat) GetColor string {

}
func (cat *Cat) GetType string {

}
var animal AnimalIf
animal := &Cat{Color: “yellow”}
animal.GetColor()
10.interface
interface{} 通用万能类型
value, ok := arg.(string)断言

channel
make(chan int) 无缓存通道,生产和消费必须同步,谁先到谁阻塞
make(chan int, cap) 有缓存通道, 生产者可以先生产, channel满, 生产者阻塞, channel为空,消费者阻塞

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

纹理分析——统计分析方法

一. 灰度共生矩阵法(Gray Level Co-occurrence Matrix, GLCM ) 灰度共生矩阵又称为灰度空间相关矩阵,是通过研究灰度的空间相关特性来描述纹理的常用方法。(也称为联合概率矩阵)它作为传统的图像纹理分析方法已广泛应用于数字图像处理的许多…

IT维修记录表导入接口的思路

上篇文章讲了IT设备信息表的导入接口的思路,这篇文章趁热打铁,把IT维修记录表的导入接口的思路给说一下。 首先我们要知道IT维修记录表的数据是什么来的?这个问题必须要搞懂,不搞懂的话对接下来的思路其实是不利的。IT维修记录表…

场景解决方案丨迎战电商大促,企业管理跟踪驾驶舱助力中小企业打赢决胜之战

该方案已沉淀为➡️订单物流信息跟踪模板,点击🔗即可体验 随着互联网技术的发展和市场经济的变化,各行业的线上竞争愈发激烈。一方面,互联网平台凭借便捷的服务和丰富的产品吸引了大量客户;另一方面,复杂多…

WebRTC 环境搭建

主题 本文主要描述webrtc开发过程中所需的环境搭建 环境: 运行环境:ubuntu 20.04 Node.js环境搭建 安装编译 Node.js 所需的依赖包: sudo apt-get update sudo apt-get install -y build-essential libssl-dev 下载 Node.js 源码: curl -sL htt…

Python从入门到高手7.5节-实现冒泡排序算法

目录 7.5.1 排序算法简介 7.5.2 冒泡排序算法原理 7.5.3 冒泡排序算法实现 7.5.4 永不放弃 7.5.1 排序算法简介 所谓排序,是指将数据集合中的元素按从小到大的顺序进行排列,或按从大到小的顺序进行排列。 前者称为升序排序,后者称为降序…

vue-quill-editor富文本编辑器

效果图&#xff1a; 1、下载安装vue-quill-editor npm install vue-quill-editor --save图片缩放、拖拽 npm install quill-image-drop-module -S //允许粘贴图像并将其拖放到编辑器中。 npm install quill-image-resize-module -S //允许调整图像大小<template>&…

TCP是怎样工作的网络拥塞控制理论和算法部分记录

参考资料 https://github.com/ituring/tcp-book 流量控制、窗口控制和拥塞控制的关系 流量控制、窗口控制和拥塞控制的关系如图所示 窗口控制是上层的概念&#xff0c;核心思路是基于滑动窗口技术传输数据。而确定发送窗口大小的方法有流量控制和拥塞控制两种 流量控制&…

NVR管理平台EasyNVR多个NVR同时管理对接天翼云云存储的一些关键信息和优势

在视频监控领域&#xff0c;随着技术的不断进步&#xff0c;存储方式的选择变得尤为重要。传统的本地存储方式受限于硬件容量&#xff0c;而云存储则以其强大的数据处理能力和弹性扩展性&#xff0c;成为视频数据存储的理想选择。NVR管理平台EasyNVR作为一款领先的视频汇聚与管…

饲料加工机器设备由搅拌机粉碎机颗粒机组成

饲料加工机器设备在现代养殖业中扮演着至关重要的角色&#xff0c;它们不仅提高了饲料的生产效率&#xff0c;还优化了饲料的营养价值。其中&#xff0c;饲料粉碎机、搅拌机和颗粒机是饲料加工流程中的三大核心设备。 想象一下&#xff0c;一把把粗糙的原料&#xff0c;在粉碎…

oracle数据坏块处理(二)-逻辑坏块重新格式化处理

1、问题描述 在使用duplicate搭建DG时报错 包括rman copy&#xff0c;rman备份 2、问题分析 由于数据文件逻辑坏块导致物理备份不能正常进行。 使用rman检查数据文件47 SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id 47 a…

在IDEA使用arthas实现jar包方法耗时统计

1.背景 对于依赖jar包中的方法内部耗时统计&#xff0c;传统的手写StopWatch不适用&#xff0c;这儿采用arthas统计。 官网文档比较详细&#xff0c;trace | arthas 使用版本&#xff1a; arthas-boot version: 4.0.2 IntelliJ IDEA 2023.3.3 2.使用介绍 2.1.启动需要检…

用于图像识别的判别图正则化技术

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月8日13点32分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17210272021224&uid64a84f9640714755a…

Android Handler

Handler用于多线程消息分发和处理。与handler相关的几个对象&#xff1a;Message, Looper&#xff0c;MessageQueue, ThreadLocal. Handler是Message的消费者。 MessageQueue是容器。 Looper是整个Message分发的驱动。 Handler中有多种发送消息的方法&#xff0c;其中postxx…

Windows/Linux部署Qt并通过Qt Installer Framework制作安装包

本文参考 Qt Installer Framework Manual。 若要使用 Qt Installer Framework&#xff08;简称 QIF&#xff09;&#xff0c;需要在 Qt Online Installer 或 Qt Maintenance Tool 中确保该组件已安装&#xff08;QIF 组件在 Qt->Developer and Design Tools 下&#xff09;&…

【大数据学习 | kafka】消费者的分区分配规则

1. 概述 上面我们提到过&#xff0c;消费者有的时候会少于或者多于分区的个数&#xff0c;那么如果消费者少了有的消费者要消费多个分区的数据&#xff0c;如果消费者多了&#xff0c;有的消费者就可能没有分区的数据消费。 那么这个关系是如何分配的呢&#xff1f; 现在我们…

【开发】关于Java中String与Integer的小小知识点(使用等号对比引用对象)

一个很简单的小知识点 我们都知道&#xff0c;如果使用对比包装类型或对象&#xff0c;那么比较的都是两者之间的地址&#xff08;指针或句柄&#xff09;&#xff0c;而非对象本身&#xff0c;那么且看下方的代码。 public class A {public static void main(String[] args)…

2025年山东省考报名流程图解

2025年山东公务员考试备考开始 为大家整理了从笔试到录用的全部流程&#xff0c;希望可以帮助到你们&#xff01;参考2024年山东省考公告整理&#xff0c;请以最新公告为准&#xff01; 一、阅读公告和职位表 二、职位查询 三、网上报名 四、确认缴费 五、网上打印准考证 六、参…

网络安全入门篇之详细学习路线

什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&…

什么是大数据治理?在企业数字化转型过程中有什么用?

建设背景 有效的数据治理不仅能够确保数据的安全和质量&#xff0c;还能为企业提供深入的业务洞察&#xff0c;推动决策制定和创新。数据治理是数字化转型的基础&#xff0c;是数据资源成为数据资产的基础&#xff0c;只有经过了数据治理&#xff0c;相应的数据资源才能产生价…

Kalshi PK Polymarket,谁更胜一筹

https://kalshi.com https://polymarket.com/ 在刚过去的2024 美大选中&#xff0c;这两个网站可谓风光无限。这两者究竟有何区别呢&#xff0c;今天咱们一起来扒一扒。 Kalshi与Polymarket主要有以下区别&#xff1a; 监管与合法性方面&#xff1a; Kalshi&#xff1a;经过美…