# Go语言上手(一) | 青训营笔记

这篇笔记介绍了Go语言的基础语法,包括变量定义、类型推断、基本类型如布尔、数字和字符串。文中提到了切片的使用和灵活性,以及json的序列化和反序列化操作。此外,还讨论了时间处理的简单方法和int与string之间的转换。文章还介绍了使用time.Tick创建定时器的特性。
摘要由CSDN通过智能技术生成

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

先上代码仓库:

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) 数组类型
© 结构化类型(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) 
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值