这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。
为什么选择Go语言?
我们选择一门语言作为编程入门学习或者作为主要开发语言选择需要以什么作为标准?
1.行业风向:
目前已经有许多国内知名大厂选择Golang开发自己的业务,包括但不限于腾讯 百度 滴滴 美团 深信服 ,而字节跳动已经全面拥抱Go语言。所以从行业风向来看,Golang是十分受这些成熟的科技公司欢迎的一门新兴语言。
2.母公司&活跃的社区:
Go出身名门Google,有雄厚的资金支持,而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。同时Golang还有十分活跃的社区支持Golang良性发展改进。
3.语言本身:
Golang的语言特性是为什么选择它的最重要的一个参考。
①学习曲线平滑,门槛低
Golang语法与C语言相近,上手简单
②代码风格自动格式化 -gofmt
gofmt工具真的很香,不仅在自己写代码的时候不会让自己的代码看着凌乱。在团队开发中,一模一样的代码格式让项目变得规范。
③媲美C的高级性能
④语言级并发
⑤快速编译
⑤丰富的库
通过这个链接可以查看Go的库,包括SQL语句 JSON 网络和数据结构等等
Go语言语法
简述一下我在学习Golang过程中遇到的一些Go的新鲜语法规则。
变量声明
go语言变量声明的时候有两种方式
一种是通过var 变量名 (变量类型)= 值 来进行声明。这种方式一般会自动进行变量类型的推导。有需要的话,可以显示写出变量类型。
var a = "initial"
var b, c int = 1, 2
另一种变量的声明方式是:变量:=值
在学习过程中我一开始有一个疑问就是为什么第一种声明方式要将变量类型放在后面。其实很多人也有这样的疑问,官方也被问烦了写了一篇文章解答《Go's Declaration Syntax[1]》
后来得出结论是为了避免像C语言那样出现变量类型混淆的情况
比如C语言在这种情况下int* a, b;只有a是指针而b变量不是,这就造成了变量类型的混淆。
而go在声明变量时将变量类型放在后面就解决了这个问题
var a,b *int表示声明两个int型指针变量。
切片
切片是对数组一个连续片段的引用 所以切片是一个引用类型 切片的使用十分灵活主要有以下几种用法
s := make([]string, 3)//创建长度为3的切片
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d") //追加元素
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s) //前者是待拷贝的 后者是源
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
其中要注意的是append的用法,必须把append的结果赋值为原数组。 因为slice的原理实际上是存储了一个长度和一个容量,加一个指向一个数组的指针,在执行append操作的时候,如果容量不够的话,会扩容并且返回新的slice。
继承规则
Go语言中,通过在结构体内置匿名成员的方式来实现继承。
type Student struct {
Name string
Age int
Score int
}
//大学生
type Graduate struct {
Student //嵌套了Student匿名结构体
}