这是我参与「第五届青训营 」伴学笔记创作活动的第2天
3.11基本语法-函数
- 声明函数:func 函数名(形参 形参类型,形参 形参类型...)返回值类型{功能代码}
- 函数调用:函数名(实参,实参...)
- 如下图为一个简单的相加函数,Go中函数的形参类型的位置与其他语言不同的是,Go中的形参类型放在形参之后
3.12基本语法-指针
Go中也像C和C++一样支持指针,但Go中操作指针的权限有限,Go中对于指针支持两种操作:取值和取址
| 符号 | 名称 | 作用 |
|---|---|---|
| &变量 | 取址符 | 返回变量所在的地址 |
| *指针变量 | 取值符 | 返回指针指地址所存储的值 |
3.13基本语法-结构体
- 在Go中我们可以把一组类型不同、但用来描述同一件事物的变量放到结构中,结构体承担着面向对象语言中类的作用
- 结构体声明方式(通过type和struct关键字来声明)格式如下:
- 结构体初始化方式:
3.14基本语法-结构体方法
Go的结构体方法类似于其他语言中的类成员函数,方法的定义格式如下:
其中:
- 接收者变量命名时官方建议使用接收者类型首字母小写
- 接收者类型可以是指针类型也可以是非指针类型
- 不难看出结构体方法其实就是在函数的方法名前加上(接收者变量 接收者类型)
如上图看出,指针类型的接收者类型可以实现对结构体的修改
3.15基本语法-错误处理
- 如上图,在第13行代码的返回值类型处添加一个error类型的err,这样表明这个函数可能会返回错误信息
- 如果函数可以正常运行,我们需要返回err为nil(第16行)
- 如果函数运行出错,我们需要使用errors.New()来返回err的错误信息(第19行)
3.16基本语法-字符串操作
字符串操作的函数来自于strings包
- Contains():字符串中是否包含substr,返回bool值;
- Count():计数;
- HasPrefix():判断字符串是否以prefix开头;
- HasSuffix():判断字符串是否以suffix结尾;
- Index():获取substr中第一个字符的索引位置;
- Join():以sep分隔符进行字符串拼接;
- Repeat():重复字符串;
- Replace():替换;
- Split():以sep分隔符进行字符串分割;
- ToLower():字符串转为小写;
- ToUpper():字符串转为大写;
- len():求长度
3.17基本语法-字符串格式化
- 如上图,在Go中可使用%v来打印任意类型的变量
- %+v打印详细结果,%#v打印更详细的结果
- 浮点型数据中%.nf表示保留n为小数
3.18基本语法-JSON处理
JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式。它基于 ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
- 如上图,使用json.Marshal()进行序列化,使用json.Unmarshal()进行反序列化
- 序列化:把数据结构或对象写入磁盘文件中或通过网络传输到其他节点的过程
- 反序列化:把磁盘中的对象或者把网络节点中传输的数据恢复成数据对象
3.19基本语法-时间处理
- time.Now:获取系统当前时间
- time.Date:构造一个带时区的时间
- t.Year t.Month t.Day t.Hour t.Minute分别获取时间的年,月,日,时,分
- t.Format:格式化时间成时间字符串(Go中以2006-01-02 15:04:05进行格式化时间)
- t.Sub:两个时间进行减法得到时间段
- time.Parse:将字符串解析成时间
- t.Unix:获取时间戳
3.20基本语法-数字解析
- Go中字符串转换为数字使用strconv包
- strconv.ParseFloat(s,bitSize):解析字符串s为浮点型数字
- strconv.ParseInt(s,base,bitSize):解析字符串s为整型数字,base表示进制(base为0表示自动推测它的进制类型),bitSize表示精度
- strconv.Atoi(s):快速把一个十进制字符串转回为数字
3.21基本语法-进程信息
- os.Args:获取进程执行的命令行参数
- os.Getenv:获取环境变量
- os.Setenv:写入环境变量
- exec.Command:快速启动子进程并获取输入输出
4.参考资料
字节内部课:后端入门-Go语言原理与实践
5.总结
行文至此,Go的基本语法就学习完了,有一些语法能看懂但运用不是很熟练,这需要我们多多自己手动敲代码并多加思考。
看到这篇文章的掘友们,如文章有问题欢迎指正并在评论区进行讨论,望共同努力进步,感谢你们的支持点赞!