我们今天来学习的是:

文章简介: g o go go语言是一门略不同于 c + + c++ c++, c c c等常见语言的一门语言,有些地方甚至相反,本文就对 g o go go语言进行一个简略的介绍。

我们先来看一张图:

如图,我们可以看到各大语言的排行榜。本图省略了 2000 2000 2000年及以前的排行,而那时是 c c c语言居首位,之后 J a v a Java Java语言就逐渐取代了 c c c语言的位置。但是经过时间的磨练, J a v a Java Java语言显然后劲不足,后来都趋近于 c c c语言了。

之所以开发 G o Go Go 语言,是因为“近 10 10 10年来开发程序之难让我们有点沮丧”。
这一定位暗示了 G o Go Go语言希望取代 C C C J a v a Java Java的地位,成为最流行的通用开发语言。

							————$go$语言官方

下面我们就拿目前位居排行榜首位的 J a v a Java Java语言标准库中的线程和 g o go go语言比较一下:

J a v a Java Java

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();
// ...
}

g o go go:

func run(arg string) {
// ...
}
func main() {
go run("test")
//...
}

果然名副其实,是一门说 g o go go g o go go的语言,当然也有人说,叫 g o go go语言是因为是 G o o g l e Google Google出的吧,这也有道理,但我们今天讨论的不是这个。

go语言的历史

说到了 g o go go语言,我们就不得不提起大名鼎鼎的贝尔实验室, 1969 1969 1969年该实验室就发明了一个有名的操作系统———— U n i x Unix Unix(我咋都不知道呢)。而我们众所周知的 C C C语言,便是由 U n i x Unix Unix衍生出来的。

后来他们发展出了一个 U n i x Unix Unix的后续代替系统。在之后的几十年中,该研究项目又演变出了另一个
I n f e r n o Inferno Inferno的项目分支,以及一个名为 L i m b o Limbo Limbo的编程语言。而这个 L i m b o Limbo Limbo,就是 g o go go语言的前身。

再后来,这一批贝尔实验室的人加入了 G o o g l e Google Google,正式发明了 g o go go语言。


go语言的注意事项

PS:之所以把它放在比较靠前的位置,是因为为了后面阅读的便利

1、定义和变量之间的位置关系

func getName()(firstName, middleName, lastName, nickName string){
return "May", "M", "Chen", "Babe"
}

我们注意到,有一段是 n i c k N a m e nickName nickName s t r i n g string string 。这里如果转化为 c + + c++ c++等等,就是 s t r i n g string string n i c k N a m e nickName nickName。我们要习惯这种变量倒着定义的方法。


2、每行代码后不加分号

func getName()(firstName, middleName, lastName, nickName string){
firstName = "May"
middleName = "M"
lastName = "Chen"
nickName = "Babe"
return
}

可以发现,这其中每一行代码后都没有分号。这是比较大的不同之处,也是两种语言相互转化时最容易出错的。


