《Go语言入门到实战》
文章平均质量分 91
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go语言的主要目标是“让编写可信赖软件变得简单且有趣”。
码农三叔
这个作者很懒,什么都没留下…
展开
-
(7-1)结构体和共用体:定义并使用结构体
在前面的内容中,我们已经学习了一种构造数据的类型—数组,在数组里面能够存储多个同种类型的数据。但是在实际应用中,有时需要在一组数据中保存多个不同类型的数据。例如,在学生登记表中,姓名应该是字符型,学号可以是整型或字符型,年龄应为整型,性别应为字符型,成绩可以为整型或实型。很显然,我们不能用一个数组来存放学生登记表中的所有信息。为了能够同时存储各种数据类型的数据,Go语言提供了结构(structure,或叫结构体)和共用体类型。在本章的内容中,将详细讲解C语言中结构体和共用体的知识原创 2024-05-17 17:42:48 · 382 阅读 · 0 评论 -
(6-3)指 针:指针和多维数组
在函数main()中,我们创建了一个3x3的二维数组arr,并将其传递给printArray函数,由于&arr是一个指向数组的指针,因此我们需要使用“&”符号来获取其地址。此外,这个示例代码只是一个简单的实现,如果需要进一步完善游戏逻辑,可能需要使用更复杂的算法来计算每个面上的数字之和,并进行相应的调整。假设有一个趣味的游戏,游戏中有一个 3x3x3 的立方体,每个位置上可以放置一个数字,游戏的目标是使得每个水平面、垂直面和对角线上的数字之和都相等。在Go语言中,指针和三维数组的结合使用也是非常常见的。原创 2024-05-17 14:48:56 · 393 阅读 · 0 评论 -
(6-2)指 针:使用指针
请看下面的实例,演示了如何使用指针的指针在函数之间传递多个值的方法。原创 2024-05-16 10:54:27 · 746 阅读 · 0 评论 -
(6-1)指 针:指针基础+ 指针的声明和初始化
指针是Go语言中广泛使用的一种数据类型,通过指针变量可以表示各种数据结构,可以很方便地使用数组和字符串,并能像汇编语言一样处理内存地址,从而编写出精练而高效的程序。在本章的内容中,将详细讲解Go语言指针的知识,并通过具体实例讲解使用函数的方法。原创 2024-05-15 11:09:04 · 704 阅读 · 0 评论 -
(5-5)函数:变量的作用域
请看下面的演示代码(源码路径:Go-codes\5\jin.go),在函数main()内部定义了一个名为 globalVariable 的变量,与全局变量的名称相同。在一个代码块内部声明的变量在该代码块执行期间可见,一旦代码块执行完毕,这些变量就会被销毁。全局作用域用于引入所需的包,包级别作用域用于定义常量和变量,函数级别作用域用于生成随机数,块级别作用域用于记录。需要注意的是,函数级别作用域变量的名称只在函数内部可见,这意味着函数内部的变量名称可以与外部的变量名称相同,而不会导致冲突。原创 2024-05-14 14:29:52 · 708 阅读 · 0 评论 -
(5-4)函数:常用的内置库函数
接下来,当用户需要验证密码时,程序会读取保存的哈希值,并使用sha256.Sum256()函数计算用户输入密码的哈希值。本实例演示了如何使用哈希函数来实现一个简单的密码管理器的过程,使用Go语言的crypto/sha256哈希函数来计算用户输入的密码的哈希值,并将该哈希值存储到文件中。该函数用于计算当前时间与指定时间之间的时间差,返回的是Duration类型的数据,例如time.Since(startTime)表示计算从startTime到当前时间的时间差。它适用于字符串或字节数组等非加密数据的哈希计算。原创 2024-05-13 14:21:50 · 531 阅读 · 0 评论 -
(5-3)函数:函数的高级用法
举个例子,假设有一个函数 forEach()可以遍历整数切片,并将每个元素作为参数传递给回调函数进行处理,那么我们可以使用匿名函数作为回调函数,在每个元素上执行自定义的操作,比如打印元素的平方。在上述代码中,我们使用匿名函数 func(num int) { fmt.Println(num * num) } 作为回调函数传递给 forEach 函数,当 forEach 函数遍历切片中的每个元素时,都会执行匿名函数中定义的操作,即打印元素的平方。在 Go 语言中,递归函数指的是函数可以调用自身的一种特殊函数。原创 2024-05-12 10:18:59 · 694 阅读 · 0 评论 -
(5-2)函数:函数的参数
最后,在函数main()中再次打印 x 的值。在Go语言中,引用传递是指将参数的引用(指针)复制到函数的形参中,函数对形参的修改会影响原始变量的值。在Go语言中,值传递是指将参数的值复制到函数的形参中,函数对形参的任何修改不会影响原始变量的值。在 Go 语言中,切片也可以作为函数的参数传递,和数组不同的是,切片的长度是动态的,因此切片传递的实参和形参在函数调用时不需要考虑切片的长度。在这些调用中,函数myFunc()接收到的参数分别是一个包含五个整数的切片,一个包含三个整数的切片,以及一个空的切片。原创 2024-05-11 22:37:17 · 585 阅读 · 0 评论 -
(5-1)函数:函数基础
函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率。函数是Go语言程序重要的构成部分之一,通过编写函数和对函数的调用可以实现软件项目需要的功能。在Go语言软件项目中,绝大多数功能是通过函数实现的。在本章的内容中,将详细讲解Go语言函数的知识,并通过具体实例讲解使用函数的方法。原创 2024-05-11 10:04:18 · 915 阅读 · 0 评论 -
(4-4)容器(Container):List列表
因此,在使用 list 时,需要通过操作元素的指针来进行插入、删除、移动等操作。双向链表是一种数据结构,每个节点除了包含一个元素之外,还包含了指向前一个节点和后一个节点的指针,因此可以双向遍历链表。列表的原理可以这样理解:假设 A、B、C 三个人都有电话号码,如果 A 把号码告诉给 B,B 把号码告诉给 C,这个过程就建立了一个单链表结构,如下图4-1所示。那么如果需要获得所有人的号码,只需要从 A 或者 C 开始,要求他们将自己的号码发出来,然后再通知下一个人如此循环,这样就构成了一个列表遍历的过程。原创 2024-05-09 14:02:32 · 651 阅读 · 0 评论 -
(4-3)容器(Container):map映射
在上面的代码中,函数make()用于创建一个空的映射,m["apple"] = 1语句用于向映射中添加键值对,m["apple"] = 3用于修改键值对中的值,delete(m, "banana")用于删除指定的键值对,最后使用for循环和range关键字遍历映射中的所有键值对。需要注意的是,映射是一种引用类型,如果将映射作为参数传递给函数或者赋值给另一个变量,那么实际上是传递了指向同一个底层数据结构的指针,所以对于同一个映射的操作,会影响到所有的引用它的变量。原创 2024-05-08 14:05:07 · 944 阅读 · 0 评论 -
(4-2)容器(Container):切片
执行后会输出下面的内容,可以看到,copy() 函数将 src 切片的第 2、3、4 个元素复制到了 dst 切片的第 3、4、5 个位置。在Go程序中,切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C++语言中的数组类型,或者 Python语言中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集。其中,函数len()用于获取切片的长度,也就是切片中元素的数量,而函数cap()用于获取切片的容量,也就是底层数组中元素的数量。原创 2024-05-07 20:09:46 · 829 阅读 · 0 评论 -
(4-1)容器(Container):数组
在Go语言中,变量在一定程度上能满足简易程序功能的要求。但是如果编写一些复杂的程序,例如涉及到算法、结构和逻辑时就需要更复杂的类型来实现。这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称为“容器(Container)”。Go语言中的容器包含数组、切片、映射以及列表,在本章的内容中,将详细讲解Go语言容器的知识和用法。原创 2024-05-07 11:01:20 · 944 阅读 · 0 评论 -
(3-3)流程控制语句:循环控制语句
在Go语言中,continue 语句和break语句类似,但是 continue 不是跳出循环,而是跳过当前这一次循环,即跳过循环体中当前执行的这次循环,然后接着进行下一次是否执行循环的判定。Go语言中 break 语句除了可以结束 for、switch 和 select 的代码块外,还可以在语句后面添加标签,表示退出某个标签对应的代码块,对标签的要求是必须定义在对应的for、switch和select的代码块上。请看下面的代码,在变量a等于15的时候跳过本次循环并回到循环的开始语句LOOP处。原创 2024-05-06 10:24:33 · 663 阅读 · 0 评论 -
(3-2)流程控制语句:循环语句
与其他大多数编程语言不同的是,Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do…先判断赋值表达式 init 是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判断condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。在Go程序中,通过使用循环语句可以多次执行指定的程序。在上述代码中,循环条件是i <= 100,只要满足这个条件,就执行for循环体中的代码“sum += i”。原创 2024-05-06 10:18:50 · 307 阅读 · 0 评论 -
(3-1-02)流程控制语句:条件语句(2)
在Go语言中,case 是一个独立的代码块,执行完毕后不会像C语言那样紧接着执行下一个 case,但是为了兼容一些移植代码,依然加入了关键字fallthrough来实现这一功能。在Go程序中,还可以使用switch 语句的type-switch用法,用于判断某个interface变量中实际存储的变量的类型。(4)如果满足“条件1”则执行后面对应的“代码块1”, 如果满足“条件2”则执行后面对应的“代码块2”,如果都不满足,则执行default后面的“代码块N”。switch语句的执行流程如图3-4所示。原创 2024-05-05 11:22:01 · 713 阅读 · 0 评论 -
(3-1-01)流程控制语句:条件语句(1)
在大多数情况下,Go程序按照代码的编写顺序自上向下顺序执行。但是有的时候,需要让代码不按部就班的顺序执行。通过流程控制语句可以改变程序的执行顺序,也可以让指定的程序反复执行多次。可以将流程控制语句分为两大类:条件语句和循环语句。在本章的内容中,将详细讲解Go语言流程控制语句的知识。原创 2024-05-05 11:17:38 · 631 阅读 · 0 评论 -
(2-4-02)基础语法:运算符和表达式(2)
运算符的优先级就是指运算符在表达式运算中的运算顺序,也就是先计算谁的问题,例如在四则运算中,先计算乘、除后计算加、减,乘除的运算符优先级高于加减运算符的优先级。在表2-10中列出了Go语言中所有运算符的优先级顺序,优先级的值越大,表示优先级越高。Go语言中的赋值运算与其他计算机语言中的赋值运算一样,起到了一个赋值的作用。取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数。乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数。除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数。原创 2024-05-04 09:39:29 · 913 阅读 · 0 评论 -
(2-4-01)基础语法:运算符和表达式(1)
但是需要注意,使用求余运算符的两个运算数不但可以为正,而且还可以为负;运算符是程序设计中重要的构成元素之一,和我们的生活息息相关,如进行数据计算、大小比较、关系判断等,都离不开运算符。其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。递增递减运算符分别是指“++”和“- -”,每执行一次,变量将会增加1或者减少1,它可以放在变量的前面,也可以放在变量的后面。原创 2024-05-04 09:37:15 · 554 阅读 · 0 评论 -
(2-3)基础语法:数据类型
在Go语言中,使用双引号书写字符串的方式是字符串常见表达方式之一,被称为字符串字面量(string literal),这种双引号字面量不能跨行。如果想要在源码中嵌入一个多行字符串,就必须使用反引号。例如下面的演示代码。原创 2024-05-03 09:56:26 · 2 阅读 · 0 评论 -
(2-2)基础语法:常量和变量
在Go程序中,声明变量的语法格式如下。原创 2024-05-02 20:39:20 · 717 阅读 · 0 评论 -
(2-1)基础语法:注释+标识符和关键字
对于一门编程语言来说,语法是整个程序的编码规范。在编写程序的过程中,需要遵循这门编程语言的语法规则。如果没有按照语法规则编写程序,程序不会运行成功。在本章的内容中,将详细讲解Go语言基础语法的知识。原创 2024-05-02 20:34:39 · 688 阅读 · 0 评论 -
(1-2)Go语言基础:安装Go
(2)找到适应于Linux系统的Go语言下载包,在正下方“Apple macOS ”选项下面提供了macOS系统的下载链接,分别提供了X86架构的和ARM架构的下载链接,读者根据自己的电脑配置选择对应的下载链接。(2)找到适应于Windows系统的Go语言下载包,单击左下角“Microsoft Windows”选项下面的链接“go1.20.1.windows-amd64.msi”开始下载,弹出如图1-2所示的下载进度对话框。(5)弹出“Installation Options”对话框,如图1-17所示。原创 2024-04-30 15:16:38 · 683 阅读 · 0 评论 -
(1-1)Go语言基础:初步认识GO语言
Go是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”。在本章的内容中,将详细讲解语言的发展历程,讲解搭建Go语言环境的方法,并详细讲解了开发第一个Go语言程序的过程。原创 2024-04-30 15:05:39 · 138 阅读 · 0 评论