我们今天来学习的是:
文章简介:gogogo语言是一门略不同于c++c++c++,ccc等常见语言的一门语言,有些地方甚至相反,本文就对gogogo语言进行一个简略的介绍。
我们先来看一张图:
如图,我们可以看到各大语言的排行榜。本图省略了200020002000年及以前的排行,而那时是ccc语言居首位,之后JavaJavaJava语言就逐渐取代了ccc语言的位置。但是经过时间的磨练,JavaJavaJava语言显然后劲不足,后来都趋近于ccc语言了。
之所以开发GoGoGo 语言,是因为“近101010年来开发程序之难让我们有点沮丧”。 这一定位暗示了GoGoGo语言希望取代CCC和JavaJavaJava的地位,成为最流行的通用开发语言。
————$go$语言官方下面我们就拿目前位居排行榜首位的JavaJavaJava语言标准库中的线程和gogogo语言比较一下:
JavaJavaJava:
public class MyThread implements Runnable { String arg; public MyThread(String a) { arg = a; } public void run() { // ... } public static void main(String[] args) { new Thread(new MyThread("test")).start(); // ... }gogogo:
func run(arg string) { // ... } func main() { go run("test") //... }果然名副其实,是一门说gogogo就gogogo的语言,当然也有人说,叫gogogo语言是因为是GoogleGoogleGoogle出的吧,这也有道理,但我们今天讨论的不是这个。
说到了gogogo语言,我们就不得不提起大名鼎鼎的贝尔实验室,196919691969年该实验室就发明了一个有名的操作系统————UnixUnixUnix(我咋都不知道呢)。而我们众所周知的CCC语言,便是由UnixUnixUnix衍生出来的。
后来他们发展出了一个UnixUnixUnix的后续代替系统。在之后的几十年中,该研究项目又演变出了另一个 叫InfernoInfernoInferno的项目分支,以及一个名为LimboLimboLimbo的编程语言。而这个LimboLimboLimbo,就是gogogo语言的前身。
再后来,这一批贝尔实验室的人加入了GoogleGoogleGoogle,正式发明了gogogo语言。
PS:之所以把它放在比较靠前的位置,是因为为了后面阅读的便利
1、定义和变量之间的位置关系
func getName()(firstName, middleName, lastName, nickName string){ return "May", "M", "Chen", "Babe" }我们注意到,有一段是nickNamenickNamenickName stringstringstring 。这里如果转化为c++c++c++等等,就是stringstringstring nickNamenickNamenickName。我们要习惯这种变量倒着定义的方法。
2、每行代码后不加分号
func getName()(firstName, middleName, lastName, nickName string){ firstName = "May" middleName = "M" lastName = "Chen" nickName = "Babe" return }可以发现,这其中每一行代码后都没有分号。这是比较大的不同之处,也是两种语言相互转化时最容易出错的。
3、主函数,子函数,forforfor语句等等的‘{’必须要紧跟着语句写,也就是说不能换行!!!还有就是子函数和主函数的开头要‘定义’为funcfuncfunc。
func main() { var fly IFly = new(Bird) fly.Fly() }这种例子我不举出大家应该都能想到,不过我还是如图,举一个主函数的例子。我们可以看到,funcfuncfunc main()main()main()后的‘{’并没有换行(千万别把这个当成习惯问题,gogogo语言必须这样写)。
4、关于:=的使用
... sum := 0 ...例如这么一句话。其实,它的意思就是先定义sumsumsum,然后再把sumsumsum值赋成000。当然大家肯定会有一个问题:这样是定义成什么类型呢?answeransweranswer:根据:=后的数值————也就是要赋的值觉得,比方说,你赋一个整数,它就给你定义成intintint 型。赋一个字符,它就给你定义成charcharchar型等等。
5、调用子函数
go sum(values[:len(values)/2], resultChan) go sum(values[len(values)/2:], resultChan)gogogo语言的子函数调用就如其名,要在前面加上一个gogogo。但是和c++c++c++等等仅有一个gogogo字之差吗?答案并不是。其实这一个gogogo,就相当于把每个执行的子函数都分到不同的地方执行。同时进行,这效率不言而喻。
以上是一个gogogo语言的函数,我们注意到,刚开始的定义的不是intintint,doubledoubledouble,boolboolbool 类型等等,而是funcfuncfunc(全拼:functionfunctionfunction)
在函数后有两对(),前面一对表示括号表示传入这个函数的参数,而后面括号就表示传出这个函数变量(参数)。
当然,函数中肯定会做一些事情,最后可以返回四个变量(因为定义了四个)
PS:其他方面的gogogo语言过于深奥(其实是我不会了),下面我们来看一个简单的程序HelloHelloHello WorldWorldWorld!(有一种历史的沧桑感),来一窥gogogo语言的基本结构。
由于注释太多,一些解释挪到下面。
我们借此机会再阐述一下子函数的格式:
func 函数名(参数列表)(返回值列表) { // 函数体 }再来让我们看一个实例:
func Compute(value1 int, value2 float64)(result float64, err error) { // 函数体 }与c++c++c++不同,它可以返回多个值。如例子,它返回了resultresultresult,errerrerr两个值。当然,如果这两个变量没有赋值,那么就好返回它们各自的初值,比如resultresultresult就是0.00.00.0,errerrerr就是nilnilnil。
当然,gogogo语言的注释和c++c++c++等语言的注释还是完全一样的
搜索一下"goloanggoloanggoloang"你很容易获得的。
e.g.:
if a < 5 { return 0 } else { return 1 }关于条件语句,我们需要注意以下几点:
1、 条件语句不需要使用括号将条件包含起来()
2、 无论语句体内有几条语句,花括号{}都是必须存在的
3、 左花括号{必须与ififif或者elseelseelse处于同一行;
4、 在ififif之后,条件语句之前,可以添加变量初始化语句,使用;间隔;
5、 子函数最终的returnreturnreturn 不允许在ififif或elseelseelse中出现。这句话有些难懂,下面提供一个例子:
func example(x int) int { if x == 0 { return 5 } else { return x } }这样就会编译错误喽!!(因为子函数的返回:returnreturnreturn 进入了条件语句
循环语句包括forforfor,whilewhilewhile,do−whiledo-whiledo−while等等,但gogogo语言中仅仅支持forforfor关键字
e.g:
sum := 0 for i := 0; i < 10; i++ { sum += i }如例,这段代码计算的就是1+2+3+4+5+6+7+8+91+2+3+4+5+6+7+8+91+2+3+4+5+6+7+8+9.
也和条件语句一样,它不需要用()包裹起来。。.
这段代码与其他语言基本相似,在这里不再赘述
e.g:
sum := 0 for { sum++ if sum > 100 { break } }如例,这是一个类似与c++c++c++等语言中whilewhilewhile,do−whiledo-whiledo−while之类的语句,就是简化了不必要的部分,让人们不用再写forforfor (;;)(;;)(;;)
e.g:
a := []int{1, 2, 3, 4, 5, 6} for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 { a[i], a[j] = a[j], a[i] }注意到倒数第二行,相当于swap(a[i],a[j])swap(a[i],a[j])swap(a[i],a[j]);
和ccc类似,不过默认casecasecase之间是分割的,不用怕忘记breakbreakbreak了。
后记:
1、本人文章主要讲述一些信息学上的各类新语言,结构等。如想浅析区块链,请移步:https://www.luogu.org/blog/cong666/qian-tan-ou-kuai-lian-chu-bu
2、部分内容来自‘图灵社区会员’
3、另一个研究作业:自行了解gogogo语言调用CCC语言?
4、日后我可能还会发表gogogo语言的拓展,那时会更深一层的解释
转载于:https://www.cnblogs.com/vercont/p/10210114.html
相关资源:15套Go语言教程-百度云盘.txt