3、主函数,子函数, f o r for for语句等等的‘{’必须要紧跟着语句写,也就是说不能换行!!!还有就是子函数和主函数的开头要‘定义’为 f u n c func func

func main() {
var fly IFly = new(Bird)
fly.Fly()
}

这种例子我不举出大家应该都能想到,不过我还是如图,举一个主函数的例子。我们可以看到, f u n c func func m a i n ( ) main() main()后的‘{’并没有换行(千万别把这个当成习惯问题, g o go go语言必须这样写)。


4、关于:=的使用

...
sum := 0
...

例如这么一句话。其实,它的意思就是先定义 s u m sum sum,然后再把 s u m sum sum值赋成 0 0 0。当然大家肯定会有一个问题:这样是定义成什么类型呢? a n s w e r answer answer:根据:=后的数值————也就是要赋的值觉得,比方说,你赋一个整数,它就给你定义成 i n t int int 型。赋一个字符,它就给你定义成 c h a r char char型等等。


5、调用子函数

go sum(values[:len(values)/2], resultChan)
go sum(values[len(values)/2:], resultChan)

g o go go语言的子函数调用就如其名,要在前面加上一个 g o go go。但是和 c + + c++ c++等等仅有一个 g o go go字之差吗?答案并不是。其实这一个 g o go go,就相当于把每个执行的子函数都分到不同的地方执行。同时进行,这效率不言而喻。


go语言的一些小应用

part 1:go语言返回值

func getName()(firstName, middleName, lastName, nickName string){
return "May", "M", "Chen", "Babe"
}

以上是一个 g o go go语言的函数,我们注意到,刚开始的定义的不是 i n t int int d o u b l e double double b o o l bool bool 类型等等,而是 f u n c func func(全拼: f u n c t i o n function function

在函数后有两对(),前面一对表示括号表示传入这个函数的参数,而后面括号就表示传出这个函数变量(参数)。

当然,函数中肯定会做一些事情,最后可以返回四个变量(因为定义了四个)

PS:其他方面的 g o go go语言过于深奥(其实是我不会了),下面我们来看一个简单的程序 H e l l o Hello Hello W o r l d World World!(有一种历史的沧桑感),来一窥 g o go go语言的基本结构。

part 2:Hello World!!!

package main//每个程序都要加上一个package main开头,其中包含一个main()函数(主函数),也就是执行程序的起点
import "fmt"// 我们需要使用fmt包中的Println()函数
//以上略等同于#include<cstdio>/#include<iostream>
//using namespace std;
func main() {//进行主函数,这里不要忘了注意事项里讲述的坑点!
fmt.Println("Hello, world. 你好,世界!")//就像printf(".....")/cout<<"....."类似。
}

由于注释太多,一些解释挪到下面。

我们借此机会再阐述一下子函数的格式:

func 函数名(参数列表)(返回值列表) {
// 函数体
}

再来让我们看一个实例:

func Compute(value1 int, value2 float64)(result float64, err error) {
// 函数体
}

c + + c++ c++不同,它可以返回多个值。如例子,它返回了 r e s u l t result result e r r err err两个值。当然,如果这两个变量没有赋值,那么就好返回它们各自的初值,比如 r e s u l t result result就是 0.0 0.0 0.0 e r r err err就是 n i l nil nil

当然, g o go go语言的注释和 c + + c++ c++等语言的注释还是完全一样的

go语言编译环境准备

搜索一下" g o l o a n g goloang goloang"你很容易获得的。

条件语句

e.g.:

if a < 5 {
return 0
} else {
return 1
}

关于条件语句,我们需要注意以下几点:

1、 条件语句不需要使用括号将条件包含起来()

2、 无论语句体内有几条语句,花括号{}都是必须存在的

3、 左花括号{必须与 i f if if或者 e l s e else else处于同一行;

4、 在 i f if if之后,条件语句之前,可以添加变量初始化语句,使用;间隔;

5、 子函数最终的 r e t u r n return return 不允许在 i f if if e l s e else else中出现。这句话有些难懂,下面提供一个例子:

func example(x int) int {
if x == 0 {
return 5
} else {
return x
}
}

这样就会编译错误喽!!(因为子函数的返回: r e t u r n return return 进入了条件语句


go语言的循环语句

循环语句包括 f o r for for w h i l e while while d o w h i l e do-while dowhile等等,但 g o go go语言中仅仅支持 f o r for for关键字

e.g:

sum := 0
for i := 0; i < 10; i++ {
sum += i
}

如例,这段代码计算的就是 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 1+2+3+4+5+6+7+8+9 1+2+3+4+5+6+7+8+9.

也和条件语句一样,它不需要用()包裹起来。。.

这段代码与其他语言基本相似,在这里不再赘述

e.g:

sum := 0
for {
sum++
if sum > 100 {
break
}
}

如例,这是一个类似与 c + + c++ c++等语言中 w h i l e while while d o w h i l e do-while dowhile之类的语句,就是简化了不必要的部分,让人们不用再写 f o r for for ( ; ; ) (;;) (;;)

还有一个核心的部分:多重赋值

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]
}

注意到倒数第二行,相当于 s w a p ( a [ i ] , a [ j ] ) swap(a[i],a[j]) swap(a[i],a[j]);

go语言switch语句

c c c类似,不过默认 c a s e case case之间是分割的,不用怕忘记 b r e a k break break了。

后记:

1、本人文章主要讲述一些信息学上的各类新语言,结构等。如想浅析区块链,请移步:https://www.luogu.org/blog/cong666/qian-tan-ou-kuai-lian-chu-bu

2、部分内容来自‘图灵社区会员’

3、另一个研究作业:自行了解 g o go go语言调用 C C C语言?

4、日后我可能还会发表 g o go go语言的拓展,那时会更深一层的解释

期待下次再会!