最最通俗易懂,并带小说情节的Go语言入门教程(连载二),没有之一,不接受反驳

简介: 最最通俗易懂,并带小说情节的Go语言入门教程(连载二),没有之一,不接受反驳

这篇是 Go 语言通俗小说入门教程之二,前篇请戳

最最通俗易懂,并带小说情节的Go语言入门教程,没有之一,不接受反驳

上文讲到了 Go 家族的名字长啥样(文件名后面有.go, Windows用户看不见的话可以在文件夹选项勾选一下 “显示扩展名”), 以及他们家的人怎么起名字,还有遇点事怎么处理,比如做个选择题,跑两圈啥的。

如果就这样下去其实也可以解决很多问题。但是随着王麻子.go 家的孩子越来越多,事情越来越多,王麻子说,这样下去不行,来了个人我都不知道怎么给你们介绍了。

这样吧,以后你们各自成立个小分队,这个小分队起个名字叫函数。

隔壁的张三听到了说,人家都是叫方法,你们偏叫函数。

王麻子说还有叫过程的,你管我们叫啥。这是祖师爷定下的,祖师爷的话要听。

张三说,那你们祖师爷咋规定的?

王麻子说,“听好了,从今往后,凡是自己想干点啥的,你们统一以func 开头,然后各自起个队名,需要啥资源(参数)的提前说,别到了后面找我要,没有的事。另外虽然我不期望你们能干点啥,但是如果你们能给我们点啥,要记得说,到时候我可以找你们要。”

张三说:“你最后说的就是返回值吧”

王麻子:“知道的就别说了,不知道的自己查资料去,现在我把这个要求给你们发一下,你们下去好好研究”

说着,拿出了一张纸,纸上写着如下文字:

func 函数名( 参数,参数... )  返回类型 {
   // 干点好事吧
}

张三说:“你发这没有用,大家看不明白,你那有没有例子,我们参观一下?”

王麻子说“跟我来”,说着来到了最大家。

