DAY1 | Go语言的环境配置和基础语法
Go语言特性——高性能,高并发
语法风格类似C语言
个人认为
Go 比起 C 和 C++ 确实有它的优点,这是很显然的事情。它比起 Java 也有少数优点,然而相对而言更多是不足之处。所以我对 Go 的偏好在比 Java 稍低一点的位置。
Go 语言比起 C,C++ 的强项,当然是它的简单性和垃圾回收。由于 C 和 C++ 的设计有很多历史遗留问题,所以 Go 看起来确实更加优雅和简单。比起那些大量使用设计模式的 Java 代码,Go 语言的代码也似乎更简单一些。另外,Go 的垃圾回收机制比起 C 和 C++ 的全手动内存管理来说,大大降低了程序员的头脑负担
安装GoLand:
安装GoLand,在官网JetBrains GoLand:不只是 Go IDE下载goland的最新版本
接着使用破解插件进行破解
破解完成后,在SDK中添加之前下载的go源文件,配置GoRoot的位置
接着在设置-插件中找到简中语言包,进行汉化
VsCode中配置Go语言的环境:
在扩展中下载Go语言的官方插件
接着创建一个go文件,在右下角弹出的提示框中点击install all,自动下载配置文件
Go语言的语法
1、Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号
2、一行代表一个语句结束,无需分号
3、字符串可以通过加号直接拼接
4、变量的声明必须使用空格隔开
var a = "initial"
//字符串
var b, c int = 1, 2
var d = true
//布尔型
var e float64
//浮点型
5、if 和 else
使用方法和C++类似,if 的条件后无需加括号,只需要空格
6、for循环为go语言唯一的循环结构,以下是go语言的常见用法
用法一:for 赋值表达式; 判断条件; 赋值同时控制变量增减 { }
for i:=0; i<10; i++ {
// 循环10次
}
用法二:for 条件 { }
i := 0
for i<10 {
// 只要条件满足就循环,尝尝在这里修改循环条件来控制循环
}
用法三:for {}
go{
//死循环,一般配合if和break使用
}
课堂实例:
package GoSpace
import "fmt"
func main() {
i := 1
for {
fmt.Println("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
for i <= 3 {
fmt.Println(i)
i = i + 1
}
}
7、switch语句
从上往下逐一匹配case分支,直到匹配成功为止
匹配项后面无需添加break
switch var1 {
case var1:
...
case var2:
...
case var3:
...
default:
...
}
8、go语言的数组(Array)和切片(Slice)的区别
go语言的数组长度是不变的,而切片解决的是对不定长度的数组的需求
数组的初始化方式为
a :=[3]int{1,2,3}//指定长度为3
a :=[]int{1,2,3}//不指定长度
切片的初始化方式为
s := make([]int,3)//指定长度为3
s := []int{1,2,3}//不指定长度
使用make来创建一个切片
切片的长度是切片中元素的数量,实际上是从数组中获取某一部分的数据
len切⽚<=cap切⽚<=len数组
切⽚是可索引的,并且可以由 len() ⽅法获取⻓度,
切⽚提供了计算容量的⽅法 cap(), 可以测量切⽚最⻓可以达到多少
PS:数组计算cap()结果与len()相同
总之,切片是底层数组的一个引用,对切片进行的任何修改都会反映在底层的数组中
数组是值类型,切片是引用类型
9、map集合
key-value形式的数据结构, 与JAVA中map作用是一样的。
map的基本操作
var m map[string]int//map的声明
m = make(map[string]int)//map的初始化
m["age"]=100//在map中添加数据
fmt.Printf("%v", m)//打印map数据
map的声明和初始化的区别
未初始化的map是nil,这时map无法添加值
nil相当于空指针,不指向任何内存地址
make()方法用于给map分配内存地址
10、range遍历
用于迭代for循环中的数组,切片,map
goland使用时遇到的问题
1、CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容
解决:每个 Go 应用程序都包含一个名为 main 的包。即所有的 Go 文件以 package 开头,对于独立运行的执行文件必须是 package main
2、goland的运行配置
先在设置中配置好GOPATH
在运行配置中配置好文件路径
个人认为Go语言有一点不太好
静态编译的程序当然是很好的,没有额外的运行时依赖,部署时很方便。
但是静态编译的文件尺寸很大。如果一个软件系统由多个可执行程序构成,累加起来就很可观。如果用动态编译,发布时带同一套动态库,可以节省很多容量。更关键的是,动态库可以运行时加载和卸载,这是静态库做不到的。还有那些LGPL等协议的第三方C库受版权限制是不允许静态编译的。至于动态库的版本管理难题,可以通过给动态库内的所有符号添加版本号解决。无论如何,应该给予程序员选择权,让他们自己决定使用静态库还是动态库。一刀切的拒绝动态编译是不合适的。