最最通俗易懂,并带小说情节的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 )
}

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

相关文章
|
17天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
61 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
109 67
|
2天前
|
监控 安全 算法
深度剖析核心科技:Go 语言赋能局域网管理监控软件进阶之旅
在局域网管理监控中,跳表作为一种高效的数据结构,能显著提升流量索引和查询效率。基于Go语言的跳表实现,通过随机化索引层生成、插入和搜索功能,在高并发场景下展现卓越性能。跳表将查询时间复杂度优化至O(log n),助力实时监控异常流量,保障网络安全与稳定。示例代码展示了其在实际应用中的精妙之处。
24 9
|
12天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
46 12
|
15天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
23 0
|
29天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
1月前
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
|
2月前
|
Go 数据安全/隐私保护 开发者
Go语言开发
【10月更文挑战第26天】Go语言开发
46 3
|
2月前
|
Java 程序员 Go
Go语言的开发
【10月更文挑战第25天】Go语言的开发
40 3