本篇旨在自己在学习Go时的理解,不保证百分百正确,如发现错误,欢迎指正
变量
变量赋值
不同于其他强类型语言,Go的赋值语句有两种写法
- 直接赋值
var a = 1 - 短变量声明赋值
a := 1需要注意的是,:=只能在函数内部使用
常量
常量使用 const 关键字声明,常量的值在编译时确定,不能被修改。
const Pi = 3.14
数据类型
Go语言支持多种基本数据类型,包括:
- 整数:
int,int8,int16,int32,int64 - 浮点数:
float32,float64 - 布尔值:
bool - 字符串:
string
控制结构
循环
不同于其他的编程语言,Go的循环结构只有for循环,死循环也可以利用for循环完成
// 若没有 break 则为死循环
for {
// code
break
}
// 普通循环
var i = 0
for i <= 10 {
// code
i++
}
for j := 0;j < 100;j++ {
// code
}
判断
if 语句同样不需要括号,非常简洁,同时可以在判断条件处赋值
if num := 100, a <= 100 {
// ...
}else if {
// ...
}else {
// ...
}
函数
Go的函数声明使用关键字 func ,并且支持多返回值,一般第一个返回值为正常返回,第二个返回错误类型
import(
"errors"
)
func test() (string, error){
return "",errors.New()
}
reslut, errorType := test()
结构体
可以类比Java的类,结构体(struct)是一种用户自定义的数据类型,用于将多个不同类型的数据组合成一个有机的整体,下面是结构体的一些示例
type user struct {
name string
password string
}
上述代码表示定义了一个名为 user的结构体,有两个 string 类型的字段,分别为 name 和 password 结构体有多种初始化方式
a := user{name: "wang", password: "1024"}b := user{"wang", "1024"}-
c := user{name: "wang"} c.password = "1024" -
var d user d.name = "wang" d.password = "1024"
访问结构体成员 结构体名.成员名
指针
不同于C的指针,Go的指针有很多限制,一般用于在函数内直接修改值
func modifyValue(p *int) {
*p = 30
}
切片
go中的切片是对数组的抽象
创建切片
// 方式1
var slice []int = {1,2,3}
// 方式2
slice := make([]int,len,<capcity>) // len 为数组的初始长度,capcaity 是容量大小,可选参数。
接口
Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。
package main
type iPhone interface{
Call()
}
type Lin struct{}
func (l *Lin)Call(){
println("lin")
}
func main(){
iPhone := new(Lin)
iPhone.Call()
}
上面的例子中,定义了一个接口iPhone,里面有一个抽象方法Call(),又定义了一个结构体Lin,然后定义了一个方法Call(),并指定方法的接受者(l *Lin),所以在下面调用Call()方法时会输出lin
总结
Go的许多语法不同于其它的我所学过的编程语言,但又有相似的地方,初看可能会感觉很乱、很杂,但在实际上手写过几次后就会发现Go的简洁和高效。这种语言的设计哲学强调了代码的可读性和简洁性,以及并发编程的易用性,这些都是Go语言在现代软件开发中越来越受欢迎的原因。
以上笔记只是两天来的入门,可能部分理解有误,如有错误,烦请指正!