小白Go入门—Go 语言开发环境、与C++基础语法的不同 | 青训营笔记

152 阅读3分钟

小白Go入门-Go 语言开发环境、与C++基础语法的不同 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第1天

一、搭建Go开发环境:

①安装Go语言:

访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可

或者改为访问 studygolang.com/dl 下载安装

根据自己系统,自行选择安装。推荐下载可执行文件版,一路 Next

②配置Go的集成开发环境:

可以选择安装 VS Code , 或者 Goland ,对于 VS Code,需要安装 Go 插件

③注意环境变量的设置:

GOROOT:go安装路径(也就是上面的go在电脑上的安装路径 )

GOPATH:go项目路径(一般该路径下会需要有三个目录: bin、pkg、src,你可以将多个项目源码放置src中,编译后的文件放置bin中)

检查是否安装成功

安装完后,打开终端 输入 go version 查看安装Go的版本 image.png

若出现以下报错:则需要配置环境变量

image.png

在系统变量中新建“GOPATH”和“GOROOT”变量 image.png

在系统变量中找到“PATH”,点击编辑,加入路径

20200917180855442.png

输入“%GOROOT%\bin”即可。

说明:“%GOROOT”表示引用之前的go的sdk安装路径,后面的\bin表示引用bin文件夹里的内容。

这样就大功告成啦!重新打开终端 输入 go version 查看安装Go的版本~~~

二、Go与C++语言基础的区别:

1:类型

go 语言中有以下几种基本类型bool,int,float32,float64,string,Pointer,array,slice,struct,interface,map complex64,complex128 uint8 uint16等。在基本数据类型上和C++区别不大。

2:声明

GO语言声明变量的方式和C++完全不一样,例如声明一个整型,C++要这样做

int a;
int b = 1;
double c = 5.21; 
char ch = 'a';

GO在进行变量声明时,需要在变量前加var关键字;但GO中的变量可以不定义直接赋值,此时GO会自己根据 := 右侧的表达式计算出变量的类型。

同时,GO还支持多重赋值。

var a int
a = 1
str := "Hello World!"
b,str1 := 521,"Hello world!"    //多重赋值
3:函数

C++声明函数的方式是返回值类型+函数名+(函数参数)+{return 返回值}

int add(int a,int b){
    //函数体
    return a+b;
}

go语言中声明函数的方式是func +函数名+函数参数+返回值类型

func add(x int ,y int) int{
    //函数体
    return x+y
}
4:循环语句

GO不支持whiledo...while形式的循环,仅支持for循环。for循环的条件可以省略不写,但要注意是否为死循环。

在GO的for循环中可以通过多重赋值方式为多个变量赋值。对于多重循环,可以在最外层定义循环标签,并在内层循环中通过break关键字直接指定标签名,直接跳出外层循环。

for i:=0;i<10;i++{
    //循环体
}

for {  
    fmt.Printf("这是无限循环。\n");  
}

而在C++中该声明如下:

for(int i=0;i<10;i++){}
5:选择语句

GO的选择语句中,不支持break关键字,因为GO的选择语句中,遇到符合条件的分支会自动跳出;即switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。

switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以在case分支中增加fallthrough关键字。

switch i {
    case val1:
        fmt.Printf("0")    //i等于var1时,执行完此打印语句后会退出
    case val2:
        fallthrough        //i等于var2时,会继续向下执行
    default:
        ...
}

在GO的switch后面也可以不带表达式,此时在case中需要增加条件:

switch {
    case i == 10:
        return
    case i == 20:
        fmt.Printf("value=20")
    default:
       ...
}

C++中switch 语句执行的过程从上至下,找到匹配项后,执行匹配项的内容,若没有break,则继续按顺序执行下面的语句,直到break。语法上和go语言没有什么区别。

6:错误处理

GO语言通过error类型以及defer、panic、recover三个关键字,相对C++提供了更方便的错误处理。

error:

GO的error实际是一个定义了func Error() string函数的接口。所有的error类型都必须实现Error() 函数。

type error interface {
    Error() string
} 

我们可以在编码中通过实现 error 接口类型来生成错误信息。

函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息:

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 实现
}

而在 C++ 中要实现同样的功能,则需要函数抛出一个 DevideZero异常 ,并在调用处捕获异常再处理;或是定义一个 返回值 并通过 输出参数 返回结果。而通过error进行处理则简单很多

7:类和对象

与C++不同的是Go 中似乎是没有 类和对象 这个语法的,但是我们依然能用go来完成一些 面向对象 的设计。go中的类由 struct和方法 来实现,结构体中保存数据,其中首字母大写为公有,首字母小写为私有。每个方法和相应的struct绑定来完成面向对象的设计。例如下面的代码:

type user struct{   //user 类型的结构体
    name string
    password string
}

func (u user) checkPassword(password string) bool{    //为结构体定义方法
    return u.password == password
}

func (u *user) resetPassword(password string) {
    u.password = password
}
等等。。。。。还有好多好多~还需要努力学习呀!

三、运行中遇到的一些小BUG:

image.png

Error running 'go build Learn1': Cannot run program "C:\Users\Administrator\AppData\Local\Temp\GoLand___go_build_Learn1.exe" (in directory "D:\Go\Go_WorkSpace\Learn1"): CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。

在go语言编译的时候,如果只是单单编译一个文件的话,package必须是main,意味着是可以单独编译的。

解决办法 ——— 修改为 package main 就可以

四、引用参考:

该文章部分内容来自于以下课程或网页:

字节内部课:Go 语言上手 - 基础语法

Go 语言教程 | 菜鸟教程 (runoob.com)

go程序报错 | Cannot run program

C++程序员学习 | go基础语法