在本周,我们跟随王克纯老师学习了go语言基础语法的相关知识,这是一门全新的语言,虽然是静态语言,但给人的感觉是动态语言,既提高了开发效率,又保证了系统的性能。学习了第一课之后也有了一些心得体会:Golang的语法与Python很相似,同时吸收了C语言和JavaScript的语法,并对Java的一些思想做了借鉴,例如接口,但是在Golang中没有对象这个概念,取而代之的是结构体。 与此同时,在学习课程的过程中还体会到了go语言的优势:
- Golong是编译型语言,开发效率比C高,而且速度比Python快,可以说是一门不可多得的优质编程语言,我想这也是字节跳动研发工程师们热衷go语言进行开发的一大主要原因。
- 部署十分简单,大大减少了成本。可想而知,诸如抖音这样日播放量上百亿的视频平台,后端的设计成本是无比巨大的,go语言的使用能够极大的减少部署难度,大大减小成本。
除此之外,Golong还有许多与众不同的特性:
- 如果只声明不使用则会编译不通过,除非命名为_。
- 如果项目依赖必须引用则需要取名为_。
- 大括号必须是右上角-左下角格式,不能是上下格式,否则编译不通过。
- Golang不论什么数据类型的传递都是值传递,如果想引用传递则需要使用指针。
- Golang简化了指针的使用,例如user是一个结构体指针,*(user).name与user.name是一个意思。
- Golang中只有for循环,没有while循环,可以用for循环实现while的效果。
- 一个项目必须有一个main包,即package main,一个main包有且只有一个main函数,这个函数是项目的入口。 以下是对于具体语法的学习体会:
1.常量与变量:
①声明变量:
在Golang中,变量的声明使用var关键字,变量类型写在后面,变量声明后不需要赋值,Golang会默认赋值,这一点与c语言,Java,python都不一样:
var a int
a = 10
在编写程序时通常使用:=进行变量声明和赋值,上述代码可以合并为a:=10。
②匿名变量:
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量。匿名变量用一个下划线_表示:
func foo() (int, string) {
return 10, "Q1mi"
} func main() {
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。
③声明常量:
Golang使用const关键字声明常量,可以一次声明一个,也可以一次声明多个:
const LENGTH int = 10
const WIDTH int = 5
const (
Unknown = 0
Female = 1
Male = 2
)
其中,iota是一种特殊常量,可以认为是一个可以被编译器修改的常量,可以是常量操作,也可以是表达式
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
const (
i=1<<iota //1
j=3<<iota //6
k //12
l //24
)
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
2.基本数据类型:
①数据类型介绍:
布尔型:true、false; 整数类型:uint8、uint16、uint32、uint64、int8、int16、int32、int64;浮点型:float32、float64; 复数类型:complex64、complex128; 字符串:双引号包裹,采用UTF-8编码,一个汉字需要3个字节编码。字符串操作与Python类似,但是求长度的时候需要注意编码,在utf-8编码当中,如果直接求len则会显示编码长度,需要使用rune数组。
②数据类型转换:
通常情况下:
func sqrtDemo() {
var a, b = 3, 4
var c int
// math.Sqrt()接收的参数是float64类型,需要强制转换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)
}
3.循环结构:
①for循环:
Go 语言中的所有循环类型均可以使用for关键字来完成:
for i := 0; i < 10; i++ {
fmt.Println(i)
}
for循环的初始语句和结束语句都可以省略,就变成了while条件循环,例如:
i := 0
for i < 10 {
fmt.Println(i)
i++
}
此外,for循环也可以通过break、goto、return、panic语句强制退出循环。
②switch循环:
使用switch语句可方便地对大量的值进行条件判断,每一行不用break,会自动break:
case s == "a":
fmt.Println("a")
fallthrough
case s == "b":
fmt.Println("b")
default:
fmt.Println("...")
}
switch finger {
case 1,2,3:
fmt.Println("大拇指")
default:
fmt.Println("无效的输入!")
}