zl程序教程

Go函数

  • 深入分析Go1.17函数调用栈参数传递

    深入分析Go1.17函数调用栈参数传递

    了解到 C 语言的函数调用,6个以内的参数通过寄存器传递,6个以外的在栈上传递。网上多篇Go的函数调用分析文章,说Go的函数调用时参数都是通过栈传递,自己通过实际运行Go1.17版本函数调用的汇编代码发现,Go的函数调用时参数是通过寄存器传递。对于这点有些好奇,专门写篇文章分析下。0. 结论先把结论提前摆出来,有不愿花时间看分析过程的,可以直接看结论:1)Go1.17.1之前的函数调用,参数都在栈

    日期 2023-06-12 10:48:40     
  • go 函数调用规约

    go 函数调用规约

    函数调用规约?如果你是第一次听到这个名词可能会有疑惑,这是在说什么?难道两个函数之间调用还需要约定什么吗?难道不是定好入参出参就可以了吗?没错函数的调用规约其实就是:我在调用其他函数的时候我的参数和返回值要如何分布?那么其实在 golang 底层函数的调用还是有很多细节的,比如你的入参放在哪里?返回值存放在哪里?相信看完这篇你就都明白了。栈 首先我们定一下基调,因为我们今天讨论的是函数调用规约,所

    日期 2023-06-12 10:48:40     
  • Go语言结构体之属性及函数(十八)

    Go语言结构体之属性及函数(十八)

    Go语言结构体之属性及函数属性和函数定义两种作用域目录结构 ├── demo │ └── demo.go ├── go.mod └── main.go复制demo.go文件 package demo import "fmt" type Dog struct { ID int //属性

    日期 2023-06-12 10:48:40     
  • 【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)

    【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)

    文章目录一、通讯录1.什么是通讯录2.通讯录小结案例2.1 用户录入界面2.2 增2.3 删2.4 改2.5 查一、通讯录1.什么是通讯录通讯录的信息可以涵盖多项内容比如:姓名、电话号码、单位电话、移动电话、传真号、电子邮件、QQ、MSN、个人主页、公司、街道、邮编、生日、大头贴、车牌、银行账号、俱乐部名称、爱好等等。以往的通讯录都是纸制的容易破损丢失,如今的通讯录都是可以在个人电脑、掌上电脑、移

    日期 2023-06-12 10:48:40     
  • Mongoose: aggregate() 方法实现聚合函数

    Mongoose: aggregate() 方法实现聚合函数

    需求描述 参考文献 需求描述 首先我有一个 Item 的 collection:type Item { _id: String itemname: String! itemid: String! itemtype: String! parent_id: String } /////////////////// /// 主要是下面这一些部分 type Query

    日期 2023-06-12 10:48:40     
  • 一文读懂 Golang init 函数执行顺序

    一文读懂 Golang init 函数执行顺序

    文章目录1.init 函数简介2.执行顺序2.1 单个源文件的 init 执行顺序2.2 单个包的 init 执行顺序2.3 main 包导入多个包时 init 执行顺序2.3.1 不存在依赖2.3.2 存在依赖2.4 包级变量初始化与 init 函数执行顺序3.小结参考文献1.init 函数简介Golang init 函数是一种特殊的函数,主要用于完成程序的初始化工作,如初始化数据库的连接、载入

    日期 2023-06-12 10:48:40     
  • GoLang17 - Go 语言递归函数&类型转换

    GoLang17 - Go 语言递归函数&类型转换

    Go 语言递归函数&类型转换Go 语言递归函数递归,就是在运行的过程中调用自己。语法格式func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() }复制Go 语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。递归函数对于解决数学上的问题是非常有用的,就像计算

    日期 2023-06-12 10:48:40     
  • Go-函数作为参数传递

    Go-函数作为参数传递

    Go-函数作为参数传递编码过程中业务需要将一个函数,作为参数传递到函数内部。Go 语言的匿名函数是一个闭包(Closure)什么是闭包闭包指的是引用了自由变量的函数(未绑定到特定对象的变量,通常在匿名函数外定义),被引用的自由变量将和这个函数一同存在。f := func() { var i int = 1 fmt.Printf("i, j: %d, %d\n",

    日期 2023-06-12 10:48:40     
  • Go 函数式编程篇(二):参数传递、变长参数与多返回值

    Go 函数式编程篇(二):参数传递、变长参数与多返回值

    上篇教程我们介绍了 Go 语言中函数的基本定义和调用,其中也涉及到了函数的传参和返回值,只不过那里演示的是最简单的场景,今天我们就更复杂的传参和返回值进行介绍。 一、传递参数按值传参Go 语言默认使用按值传参来传递参数,也就是传递参数值的一个副本:函数接收到传递进来的参数后,会将参数值拷贝给声明该参数的变量(也叫形式参数,简称形参),如果在函数体中有对参数值做修改,实际上修改的是形参值,这不会影响

    日期 2023-06-12 10:48:40     
  • Go 函数式编程篇(三):匿名函数和闭包

    Go 函数式编程篇(三):匿名函数和闭包

    一、匿名函数的定义和使用 匿名函数是一种没有指定函数名的函数声明方式(与之相对的,有名字的函数被称为具名函数),在很多编程语言中都有实现和支持,比如 PHP、JavaScript(想想 Ajax 请求的实现)等,Go 语言中也提供了对匿名函数的支持,并且形式上和其他语言类似:func(a, b int) int { return a + b } 复制和其他语言一样,Go 匿名函数也可以赋

    日期 2023-06-12 10:48:40     
  • Go 函数式编程篇(七):基于管道技术实现函数的流式调用

    Go 函数式编程篇(七):基于管道技术实现函数的流式调用

    管道技术概述管道(Pipeline)这一术语来源是 Unix 的 Shell 命令行,我们可以使用管道连接符 | 通过组合简单的命令实现强大的功能,比如我们想要从系统进程列表中筛选出 nginx 进程,可以这么做:ps -ef | grep nginx 复制这里就是通过管道连接了 ps 和 grep 两个基本的 Unix 命令,在 ps -ef 的返回结果之上通过 grep nginx 筛选出

    日期 2023-06-12 10:48:40     
  • Go 数据结构和算法篇(十四):哈希表、哈希函数、哈希冲突和哈希算法

    Go 数据结构和算法篇(十四):哈希表、哈希函数、哈希冲突和哈希算法

    一、哈希表哈希表(HashTable,也叫散列表),是根据键名(Key)直接访问对应内存存储位置的数据结构。其实现原理是通过哈希函数(也叫散列函数)将元素的键名映射为数组下标(转化后的值叫做哈希值或散列值),然后在对应下标位置存储记录值。当我们按照键名查询元素时,可以使用同样的哈希函数,将键名转化为数组下标,从对应的数组下标位置读取数据:散列表图示显然,哈希表使用了数组支持按照下标随机访问数据的特

    日期 2023-06-12 10:48:40     
  • CGO学习二,基本数据类型转换2 和 函数调用

    CGO学习二,基本数据类型转换2 和 函数调用

    基本数据类型转换2 和 函数调用CGO 涉及的数据类型转换包含一下内容:数值类型字符串和切片类型结构体、联合体、枚举类型‘数组类型指针类型数组和指针间的转换切片和切片之间的转换前面 3 个咱们在上一篇短文已经梳理到了,接下来继续数组类型C 语言里面:数组C 语言里面,数组名对应一个指针,指向特定类型特定长度的一段内存,但是这个指针不能被修改C语言的字符串是一个char类型的数组,字符串的长度需要根

    日期 2023-06-12 10:48:40     
  • 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-913 二元函数

    第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-913 二元函数

    第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-913 二元函数目录第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-913 二元函数前言关于数学的疑问算法训练 二元函数C语言C++语言Java语言Python语言总结第六届——第十三届省赛题解第六届——第十二届国赛题解前言        这段时间我会把蓝桥杯官网上的所有非VIP题目都发布一遍,让大家方便去搜索,所有题目都会有几种

    日期 2023-06-12 10:48:40     
  • 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

    【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

    文章目录一、通过修改 GOT 全局偏移表拦截函数二、通过在实际被调用的函数中添加跳转代码实现函数拦截一、通过修改 GOT 全局偏移表拦截函数使用 GOT 全局偏移表 拦截函数 , 只需要将 GOT 表中的 函数地址 指向 我们 自定义的 拦截函数 即可 ;当调用 指定的 需要被 拦截的函数时 , 就会调用我们 自定义的 拦截函数 , 之后再调用 自定义的处理函数 , 处理函数有如下处理方式 :①

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】mmap 系统调用源码分析 ② ( sys_mmap_pgoff 系统调用函数执行流程 | sys_mmap_pgoff 函数源码 )

    【Linux 内核 内存管理】mmap 系统调用源码分析 ② ( sys_mmap_pgoff 系统调用函数执行流程 | sys_mmap_pgoff 函数源码 )

    文章目录一、sys_mmap_pgoff 系统调用函数执行流程二、sys_mmap_pgoff 系统调用函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;一、sys_mmap_pg

    日期 2023-06-12 10:48:40     
  • Go-函数-声明和调用函数(一)

    Go-函数-声明和调用函数(一)

    函数是一种可重复使用的代码块,可以在程序中多次调用。函数的目的是为了提高代码的重用性,减少代码的重复编写,以及更方便地维护代码。在 Go 语言中,函数是一个独立的模块,它有一个函数名和一组输入参数,可以执行特定的任务并返回一个结果。函数的声明和调用在 Go 语言中,函数的声明格式如下:func 函数名(参数列表) 返回值类型 { // 函数体 }复制其中,函数名是唯一标识符,参数列表是以逗

    日期 2023-06-12 10:48:40     
  • Go语言函数变量——把函数作为值保存到变量中

    Go语言函数变量——把函数作为值保存到变量中

    在Go语言中,函数也是一种类型,可以和其他类型一样保存在变量中,下面的代码定义了一个函数变量 f,并将一个函数名为 fire() 的函数赋给函数变量 f,这样调用函数变量 f 时,实际调用的就是 fire() 函数,代码如下: package main import ( "fmt" ) func fire() { fmt.Println("fir

    日期 2023-06-12 10:48:40     
  • Go语言函数类型实现接口——把函数作为接口来调用

    Go语言函数类型实现接口——把函数作为接口来调用

    函数和其他类型一样都属于“一等公民”,其他类型能够实现接口,函数也可以,本节将对结构体与函数实现接口的过程进行对比。 首先给出本节完整的代码: package main import ( "fmt" ) // 调用器接口 type Invoker interface { // 需要实现一个Call方法 Call(interf

    日期 2023-06-12 10:48:40     
  • Go语言递归函数

    Go语言递归函数

    很对编程语言都支持递归函数,Go语言也不例外,所谓递归函数指的是在函数内部调用函数自身的函数,从数学解题思路来说,递归就是把一个大问题拆分成多个小问题,再各个击破,在实际开发过程中,递归函数可以解决许多数学问题,如计算给定数字阶乘、产生斐波系列等。 构成递归需要具备以下条件: 一个问题可以被拆分成多个子问题; 拆分前的原问题与拆分后的子问题除了数据规模不同,但处理问题的思路是一样的; 不能

    日期 2023-06-12 10:48:40     
  • Go语言计算函数执行时间

    Go语言计算函数执行时间

    函数的运行时间的长短是衡量这个函数性能的重要指标,特别是在对比和基准测试中,要得到函数的运行时间,最简单的办法就是在函数执行之前设置一个起始时间,并在函数运行结束时获取从起始时间到现在的时间间隔,这个时间间隔就是函数的运行时间。 在Go语言中我们可以使用 time 包中的 Since() 函数来获取函数的运行时间,Go语言官方文档中对 Since() 函数的介绍是这样的。 func Since(t

    日期 2023-06-12 10:48:40     
  • MongoDB中数据的替换方法实现类Replace()函数功能详解

    MongoDB中数据的替换方法实现类Replace()函数功能详解

    近日接到一个开发需求,因业务调整,需要DBA协助,将MongoDB数据库中某集合的进行替换。例如我们需要将集合A中B字段中,有关《美好》的字符替换为 《非常美好》。个人感觉这个需求如果是在SQL Server 或MySQL 数据库上处理是小菜一碟,如果是针对MongoDB数据,可能要费神了。 1.常见关系数据数据库中的替换函数 在SQL Server数据库中,我们用Replace函数来实现字

    日期 2023-06-12 10:48:40     
  • MongoDB Remove函数的3个常见用法

    MongoDB Remove函数的3个常见用法

    在MongoDB中,db.collection.remove()方法用来从文档中删除文档。可以从一个集合中删除所有文档,删除匹配一个条件的所有文档,或者限制操作只删除一条文档。 删除所有文档: 删除集合中的所有文档,需要传递一个空的query文档{}给remove()方法。remove()方法不会删除索引。下面是从inventory集合中删除所有文档的例子: db.inventory

    日期 2023-06-12 10:48:40     
  • go基础之–函数和map详解编程语言

    go基础之–函数和map详解编程语言

    普通类型变量存的就是值,也叫值类型。指针类型存的是地址,即指针的值是一个变量的地址。一个指针指示值所保存的位置,不是所有的值都有地址,但是所有的变量都有。使用指针可以在无序知道变量名字的情况下,间接读取或更新变量的值。 获取变量的地址,用 ,例如:var a int 获取a的地址: a, a(a的地址)这个表达式获取一个指向整形变量的指针,它的类型是整形指针(*int),如果值叫做p,我们说p指

    日期 2023-06-12 10:48:40     
  • Go语言圣经-匿名函数习题详解编程语言

    Go语言圣经-匿名函数习题详解编程语言

    Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访问完整的词法环境(lexical environment),这意味着在函数中定义的内部函数可以引用该函数的变量3.函数值不仅仅是一串代码,还记录了状态,意味着匿名函数和父函数中,存在变量引用,函数值属

    日期 2023-06-12 10:48:40     
  • Go语言圣经-错误,函数值习题详解编程语言

    Go语言圣经-错误,函数值习题详解编程语言

    Go语言圣经-错误 1.panic异常。panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重要组成部分,程序运行失败仅被认为是几个预期的结果之一 4.那些将运行失败看作是预期结果的函数,它们会返回一个额外的返回值,通常是最后一个,来传递错误信息 5.用户需要了解更多的错误信息。因此

    日期 2023-06-12 10:48:40     
  • Go语言圣经-函数递归习题详解编程语言

    Go语言圣经-函数递归习题详解编程语言

    练习 5.1: 修改findlinks代码中遍历n.FirstChild链表的部分,将循环调用visit,改成递归调用。 练习 5.2: 编写函数,记录在HTML树中出现的同名元素的次数。 练习 5.3: 编写函数输出所有text结点的内容。注意不要访问 script 和 style 元素,因为这些元素对浏览者是不可见的。 练习 5.4: 扩展visit函数,使其能够处理其他类型的结点,如i

    日期 2023-06-12 10:48:40     
  • Go字符串函数详解编程语言

    Go字符串函数详解编程语言

    p("Replace: ", s.Replace("foo", "o", "0", -1)) //替换字符,后两个参数表示起始位置和长度,-1表示到结尾 p("Replace: ", s.Replace("foo", "o", "0", 1)) //替换字符,后两个参数表示起始位置和长度 p("Split: ", s.Split("a-b-c-d-e", "-")) //分割字符串,与

    日期 2023-06-12 10:48:40     
  • Go语言简单的统计函数

    Go语言简单的统计函数

    本节中我们定义了一个聚合类型的结构体,包含用户输入的数据以及我们准备计算的两种统计: type statistics struct {  numbers  []float64  mean  float64  mdian  float64} Go语言里的结构体类似于C语言里的结构体或者 Java 里只有 public 数据成员的类(不能

    日期 2023-06-12 10:48:40     
  • Go语言函数中的参数传递效果测试

    Go语言函数中的参数传递效果测试

    Go语言中传入与返回参数在调用和返回时都使用值传递,这里需要注意的是指针、切片和 map 等引用型对象在参数传递中不会发生复制,而是将指针进行复制,类似于创建一次引用。 下面通过一个例子来详细了解Go语言的参数值传递,完整的示例代码如下所示: package main import fmt // 用于测试值传递效果的结构体 type Data struct { complax

    日期 2023-06-12 10:48:40     
  • Go语言将函数作为返回值

    Go语言将函数作为返回值

    fmt.Printf( Call Add2 for 3 gives: %v/n , p2(3)) // make a special Adder function, a gets value 3: TwoAdder := Adder(2) fmt.Printf( The result is: %v/n , TwoAdder(3)) func Add2() func(b int) in

    日期 2023-06-12 10:48:40