这是我参与「第五届青训营 -后端场」笔记创作活动的的第一篇笔记。
先上代码仓库:
这个仓库下放下我目前学习GO的所有笔记以及代码,还未整理,最后会将仓库进行整理。
基础语法
一:类型
GO的语法类似C和Python,感觉就像缝合怪
定义变量
若要声明变量,需要使用 var
关键字:
单一定义:
var firstName string
前一个语句声明 string
类型中的一个名为firstName
的变量。
这里总结一下
标识符 xxx 类型
多定义
var (
firstName, lastName string
age int
)
加上括号()
像C语言的结构体一样定义,只不过顺序是反的
Go可以自动推断类型
如下所示
var (
firstName = "John"
lastName = "Doe"
age = 32
)
或者如下:
a:="111"
b:=2
c:=2.1
这一点需要注意,GO语言的声明之后必须使用,不然会报错
这一个特性真的让我感到疑惑。不知道为何这样使用
Go的基本类型如下
1 | 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 |
---|---|
2 | 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。 |
3 | 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 |
4 | 派生类型: 包括: (a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct)(d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型 |
这里的Go不像java一样一切皆对象,派生类型比较多
二:基本库
fmt函数,相当于java的System类.
输出又类似C语言
fmt.printf(xxx)
2.切片
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
这里创建切片和使用切片,同时打印切片的长度
Go的切片非常灵活,类似Python的使用,使用append函数是将数值追加到切片最后,同时返回切片的。使用copy函数可以创建切片的副本,同时不影响之前的切片,这里要注意,切片在函数的参数是作为指针传入,这一点与数组不同
3.json
Go的json非常方便,这里不像json一样繁琐,直接创建结构体可以
type Student struct {
Name string `json:"name"`
Sid string `json:"sid"`
}
序列化使用Marshal函数
s := Student{Name: "jonh" ,Sid: "10323"}
//序列化
p ,err := json.Marshal(s)
反序列化使用Unmarshal函数
//反序列化
err = json.Unmarshal(p,&s)
创建结构体时候的``是序列化json的时候对应数值的键值
4.time
GO的时间使用非常简单
比java简单
time.Now()获取时间
now.xxx()获取年月日
now.unix()时间戳
时间的加减
Add(during)函数实现某个时间 + 时间间隔
Sub(Time)获取时间差值
Equal()比较两者时间的相等
Before和After顾名思义
5.int和string的相互转化
类似java,比C++强,C++好像没有对应的Api
strconv包
strconv.ParesXXX (y)这里XXX表示要转换的类型,
同时可以再传入参数,比如指定要转换的类型
6.定时器
GO语言这一点有点意思,别的语言还没发现这种语法,特别是作为循环使用定时器,js的好像是setTimeOut,这个api是延时器
ticker := time.Tick(time.Second) //创建1秒间隔的定时器
for i := range ticker {//每1秒都会执行
fmt.Println(i)
}