小白Go入门-Go 语言开发环境、与C++基础语法的不同 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第1天
一、搭建Go开发环境:
①安装Go语言:
访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可
或者改为访问 studygolang.com/dl 下载安装
根据自己系统,自行选择安装。推荐下载可执行文件版,一路 Next
②配置Go的集成开发环境:
③注意环境变量的设置:
GOROOT:go安装路径(也就是上面的go在电脑上的安装路径 )
GOPATH:go项目路径(一般该路径下会需要有三个目录: bin、pkg、src,你可以将多个项目源码放置src中,编译后的文件放置bin中)
检查是否安装成功
安装完后,打开终端 输入 go version 查看安装Go的版本
若出现以下报错:则需要配置环境变量
在系统变量中新建“GOPATH”和“GOROOT”变量
在系统变量中找到“PATH”,点击编辑,加入路径
输入“%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不支持while和do...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:
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 语言上手 - 基础语法