Go语言学习笔记1

本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。

1. 前言

1.1 Go的前身

继unix后,20世纪80年代,贝尔实验室又开始了一个名为plan9的操作系统项目。目的是解决unix的一些问题以及发展出一个新的可替代unix的操作系统。

在开发的过程中,该项目又演变出一个名字叫Inferno的分支,以及一个名为Limbo的编程语言(Limbo就是Go的前身)。

在后来,贝尔实验室经历了多次动荡,大多数plan9的人都进入了googlegugugule。早在2007.9,这还是一个实验项目(实际上就是神们业余时间没事干整一下)。但幸好,2008.5,googlegugugule发现了这个项目的潜力,从而开始全力支持这个项目。Go的第一个版本(非正式)于2009.11发布,此后2年快速更新迭代,第一个正式版本于2012.3.28发布

1.2 Go的特性

1.2.1 自动垃圾回收

我们先看看不支持自动垃圾回收的语言是怎么样的,这是一段C++代码

void foo()
{
    int bar;
    int *p = new int[114514];
    p[0]+=100;
    p[114513]-=100;
    //.............
    delete[] p;//需要手动进行回收
    delete bar;
}

各种奇奇怪怪的原因,都可能导致最后的delete语句没有执行。然后就会出现著名的悬空指针问题(一读写,即爆炸的指针)。然后就到了著名的熬夜debug环节。对此,c++社区呼声不断。

但为什么C++仍然不支持垃圾回收呢,这是由于C++”强大”的计算能力,请看下列代码

/*我们假设有一个gc()函数来进行垃圾回收*/
int *p = new int;
p++;
gc();
p--;//又移回来了???
*p=10;//如果有垃圾回收的话,就无法保证此处正常运行了...

而在Go中,因为没有C++如此”强大”的计算能力,自动垃圾回收在go中可以流畅的执行

1.2.2 更丰富的内置类型

在C++中,我们使用字典,字符串(指string而不是char*)以及可变长度数组(数组切片)都需要引入库

#include <vector>
#include <map>
#include <algorithm>
#include <string>
//其实直接#include <bits/stdc++.h>即可

而上面这些在Go中均为内置类型,既可以减少输入量,也可以让代码更简洁似乎并没有什么用

1.2.3 函数多返回值

在C++中,函数多返回值需要一个结构体或者多个变量,比如

struct ret{
    int x,y;
    string str;
}
ret T(int x,int y,string str){
    ret t;
    t.x=x;
    t.y=y;
    t.str=str;
    return t;
}

而在Go中,你只需要

func T(x,y int,str string)(w,r int,st_r string){
	return x,y,str
}

当你只想获取其中的一些返回值时,你可以

_,_,str = T(114514,191981,"野兽先辈")

当然,Go语言的优点还有许多,限于文章篇幅,我们不能全部列出实际上就是懒得写了

2. 正片

2.1安装

进入这里选择合适的操作系统并安装

Tips: 使用Linux的同学可以直接使用apt,zypper,rpm或pacman下载

由于时间原因,这里不细讲安装,想看的请到这里

2.2.1测试安装

随便整个目录,创建test-install.go,写入以下代码

package main

import "fmt"

func main(){
    fmt.Println("Install success!")
}

之后,在终端里输入

go run 你文件夹的路径/test-install.go

如果输出

Install success!

则证明安装成功。

2.2.2 安装编辑器

请百度,如果你想知道有什么适合的编辑器,看这里

2.2 运行第一个Go 程序

在某个目录里(以后最好一直使用这个目录)建立一个名字叫Hello.go的新文本文件(笔者的使用的Linux,路径为/home/caviar-x/桌面/工作/编程/go/Hello.go)

Tips:如果你使用的是Goland,你可以直接新建一个项目

在编辑器里输入如下代码

package main

import "fmt"

func main(){
    fmt.Println("Hello World!")
}

之后,在终端里输入

go run 你文件夹的路径/Hello.go

之后会输出

Hello World!

恭喜你,你已经成功的编写了属于你自己的第一个Go语言代码,常言道块块碎土成高山,你已经有了属于自己的第一块碎土了,加油吧

本文作者:Caviar-X

本文链接: http://caviar-x.top/2021/05/learn-go/

评论