
"当我回头,妄想找到幸福的线索,那束光拉长我的影子,逃离我。"
一、Go简介
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强乐西、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全, GC(垃圾回收), 结构形态及 CSP-style 并发计算。 Go(计算机编程语言)

go也是现在很火的一个语言。很多的大厂如字节、百度、谷歌等等内部上万的微服务,使用golang来编写,可以说在未来它的发展前景市场占有率会越来越高。
go语言的特点:
1.高性能、高并发
2.语法简单、精炼,顺序C、C++语言的 容易上手
3.标准库丰富
4.跨平台
5.静态编译 等等
二、Go的基础语法
(1)Hello world
运行程序:
①go run + filename
②go build + filename 会直接生成可执行二进制程序

第一行package main代表该文件属于main包的一部分。是程序的入口点
第三行import类似python的import导入模块。要使用标准库里的函数,在C、C++中的做法通常为#include<...>。FMT里面包含了打印到显示器的函数

注意:main后面的第一个花括号一定是和main函数在同一行的!
(2)定义变量
go它是一门强类型的语言,每一个变量都有它自己的类型,不像python是一门动态类型的语言,变量的类型可以不断变化。
go常见的类型:
字符串、整型、浮点型、布尔类型
为此,字符串可以直接用+、==进行拼接和比较。这是类似python 的语法。
声明方式:
①var + 变量名 (类型属性)= 值属性
②变量名 := 值属性
③对于常量类型,把var去掉 带上const即可

(3)Go语言的控制语句
ifelse:
golang中的ifelse条件不需要代括号,并且后面需要跟上大括号 。
在条件中也可以定义变量

循环语句:
go中摈弃了while、dowhile 唯独保留了for。并且break、continue仍然是可以在go中使用的。
for循环中间的任意一段都可以省略

switch:
golang没有像python切掉switch的语法。并将switch分支结构完善得更强大。
switch的条件不仅仅可以是整数


(4)数组切片
golang数组定义也有两种方法:
①var + 变量名 + [个数] 类型
②变量名 := [个数]类型 {初始化}
注:var 不能用{}初始化

切片;
用make创建一个切片,用它像数组一样去使用。

(5)map
在其他编程语言,习惯叫它为哈希、字典。
1.mapName := map[keyType]valueType
{ "KEY1":"Value1",
"KEY2":"Value2",
"KEY3":"Value3"}
2.我们可以使用make去创建一个字典

map使用[] 会返回两个值,而不单单是value

(6)range
range通常用来快速遍历,使代码更简洁。它在遍历的时候,也会返回两个值,一个是容器的索引,第二个是索引下的值。如果我们想去掉返回值的其中一个,在对应位置_ 替代。

(7)函数\指针
golang的函数支持多个返回值。

golang保留C、C++中指针的使用;

(8)结构体\结构体方法
定义结构体:
type 变量名 struct{
//进行初始化
a type
b type
}
结构体方法:
func (u *user) 函数名(){
}

三、Go的库函数例举
(1)错误处理
在函数的返回值里面加一个error,就代表该函数处理可能会返回错误。
如果出现错误,只需要返回一个 nil和一个 error.

(2)字符串操作与格式化
strings.操作:
strings.Contains 子串是否包含
strings.Count 统计个数
strings.HasPrefix 前缀包含
strings.HasSuffix 后缀包含
strings.Index 第一次出现的下标
strings.Join 拼接
strings.Repeat 重复
strings.Replace 替代
strings.Split 分割
strings.ToLower 小写
strings.ToUpper 大写

字符串格式化;
Go中的printf类似于 C语言的printf。不同的是,%v可以打印任意类型,%+v 与 %#v会更加详细地进行打印

(3)JSON的处理
我们创建一个结构体。并保证每个字段的第一个字母是大写的公开字段,那么这个结构体就可以用JSON.marshaler去序列化。变成一个JSON字符串。也可以采用JSON.unmarshaler去反序列化。

(4)时间处理
time.Now() 即刻时间
time.Date() 设置时间
t.Year()\t.Month()\t.Day()\t.Hour()\t.Minute()
t.sub() 时间转换
now.Unix()时间戳

(5)数字解析
strconv 就是子串转换
我们可以用Atoi把一个十进制数转换为数字,也可以用itoA把数字转换为字串
如果输入错误 会返回err

(6)进程信息
os.Args 获取命令行输入的参数
os.Getenv\Setenv 分贝是获取和设置环境变量

本篇到此结束,感谢你的阅读
祝你好运,向阳而生~
