
Golang 包管理、函数
文章平均质量分 78
hnwcww
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
Golang 函数 不定参数(args ...int)
如同C语言中的printf()函数,Go语言标准库中的fmt.Println()等函数的实现也严重依赖于语言的不定参数功能。形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。之前的例子中将不定参数类型约束为int,如果你希望传任意类型,可以指定类型为interface{}。我们将介绍不定参数的用法。合适地使用不定参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。,也就是[ ]type,这也是为什么上面的参数args可以用for循环来获得每个传入的参数。原创 2023-09-26 09:58:56 · 958 阅读 · 0 评论 -
Golang 函数参数的传递方式 值传递,引用传递
我们在讲解函数注意事项和使用细节时,已经讲过值类型和引用类型了,这里我们再系统总结一下,因为这是重难点,值类型参数默认就是值传递,而引用类型参数默认就是引用传递。原创 2023-08-02 15:57:39 · 1571 阅读 · 0 评论 -
Golang 错误处理机制 panic
Go程序中,也支持自定义错误,使用errors.New和panic内置函数。1) errors.New("错误说明"),会返回一个error类型的值,表示一个错误2)panic内置函数,接收一个interface{]类型的值(也就是任何值了)作为参数。可以接收error类型的变量,输出错误信息,并退出程序.发生一个错误,希望错误信息由我自己来定义,希望发生错误之后程序放弃执行,因为有些错误是致命的,比如读取配置文件,配置文件都读取不到,那么下面的代码再去执行也没有意义了。//读取文件操作。原创 2023-07-13 16:52:22 · 837 阅读 · 0 评论 -
Golang 匿名函数
Go支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用。在定义匿名函数时就直接调用,这样匿名函数就只能调用一次。}(1, 2)上面就是匿名函数在定义的时候就完成了调用,定义就是func,调用就是传参了,这样就是在定义匿名函数的时候就调用了它。将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数//将匿名函数func(abb int)int赋给a变量,则a的数据类型就是函数类型,此时,我们可以通过a完成调用。原创 2023-06-14 09:44:33 · 379 阅读 · 0 评论 -
Golang 函数调用机制
在真实的内存里面是没有test和main栈区的,这里只是为了区分。这两个数据空间是独立的,但是同时都在栈区里面。这里可以清楚的看到,虽然两个名字都叫n1,但是其实上都是独立的。就好比不同的教师里面坐着名字相同的人。注意test函数执行完毕之后会返回到main中的test函数。调用结束之后test就消失了,编译器会去回收这部分空间。main函数执行完毕之后那么整个函数就执行完毕了。那么整个分配的内存空间就全部回收了。对上图说明。原创 2023-05-09 09:22:33 · 851 阅读 · 0 评论 -
Golang 包使用注意事项
7)如果包名较长,Go支持给包取别名,注意细节:取别名后,原来的包名就不能使用了(取别名u,那么要使用新的别名去访问这个包的变量和函数)1)在给一个文件打包时,该包对应一个文件夹,比如这里的utils文件夹对应的包名就是utils,6)在访问其它包函数时,其语法是 包名.函数名,比如这里的main.go文件中(变量也是一样)5) 为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似其它。语言的public,这样才能跨包访问。2)当一个文件要使用其它包函数或变量时,需要先引入对应的包。原创 2023-05-06 09:21:13 · 570 阅读 · 0 评论 -
Go 函数 defer和追踪
关键字 defer 允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为 return 语句同样可以包含一些操作,而不是单纯地返回某个值)。关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源。示例 6.8 defer.go: 输出:请将 defer 关键字去掉并对比输出结果。使用 defer 的语句同样可以接受参数,下面这个例子就会在执行转载 2022-06-13 21:17:40 · 514 阅读 · 0 评论 -
Golang 函数基本形式
函数的基本形式//函数定义。a,b是形参func argf(a int, b int) { a = a + b }var x, y int = 3, 6argf(x, y) //函数调用。x,y是实参形参是函数内部的局部变量,实参的值会拷贝给形参。 函数定义时的第一个的大括号不能另起一行。 形参可以有0个或多个。 参数类型相同时可以只写一次,比如argf(a,b int)。 在函数内部修改形参的值,实参的值不受影响。如果想通过函数修改实参,就需要指针类型。func .原创 2022-05-30 15:44:41 · 869 阅读 · 0 评论 -
Go init 初始化函数
main 包与 init函数 main 包用于声明告知编译器将包编译为二进制可执行文件 ,在 main 包中的 main 函数是程序的入口,无返回值,无参数。main函数也常常写在main包里面,在其他地方不写。init 函数 init 函数是初始化包使用,无返回值,无参数。建议每个包只定义一个。init 函数在 import 包时自动被调用(const->var->init)。初始化函数就是在导入包的时候执行的_用来做..原创 2022-02-28 11:58:08 · 1030 阅读 · 0 评论 -
Go 包管理 包导入方式 成员可见性
包名称保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为小写单词,不要使用下划线或者混合大小写。原创 2022-02-28 10:45:50 · 702 阅读 · 0 评论 -
Golang 函数数据类型、函数作为返回值
函数也是一种类型,定义变量用var,定义常量用const,定义函数用func。函数类型 函数也可以赋值给变量,存储在数组、切片、映射中,也可作为参数传递给函数或作为函数 返回值进行返回。func add(a,b int) int{ return a + b}func main() { c := add fmt.Printf("%v",reflect.TypeOf(c))}这个c到底是什么东西?可以打印一下c的类型。func(int, in.原创 2022-02-20 23:13:27 · 2406 阅读 · 0 评论 -
Go 包管理方式
包定义之前写代码都是在main包里面写代码的,如果代码写的很多了,就需要按照代码的组织功能进行拆分,可以放在不同的文件里面,不同的文件又可以放到不同的文件夹里面。在go里面可以认为包就是文件夹,包是函数和数据的集合。Go 源文件都需要在开头使用 package 声明所在包,包名告知编译器哪些是包的源代码用于 编译库文件,其次包名用于限制包内成员对外的可见性,最后包名用于在包外对公开成员的 访问。同一个目录里面所有go文件的包名都是一致的,以后在发布包的时候就可以将单独的文件夹..原创 2022-02-19 15:34:17 · 4145 阅读 · 0 评论 -
Golang 函数递归调用
递归 递归是指函数直接或间接调用自己,递归常用于解决分治问题, 分治问题就是将大问题分解为相同的小问题进行解决,需要关注终止条件。递归函数函数内部调用函数自身的函数称为递归函数使用递归函数最重要的三点:退出条件: 退出条件基本上都使用退出点来定义,退出点常常也称为递归的基点,是递归函数的最后一次递归点,或者说没有东西可递归时就是退出点。 递归函数很可能会产生一大堆的goroutine(其它编程语言则是出现一大堆的线程、进程),也很可能会出现栈空间内存...原创 2022-02-19 14:10:29 · 1122 阅读 · 0 评论 -
Golang defer函数 延迟执行
在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer(延时机制,只要函数执行完毕之后,那么它一定会将你指定的资源关闭)。当代码执行到defer到时候,暂时不会执行,而是会压入到独立defer的栈中,和函数战不在同一个地方。当函数执行完毕之后再从defer栈中按照先入后出的方式执行(其实就是return过后,或者没有return的函数执行完毕之前,再去defer栈中取数据)。defer 关键字用户声明函数,原创 2022-02-17 14:59:24 · 632 阅读 · 0 评论 -
Golang 使用函数的正确姿势
前导内容:函数是一等的公民在 Go 语言中,函数可是一等的(first-class)公民,函数类型也是一等的数据类型。这是什么意思呢?简单来说,这意味着函数不但可以用于封装代码、分割功能、解耦逻辑,还可以化身为普通的值,在其他函数间传递、赋予变量、做类型判断和转换等等,就像切片和字典的值那样。而更深层次的含义就是:函数值可以由此成为能够被随意传播的独立逻辑组件(或者说功能模块)。对于函数类型来说,它是一种对一组输入、输出进行模板化的重要工具,它比接口类型更加轻巧、灵活,它的值也借此变成了可被..原创 2021-12-17 16:02:05 · 717 阅读 · 0 评论 -
Go modules工程 修改包依赖的版本号
工作目录在开始Go Modules工程前,我们需要介绍下GOPATH工程, 它虽然不怎么好用,但是他是你1.11版本之前的唯一选择GOPATH 工程在Go 1.1 ~ 1.11 (2013/05 ~ 2018/08), 都是使用GoPATH工程结构, 直到现在依然有很多老的项目依然使用这种方式特征安装部署go环境,使用go进行开发的时候强制被要求要设置GOPATH(当然安装过程中也会默认指定$GOPATH=~/go)。 要在GOPATH路径下新建 src /bin /pkg文..原创 2021-11-28 12:46:32 · 796 阅读 · 0 评论 -
Go 函数和方法:Go 语言中的函数和方法到底有什么不同?
函数初探在前面的,你已经见到了 Go 语言中一个非常重要的函数:main 函数,它是一个 Go 语言程序的入口函数,我在演示代码示例的时候,会一遍遍地使用它。下面的示例就是一个 main 函数:func main() {}它由以下几部分构成: 任何一个函数的定义,都有一个 func 关键字,用于声明一个函数,就像使用 var 关键字声明一个变量一样 然后紧跟的 main 是函数的名字,命名符合 Go 语言的规范即可,比如不能以数字开头 main 函数名字后面原创 2021-11-26 11:47:43 · 1343 阅读 · 0 评论