/* 函数返回两个数的最大值 */
//关键字   方法名    (参数,参数 参数类型) 返回值的数据类型
  func   max        (num1, num2 int)       int {
   /* 定义局部变量 */
   var result int
   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

“看到了吗?” ,王麻子问到,“你先知道这么多就行了,人家有本事的,整的很复杂的,不是一句两句能和你说明白的。你先看看其他的,后面你们熟了自然就知道了。”

张三说:“还不一球样,故弄神虚罢了”。说完张三就走了。

王麻子看见张三走了,擦了一下头上的虚汗,对着祖师爷说:“祖师爷,我碰到了一个难题,如果需要返回多个数据怎么办,请祖师爷明示?”

王麻子突然觉得灵光一现,对着电脑一顿猛抠,

func swap(x, y string) (string, string) {
   return y, x
}

抠完,立马把家里弄了一下,现在王麻子.go家变这样了。

package main
import "fmt"
func swap(x, y string) (string, string) {
   return y, x
}
func main() {
   a, b := swap("Google", "Runoob")
   fmt.Println(a, b)
}

保存后,一运行:

$ go run 王麻子.go
=> Runoob Google

王麻子一看可以,连忙往西方拜了拜,多谢祖师爷提点。

虽然到目前为止,王麻子甚是满意。但是看见家里到处乱跑的数字、字符串,王麻子就想有谁能把他们也组织到一起,这样我把他们放在某个地方,用的时候好拿,也不用一个个记名字。

王麻子想起自己上次拜会祖师爷立马就有了灵感,这次自然又想起祖师爷。

王麻子想着想着就睡着了,梦见了自己到了美国,看见了自由女神像。

王麻子看着自由女神像一直在想,天天举个火炬,累了也没地方放,别一下把纽约点着了。

突然王麻子想起来自己这次是专门来请教祖师爷的,所以就往前一直走。

经过了各种建筑,王麻子终于找到了祖师爷。

祖师爷有点破烂,王麻子有点心酸。

祖师爷说你来找我什么事?

王麻子赶紧整理了一下衣服说,家中小孩日渐增多,管理乏力,能否有个东西,把他们框起来?

祖师爷顺手甩过来了一对中括号 [],如此这般和王麻子说了一番。

王麻子兴高采烈地回到了家中,睁眼一看,原来是场梦。

王麻子趁着还有记忆,赶紧按祖师爷说的做了起来:

//  var 变量名 [数组长度] 变量类型

王麻子先依葫芦画瓢

var 大儿子一家 [10] int
// 响应三胎号召,再生一胎
var 三胎  = [5] int {1, 2, 3, 4, 5}
// 或者
三胎  := [5] int {1, 2, 3, 4, 5}
// 或者用三个点表示数组大小,让祖师爷自己去想
三胎  := [...] int {1, 2, 3, 4, 5}
// 或者将第1个 和 第4个 的初始化
三胎  := [5] int {1:2,  4:3}

王麻子看完,捋捋自己的小胡须得意的笑了笑。这时张三又从其他地方转了回来。

“你整的啥玩意啊?”

王麻子说:“这是洋玩意,祖师爷说了叫数组”

“你整这玩意你也分不开啊,到时一叫一大片,吵死了”,张三说道。

王麻子鄙夷的看了看张三,望着三胎说:“三胎[1]

三胎[1] 举个牌子走了过来,牌子上面写的是2。

张三看到了满脸嘲讽的说,“你这三胎可好了,明明让 1 来,偏偏举了个2”

王麻子气哄哄的说,人家那边数组是从 0 开始编号的,你好好记住吧。

张三还想吵,一看王麻子给气跑了。

这事,王麻子也不懂。但是祖师爷定的规矩不能乱。

日子过得飞快,王麻子日子也很舒心。和以前相比,现在的日子算天堂上的生活了。

除了三胎天天抱怨,有事没事让他跑一趟,本来也没啥他事,有时候就是提提他的名字,他也得来。

后来三胎学精了,也搞托梦那一套。

这不,王麻子又想起来三胎了,这次三胎派了个其他人来了。

王麻子说,“三胎了?”

那个人到 “在下就是,请老爷吩咐”

王麻子气的差点拿起棍子把这个人打死。

这个人不慌不忙的说,“老爷莫生气,我家老爷说了,经常没他什么事,他还拖家带口的跑来跑去,不值当。因此,祖师爷托梦说他有件法器,名为指针。拿着他就相当于我家老爷了。”

王麻子一听是祖师爷说的,往西方一作揖,拱手说到“既然如此,能和我说一下你怎么使唤?”

那人说到,“这很简单,当时祖师爷给了你 [] 这对法器以后,其实还留了一手,以便他随时使唤。如今祖师爷觉得大家很懂规矩,便拿了这个法器给你们。请老爷看我头上有什么?”

王麻子定睛一看,来人头上顶了个 &

来人说“我还有一个兄弟名叫 *。老爷请看:”

王麻子只看来人念着:&三胎, 王麻子就看见了三胎家的地址,很是神奇。

来人说,老爷,你也可以这样:

三胎  := [5] int {1, 2, 3, 4, 5}
  指向三胎的指针 := &三胎
  // “指向三胎的指针[1]” 的值为2
  fmt.Printf("三胎变量的值: %d\n", 指向三胎的指针[1])

王麻子不禁露出了敬仰的表情。

来人继续说道,难道你不好奇那个菊花?

王麻子有点羞愧的说:“我们文人不好这口”

来人一听王麻子这样说,也顿觉羞愧,脸红着说:“虽是有点像,实则非常不同...”

王麻子有点不好意思的说:“此话怎讲?”

来人说:“这个菊花,老爷对不起,我不是故意的”,说着就要抽自己嘴巴。

王麻子此时已经缓过来了,大方的说,“不怪你,祖师爷这样设计,定有他的目的。你请继续”

来人继续说道:“虽然有时候是先有了孩子,后有了住址,不过有时也考虑先分住房,后有孩子。这时就需要用 * 了。”

看老爷有点困惑,来人四下看了看。

王麻子说:“此处无人,但说不妨”。

来人方从怀里拿出一个卷轴,卷轴上有如下字样:

package main
import "fmt"
func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */
   ip = &a  /* 指针变量的存储地址 */
   fmt.Printf("a 变量的地址是: %x\n", &a  )
   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )
   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )
}

王麻子端详半天,顿觉祖师爷智慧不浅。接着又向西方膜拜了半天。想我中原啥时能有此等良物。

相关文章
|
4天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
5天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
54 20
|
11天前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
20 0
|
12天前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
34 14
|
26天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
28 5
|
1月前
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
|
1月前
|
算法 安全 Go
Go语言中的加密和解密是如何实现的?
Go语言通过标准库中的`crypto`包提供丰富的加密和解密功能,包括对称加密(如AES)、非对称加密(如RSA、ECDSA)及散列函数(如SHA256)。`encoding/base64`包则用于Base64编码与解码。开发者可根据需求选择合适的算法和密钥,使用这些包进行加密操作。示例代码展示了如何使用`crypto/aes`包实现对称加密。加密和解密操作涉及敏感数据处理,需格外注意安全性。
47 14
|
2月前
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
|
3月前
|
Go 数据安全/隐私保护 开发者
Go语言开发
【10月更文挑战第26天】Go语言开发
54 3
|
3月前
|
Java 程序员 Go
Go语言的开发
【10月更文挑战第25天】Go语言的开发
47 3

热门文章

最新文章