主页
最近更新
go语言略解(概况)
最后更新于 2025-05-01 20:24:28
作者
ShineEternal
分类
个人记录
复制 Markdown
更新文章内容
我们今天来学习的是:  文章简介:$go$语言是一门略不同于$c++$,$c$等常见语言的一门语言,有些地方甚至相反,本文就对$go$语言进行一个简略的介绍。 我们先来看一张图:  如图,我们可以看到各大语言的排行榜。本图省略了$2000$年及以前的排行,而那时是$c$语言居首位,之后$Java$语言就逐渐取代了$c$语言的位置。但是经过时间的磨练,$Java$语言显然后劲不足,后来都趋近于$c$语言了。 > 之所以开发$Go$ 语言,是因为“近$10$年来开发程序之难让我们有点沮丧”。 这一定位暗示了$Go$语言希望取代$C$和$Java$的地位,成为最流行的通用开发语言。 ————$go$语言官方 下面我们就拿目前位居排行榜首位的$Java$语言标准库中的线程和$go$语言比较一下: $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(); // ... } ``` $go$: ``` func run(arg string) { // ... } func main() { go run("test") //... } ``` 果然名副其实,是一门说$go$就$go$的语言,当然也有人说,叫$go$语言是因为是$Google$出的吧,这也有道理,但我们今天讨论的不是这个。 # go语言的历史 说到了$go$语言,我们就不得不提起大名鼎鼎的贝尔实验室,$1969$年该实验室就发明了一个有名的操作系统————$Unix$(我咋都不知道呢)。**而我们众所周知的$C$语言,便是由$Unix$衍生出来的。** 后来他们发展出了一个$Unix$的后续代替系统。在之后的几十年中,该研究项目又演变出了另一个 叫$Inferno$的项目分支,以及一个名为$Limbo$的编程语言。而这个$Limbo$,就是$go$语言的前身。 再后来,这一批贝尔实验室的人加入了$Google$,正式发明了$go$语言。 ------------ # go语言的注意事项 **PS:之所以把它放在比较靠前的位置,是因为为了后面阅读的便利** 1、定义和变量之间的位置关系 ``` func getName()(firstName, middleName, lastName, nickName string){ return "May", "M", "Chen", "Babe" } ``` 我们注意到,有一段是$nickName$ $string$ 。这里如果转化为$c++$等等,就是$string$ $nickName$。我们要习惯这种变量倒着定义的方法。 ------------ 2、每行代码后不加分号 ``` func getName()(firstName, middleName, lastName, nickName string){ firstName = "May" middleName = "M" lastName = "Chen" nickName = "Babe" return } ``` 可以发现,这其中每一行代码后都没有分号。这是比较大的不同之处,也是两种语言相互转化时最容易出错的。 ------------ 3、主函数,子函数,$for$语句等等的‘{’必须要紧跟着语句写,也就是说不能换行!!!还有就是子函数和主函数的开头要‘定义’为$func$。 ``` func main() { var fly IFly = new(Bird) fly.Fly() } ``` 这种例子我不举出大家应该都能想到,不过我还是如图,举一个主函数的例子。我们可以看到,$func$ $main()$后的‘{’并没有换行(千万别把这个当成习惯问题,$go$语言必须这样写)。 ------------ 4、关于:=的使用 ``` ... sum := 0 ... ``` 例如这么一句话。其实,它的意思就是先定义$sum$,然后再把$sum$值赋成$0$。当然大家肯定会有一个问题:这样是定义成什么类型呢?$answer$:根据:=后的数值————也就是要赋的值觉得,比方说,你赋一个整数,它就给你定义成$int$ 型。赋一个字符,它就给你定义成$char$型等等。 ------------ 5、调用子函数 ``` go sum(values[:len(values)/2], resultChan) go sum(values[len(values)/2:], resultChan) ``` $go$语言的子函数调用就如其名,要在前面加上一个$go$。但是和$c++$等等仅有一个$go$字之差吗?答案并不是。其实这一个$go$,就相当于把每个执行的子函数都分到不同的地方执行。同时进行,这效率不言而喻。 ------------ # go语言的一些小应用 ## part 1:go语言返回值 ``` func getName()(firstName, middleName, lastName, nickName string){ return "May", "M", "Chen", "Babe" } ``` 以上是一个$go$语言的函数,我们注意到,刚开始的定义的不是$int$,$double$,$bool$ 类型等等,而是$func$(全拼:$function$) 在函数后有两对(),前面一对表示括号表示传入这个函数的参数,而后面括号就表示传出这个函数变量(参数)。 当然,函数中肯定会做一些事情,最后可以返回四个变量(因为定义了四个) PS:其他方面的$go$语言过于深奥(其实是我不会了),下面我们来看一个简单的程序$Hello$ $World$!(有一种历史的沧桑感),来一窥$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++$不同,它可以返回多个值。如例子,它返回了$result$,$err$两个值。当然,如果这两个变量没有赋值,那么就好返回它们各自的初值,比如$result$就是$0.0$,$err$就是$nil$。 当然,$go$语言的注释和$c++$等语言的注释还是完全一样的 # go语言编译环境准备 搜索一下"$goloang$"你很容易获得的。 # 条件语句 e.g.: ``` if a < 5 { return 0 } else { return 1 } ``` **关于条件语句,我们需要注意以下几点:** 1、 条件语句不需要使用括号将条件包含起来() 2、 无论语句体内有几条语句,花括号{}都是必须存在的 3、 左花括号{必须与$if$或者$else$处于同一行; 4、 在$if$之后,条件语句之前,可以添加变量初始化语句,使用;间隔; 5、 子函数最终的$return$ 不允许在$if$或$else$中出现。这句话有些难懂,下面提供一个例子: ``` func example(x int) int { if x == 0 { return 5 } else { return x } } ``` 这样就会编译错误喽!!(因为子函数的返回:$return$ 进入了条件语句 ------------ # go语言的循环语句 循环语句包括$for$,$while$,$do-while$等等,但$go$语言中仅仅支持$for$关键字 e.g: ``` sum := 0 for i := 0; i < 10; i++ { sum += i } ``` 如例,这段代码计算的就是$1+2+3+4+5+6+7+8+9$. 也和条件语句一样,它不需要用()包裹起来。。. 这段代码与其他语言基本相似,在这里不再赘述 e.g: ``` sum := 0 for { sum++ if sum > 100 { break } } ``` 如例,这是一个类似与$c++$等语言中$while$,$do-while$之类的语句,就是简化了不必要的部分,让人们不用再写$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] } ``` 注意到倒数第二行,相当于$swap(a[i],a[j])$; # go语言switch语句 和$c$类似,不过默认$case$之间是分割的,不用怕忘记$break$了。 #### 后记: 1、另一个研究作业:自行了解$go$语言调用$C$语言? 2、日后我可能还会发表$go$语言的拓展,那时会更深一层的解释 # 期待下次再会!
Loading...
点赞
1
收藏
0