1.1什么是Go语言
1.2Go语言入门 环境
1.3基础语法
1.3.1变量
var name="value" 自己推断变量类型;
也可以显式类型 var c int =1
name:= type(value)
常量: const name ="value"
g := a+"foo" 字符串拼接
![](https://i-blog.csdnimg.cn/blog_migrate/e3d6c9ac4ea350a6d2def929d807095b.png)
1.3.2 if else
{}花括号不能省略,if后的条件没有();
![](https://i-blog.csdnimg.cn/blog_migrate/3dced51ca6f54b5ab43277b52087def8.png)
1.3.3 只有for循环 没有while
![](https://i-blog.csdnimg.cn/blog_migrate/d25e19d20f1d5d796db9a185605eb734.png)
1.3.4 switch
C++中没有break,会继续跑完所有分支
而Go中默认不用加break,跑完一个case 就直接退出;
并且Go的switch更加强大,switch后可以不加变量,case 后可以加条件语句,替代if-else
![](https://i-blog.csdnimg.cn/blog_migrate/d0cfcc4ad0d0dbb7fd7e19f01d2f91d2.png)
1.3.5 数组
真实业务中,因为数组 长度固定 很少用,更多使用切片
![](https://i-blog.csdnimg.cn/blog_migrate/cae4ebd53fd0a46d238c65a4fcff3a83.png)
1.3.6 切片
append()必须返回值赋值给原切片; 追加元素;
![](https://i-blog.csdnimg.cn/blog_migrate/fbe0111dcd07cee5fc880d5c1a3f609a.png)
1.3.7 map无序
使用最频繁的数据结构
name :=make(map[key]value-type)
r,ok :=m["unknow"] ,ok 获取这个map里是否存在这个key
![](https://i-blog.csdnimg.cn/blog_migrate/f5c6e1ec09e2462d444c6410123a92d5.png)
1.3.8 range 快速遍历
![](https://i-blog.csdnimg.cn/blog_migrate/a8d8cdd7fda916d90c1ede870ed634bf.png)
1.3.9 函数
函数参数(name type)
![](https://i-blog.csdnimg.cn/blog_migrate/43e301d6a99ffc1e25bb0816bbfac635.png)
1.3.10 指针 *
主要操作:对传入的参数 进行修改
比C++的指针 操作有限
![](https://i-blog.csdnimg.cn/blog_migrate/f3bbd3f98ff7047d51e6490d5f346335.png)
1.3.11 结构体
![](https://i-blog.csdnimg.cn/blog_migrate/a1dc93e4d397203f5062e8f17ec070ae.png)
1.3.12 结构体方法
func check(u user,pass string) bool{
return u.pass==pass
}
修改参数位置 从普通函 数变成类成员函数
func (u user) check(pass string) bool{
return u.pass==pass
}
![](https://i-blog.csdnimg.cn/blog_migrate/859289ae9481ad30cb9635741939722c.png)
1.3.13 错误处理
不同于java的异常,Go用单独的返回值err error返回错误信息
能够很清晰的知道哪个函数出现了错误,用if else处理错误
![](https://i-blog.csdnimg.cn/blog_migrate/386d7132662a9fab9eadd8fb7a24f60e.png)
1.3.14 字符串操作
Contains 是否包含
Count 字符串包含几个子字符串
Index 查找位置
Join 拼接
Repeat 重复拼接,等
len 一个中文字符会对应多个字符长度
![](https://i-blog.csdnimg.cn/blog_migrate/bf9ec33844e2cd69f7cc4a2a9c343cec.png)
1.3.15 字符串格式化
println 打印换行
printf() 格式化 %v代表各种变量值;%+v代表更加详细的name:value变量;
%#v代表详细到 结构体.变量; %.2f 2位数
![](https://i-blog.csdnimg.cn/blog_migrate/622ec0ec672d4bb523ab9139e42dc7ba.png)
1.3.16 JSON处理
只要保证结构体的第一个字母是大写,
用json.Marshal(结构体name)序列化 转成数组
打印String强转
json.Unmarshal(结构体name)反序列化
![](https://i-blog.csdnimg.cn/blog_migrate/25b9091f9b4b5ae7b8a46f9d60e36693.png)
1.3.17 时间处理
![](https://i-blog.csdnimg.cn/blog_migrate/0182011c9300c06011fc5f0bfb43c8bc.png)
1.3.18 数字解析 strconv包
ParseInt("字符串",进制(0代表自动推测) ,64代表返回64精度的整数 )
![](https://i-blog.csdnimg.cn/blog_migrate/ece18a3bc72a00def4f48bb0543a71f8.png)
1.3.19 进程信息
![](https://i-blog.csdnimg.cn/blog_migrate/2ed7c615e6aea2b40b8ba448f01356b1.png)
2.在VSCode里面下载安装golang的插件
可用快捷键ctrl+shift+x,或者点击下方图片里面的位置,显示出应用商店
搜索关键字"go",基本上第一个就是,进去点击安装
![](https://i-blog.csdnimg.cn/blog_migrate/a80ae102ab1cf84ebb9d5d98e4d5d438.png)
3.配置golang辅助工具
使用快捷键:Ctrl+Shift+P 输入Go:Install/Update Tools,选择全都要,但是注意,会安装失败!这一步目前没什么用,看看就行。
![](https://i-blog.csdnimg.cn/blog_migrate/8e41987ce27b94913ecf0d7ce9d41396.png)
安装失败:
![](https://i-blog.csdnimg.cn/blog_migrate/e86b3e6ac4608fa296a69946badb87c1.png)
这是因为go的支持挂在国外,好在现在有go的代理
3.1配置go代理的环境变量
进入Goproxy.cn 网站
里面有个PowerShell (Windows)配置,把PowerShell (Windows)里面的两个配置到环境变量里面
![](https://i-blog.csdnimg.cn/blog_migrate/da02e8d4cb01d7e08e14ba179b6a70e6.png)
到这里代理环境变量配置完成,可以打开cmd执行go env查看一下,刚才配置的环境变量已经存在了
这时候需要重启VSCode,再来一次Ctrl+Shift+P 输入Go:Install/Update Tools的操作就可以正常安装go工具了,不用快捷键也可以,进去后VSCode会提示让我们安装,直接安装所有就行,安装的依赖包会自动保存在刚才创建的Go/pkg里面,以后写代码配置的依赖包都会下载在pkg文件夹里面,所以前面不建议默认配置在c盘,还是改成其他盘好点。
之前为了下载go工具搞了很久,有说要改settings.json文件配置的,有说要在go的src下面创建golang.org/x/文件夹的,可能是因为版本原因,我这里都没成功过,最后找到配置代理环境变量的方法,很有效。
4.创建helloword.go文件,进行测试
在go.mod的同级目录下,创建helloword.go文件,右键新建文件就可以,在helloword.go文件里写上:
package main
import "fmt"
func main() {
fmt.Println("hello word!")
}
接着在VSCode终端执行命令go run .\helloword.go,或者执行go build,会生成一个.exe可执行文件,直接运行.exe文件也可以,而且这也是比较标准的做法,成功输出hello word!到这里VSCode配置golang完成,可以开始浪了。