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

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

相关文章
|
3天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
23 13
|
3天前
|
网络协议 安全 Go
Go语言的网络编程基础
【10月更文挑战第28天】Go语言的网络编程基础
17 8
|
2天前
|
Go
go语言的复数常量
【10月更文挑战第21天】
13 6
|
2天前
|
Go
go语言的浮点型常量
【10月更文挑战第21天】
9 4
|
2天前
|
编译器 Go
go语言的整型常量
【10月更文挑战第21天】
8 3
|
2天前
|
Serverless Go
Go语言中的并发编程:从入门到精通
本文将深入探讨Go语言中并发编程的核心概念和实践,包括goroutine、channel以及sync包等。通过实例演示如何利用这些工具实现高效的并发处理,同时避免常见的陷阱和错误。
|
3天前
|
安全 Go 开发者
代码之美:Go语言并发编程的优雅实现与案例分析
【10月更文挑战第28天】Go语言自2009年发布以来,凭借简洁的语法、高效的性能和原生的并发支持,赢得了众多开发者的青睐。本文通过两个案例,分别展示了如何使用goroutine和channel实现并发下载网页和构建并发Web服务器,深入探讨了Go语言并发编程的优雅实现。
10 2
|
3天前
|
安全 网络协议 Go
Go语言网络编程
【10月更文挑战第28天】Go语言网络编程
89 65
|
3天前
|
Go
go语言编译时常量表达式
【10月更文挑战第20天】
11 3
|
3天前
|
Go
go语言常量的类型
【10月更文挑战第20天】
9 2