Go语言上手(一)

这是我参与「第五届青训营 -后端场」笔记创作活动的的第一篇笔记。

先上代码仓库:

WenTesla/GoLang-Study: 一个学习Go的仓库 (github.com)

这个仓库下放下我目前学习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一样一切皆对象,派生类型比较多

二:基本库

1.基本打印输出

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)
}

发表回复