走进go语言 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
在次之前有着Java基础,所以我会在学习go的过程中对比Java更便于记忆。
go语言的优势
高性能、高并发
这是go语言大火的重要原因之一,再次之前的语言如Java、python都没有自带这种特性,而go作为新语言,很好的利用了多核处理器的“多核心”特性,使得go天生有着高性能、高并发的特性。
语法简单、学习曲线平滑
go语言的语法与c有点相似却比c更加简化,给我的感觉就是用着python的语法(比py更简单),实现着c++、Java的功能。
丰富的标准库
跟python一样拥有很多标准库,无需借助第三方库便可以实现很多不一样的功能,保证了稳定新。
完善的工具链
go语言有着各种各样的工具保证代码正确稳定的运行,可以说是帮助程序员省了很多问题。
静态编译
简单的说就是编译好的可执行文件可以直接运行,相比于Java需要jdk环境不同,可以说是很好在外行人面前装13的有点了。
快速编译
也是因为能够利用多核的原因,使go的编译速度对比之前的语言快的离谱,是c++开发者无法想象的一个程度。
跨平台
后出的语言基本都有的特性,在常用的操作系统上运行外,go能在一些奇怪的设备上运行,如路由器、树莓派等。
垃圾回收
c/c++的噩梦之一的垃圾回收,在go语言里面和Java一样交给它们自己处理,让开发者更专注于自己的业务开发。
go语言语法注意点
- 强类型语言
- 有自动推断类型,例如:
//定义且赋值 ":="自动推断类型
name2 := "s18"
age2 := 20
//打印变量类型
fmt.Printf("%T,%T", name2, age2)
- 切片的注意点
func main() {
//定义数组 [长度]类型{元素}
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(arr)
update(arr)
fmt.Println(arr)
fmt.Println("--------------------")
//定义切片 []类型{元素}
s1 := []int{1, 2, 3}
fmt.Println(s1)
update2(s1)
fmt.Println(s1)
}
func update(arr1 [5]int) {
//值传递非破坏性 即拷贝
arr1[0] = 5
fmt.Println(arr1)
}
func update2(arr1 []int) {
//引用传递破坏性 改变原切片
arr1[0] = 5
fmt.Println(arr1)
}
- 对于printf
import "fmt"
type point struct {
x, y int
}
func main() {
s := "hello"
n := 123
p := point{1, 2}
fmt.Println(s, n) // hello 123
fmt.Println(p) // {1 2}
fmt.Printf("s=%v\n", s) // s=hello
fmt.Printf("n=%v\n", n) // n=123
fmt.Printf("p=%v\n", p) // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}
f := 3.141592653
fmt.Println(f) // 3.141592653
fmt.Printf("%.2f\n", f) // 3.14
}