- C调Go的过程相对Go调C来说更为复杂,又可以分为两种情况。一是从Go调用C进入的状态回调Go,这是比较常用的情况。二是从一个原生的C线程回调Go,这个情况更为复杂,runtime为这样的过程做了大量的准备。出现一个原生的C线程回调Go的情况,可能是主程序是C,也可能是Go调入C之后,在C中又创建了新的线程。我们着重说明上面提到的比较常见的情况下的C调Go。对于第二种从原生的C线程回调Go的情况, C调Go的过程相对Go调C来说更为复杂,又可以分为两种情况。一是从Go调用C进入的状态回调Go,这是比较常用的情况。二是从一个原生的C线程回调Go,这个情况更为复杂,runtime为这样的过程做了大量的准备。出现一个原生的C线程回调Go的情况,可能是主程序是C,也可能是Go调入C之后,在C中又创建了新的线程。我们着重说明上面提到的比较常见的情况下的C调Go。对于第二种从原生的C线程回调Go的情况,
- GO调C基本原理CGO是实现Go与C互操作的方式,包括Go调C和C调Go两个过程。其中Go调C的过程比较简单。对于一个在C中定义的函数add3,在Go中调用时需要显式的使用C.add3调用。其中C是在程序中引入的一个伪包。示例代码如下所示:图一:CGO使用示例代码 代码中的import “C”即为在Go中使用的伪包。这个包并不真实存在,也不会被Go的compile组件见到,它 GO调C基本原理CGO是实现Go与C互操作的方式,包括Go调C和C调Go两个过程。其中Go调C的过程比较简单。对于一个在C中定义的函数add3,在Go中调用时需要显式的使用C.add3调用。其中C是在程序中引入的一个伪包。示例代码如下所示:图一:CGO使用示例代码 代码中的import “C”即为在Go中使用的伪包。这个包并不真实存在,也不会被Go的compile组件见到,它
- Go语言程序初始化过程总览在Go语言链接的时候会,会生成程序入口点符号,在cmd\link\internal\ld\lib.go中if *flagEntrySymbol == "" { switch Buildmode { case BuildmodeCShared, BuildmodeCArchive: *flagEntrySymbol = fm Go语言程序初始化过程总览在Go语言链接的时候会,会生成程序入口点符号,在cmd\link\internal\ld\lib.go中if *flagEntrySymbol == "" { switch Buildmode { case BuildmodeCShared, BuildmodeCArchive: *flagEntrySymbol = fm
- 前言Go语言里面没有Java、C++里面那种try-catch结构化异常处理,而是提供了panic和recover来进行抛出错误和捕获错误的机制:func test() { defer func() { if err := recover(); err != nil { fmt.Println(err) } }() panic( 前言Go语言里面没有Java、C++里面那种try-catch结构化异常处理,而是提供了panic和recover来进行抛出错误和捕获错误的机制:func test() { defer func() { if err := recover(); err != nil { fmt.Println(err) } }() panic(
- 前言defer是Go语言中一个关键字, 主要提供延迟调用的能力,defer主要用在资源释放,会在函数返回之前进行调用。一般的调用方式如下:func testFile(fileName string) { f, err := os.Open(fileName) if err != nil { //handle error } defer f.Close() 前言defer是Go语言中一个关键字, 主要提供延迟调用的能力,defer主要用在资源释放,会在函数返回之前进行调用。一般的调用方式如下:func testFile(fileName string) { f, err := os.Open(fileName) if err != nil { //handle error } defer f.Close()
- 前言今天主要是讲解一下Go语言中各种数据结构的内存模型,主要包括基本类型的内存模型数组和切片slice的内存模型map的内存模型struct的内存模型和字节对齐interface的内存模型channel的内存模型总的来说,Go语言的内存模型和C语言是类似的,所以了解C语言的一定会很容易理解Go语言的内存模型。这里不会描述并发语义的内存模型,那个会和并发一起进行分析基本数据类型Go语言有下面这些基本 前言今天主要是讲解一下Go语言中各种数据结构的内存模型,主要包括基本类型的内存模型数组和切片slice的内存模型map的内存模型struct的内存模型和字节对齐interface的内存模型channel的内存模型总的来说,Go语言的内存模型和C语言是类似的,所以了解C语言的一定会很容易理解Go语言的内存模型。这里不会描述并发语义的内存模型,那个会和并发一起进行分析基本数据类型Go语言有下面这些基本
- 前言在学习深入学习Go语言的过程中,需要大量阅读Go语言的汇编代码来查看Go运行的运行原理,那么本文将简单介绍Go语言的汇编指令语法,让大家后续可以简单读懂Go的汇编指令。简介Go语言的汇编是基于Pan9汇编语言的风格(https://9p.io/sys/doc/asm.html)大部分情况我们是不需要写汇编代码的,所以下面主要简单介绍一下Go的汇编语法生成汇编代码的方法(基于Go1.8)在命令行 前言在学习深入学习Go语言的过程中,需要大量阅读Go语言的汇编代码来查看Go运行的运行原理,那么本文将简单介绍Go语言的汇编指令语法,让大家后续可以简单读懂Go的汇编指令。简介Go语言的汇编是基于Pan9汇编语言的风格(https://9p.io/sys/doc/asm.html)大部分情况我们是不需要写汇编代码的,所以下面主要简单介绍一下Go的汇编语法生成汇编代码的方法(基于Go1.8)在命令行
- 前言Go语言从语法上面来说,是相对简单的,所以基本的语法特性是没有什么特别要讲的,我将从Go语言的一些核心的设计,包括interface,内存模型,defer机制,goroutine的实现与调度,cgo,数组和切片,Go语言的编译器和链接器,GC实现。今天先了解一下Go语言中最引以为傲的特性interface,通过这篇文章我们来了解如下的东西:简要介绍Go语言是如何通过DuckType来实现面向接 前言Go语言从语法上面来说,是相对简单的,所以基本的语法特性是没有什么特别要讲的,我将从Go语言的一些核心的设计,包括interface,内存模型,defer机制,goroutine的实现与调度,cgo,数组和切片,Go语言的编译器和链接器,GC实现。今天先了解一下Go语言中最引以为傲的特性interface,通过这篇文章我们来了解如下的东西:简要介绍Go语言是如何通过DuckType来实现面向接
- 1 简介本文是一份 Git 高级功能速查表,涵盖常用但容易被忽视的高效功能,包含 命令 + 使用场景 + 示例。需要的可以直接放到文档或 README 里当速查手册。 2 Git 历史与调试git blame <file> 查看文件每一行是谁、何时改的 git blame maingogit log -p 查看提交历史和补丁 git log -p -2(最近 2 次提交)git log ... 1 简介本文是一份 Git 高级功能速查表,涵盖常用但容易被忽视的高效功能,包含 命令 + 使用场景 + 示例。需要的可以直接放到文档或 README 里当速查手册。 2 Git 历史与调试git blame <file> 查看文件每一行是谁、何时改的 git blame maingogit log -p 查看提交历史和补丁 git log -p -2(最近 2 次提交)git log ...
- 1. MySQL触发器的底层实现变化在 MySQL 5.x → 8.x 的演进中,触发器实现主要有以下变化:事件驱动机制重构在 5.x 中,触发器执行是内嵌在语句执行过程中,逻辑分散在不同的 SQL 层。MySQL 8 将触发器的调度与存储过程/事件调度统一在 Server 层(SQL层),以“事件调度器(Event-driven architecture)”来管理,这让触发器和存储过程、... 1. MySQL触发器的底层实现变化在 MySQL 5.x → 8.x 的演进中,触发器实现主要有以下变化:事件驱动机制重构在 5.x 中,触发器执行是内嵌在语句执行过程中,逻辑分散在不同的 SQL 层。MySQL 8 将触发器的调度与存储过程/事件调度统一在 Server 层(SQL层),以“事件调度器(Event-driven architecture)”来管理,这让触发器和存储过程、...
- 1 简介引力波与电磁波完全不同,但都是以光速传播,它们是由宇宙中一些最猛烈和最有能量的过程引起的时空“涟漪”。阿尔伯特·爱因斯坦 (Albert Einstein) 于 1916 年在他的广义相对论中预测了引力波的存在。爱因斯坦的数学表明,大质量加速物体(例如相互绕行的中子星或黑洞)会扰乱时空,使起伏时空的“波”向远离源头的各个方向传播。这些宇宙涟漪将以光速传播,携带有关其起源的信息,以及... 1 简介引力波与电磁波完全不同,但都是以光速传播,它们是由宇宙中一些最猛烈和最有能量的过程引起的时空“涟漪”。阿尔伯特·爱因斯坦 (Albert Einstein) 于 1916 年在他的广义相对论中预测了引力波的存在。爱因斯坦的数学表明,大质量加速物体(例如相互绕行的中子星或黑洞)会扰乱时空,使起伏时空的“波”向远离源头的各个方向传播。这些宇宙涟漪将以光速传播,携带有关其起源的信息,以及...
- 1 简介等价原理介绍:自由落体系推广狭义相对论的惯性系。等效原理 (EP) 的两个重要变体:弱 EP(无法区分重力下的自由落体和“足够小”区域上的均匀加速度);爱因斯坦 EP(自由落体系中的物理定律与“足够小”区域上的狭义相对论定律相同),在惯性系的简单系统中,等效原理指出惯性质量和重力质量应该相同。爱因斯坦的等效原理(Equivalence Principle)是广义相对论的基石之一,它... 1 简介等价原理介绍:自由落体系推广狭义相对论的惯性系。等效原理 (EP) 的两个重要变体:弱 EP(无法区分重力下的自由落体和“足够小”区域上的均匀加速度);爱因斯坦 EP(自由落体系中的物理定律与“足够小”区域上的狭义相对论定律相同),在惯性系的简单系统中,等效原理指出惯性质量和重力质量应该相同。爱因斯坦的等效原理(Equivalence Principle)是广义相对论的基石之一,它...
- 1 简介本文简单展示了 Go 里面 数值、字符(本质上也是数值)、变量在内存里的管理方式,以及和字符串/UTF-8 表达方式的差异。以下可以从几个角度拆开来看: 2. 数字在内存里的表达和管理在 Go 里,像 int、float64、byte 等基本数值类型都有固定的内存宽度,例如: int 在 64 位系统通常是 8 字节(64bit) int32 就是 4 字节 floa... 1 简介本文简单展示了 Go 里面 数值、字符(本质上也是数值)、变量在内存里的管理方式,以及和字符串/UTF-8 表达方式的差异。以下可以从几个角度拆开来看: 2. 数字在内存里的表达和管理在 Go 里,像 int、float64、byte 等基本数值类型都有固定的内存宽度,例如: int 在 64 位系统通常是 8 字节(64bit) int32 就是 4 字节 floa...
- 1 简介不同语言支持运算符重载程度不同,这是一种允许开发者为自定义类定义运算符行为的方式,使得自定义对象可以像内置类型(如整数或字符串)一样使用运算符(如 +、== 等)。这通过定义类中的特殊方法(也称为“dunder methods”,因为它们以双下划线开头和结尾)来实现。这些方法是 Python 解释器在遇到相应运算符时自动调用的。 2 如何运用定义特殊方法:对于每个运算符,Pytho... 1 简介不同语言支持运算符重载程度不同,这是一种允许开发者为自定义类定义运算符行为的方式,使得自定义对象可以像内置类型(如整数或字符串)一样使用运算符(如 +、== 等)。这通过定义类中的特殊方法(也称为“dunder methods”,因为它们以双下划线开头和结尾)来实现。这些方法是 Python 解释器在遇到相应运算符时自动调用的。 2 如何运用定义特殊方法:对于每个运算符,Pytho...
- 1 简介本文用例子 + 逐位演算来说明 二元按位异或(XOR, ^) 在 Go 中的过程,以速览方式了解该运算过程。异或定义(真值表) 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0异或有两个重要代数性质:a ^ a = 0,a ^ 0 = a,且对换、结合律成立(commutative & associative)。... 1 简介本文用例子 + 逐位演算来说明 二元按位异或(XOR, ^) 在 Go 中的过程,以速览方式了解该运算过程。异或定义(真值表) 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0异或有两个重要代数性质:a ^ a = 0,a ^ 0 = a,且对换、结合律成立(commutative & associative)。...
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢
2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考
2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本
2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签