这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
什么是GO?
- 高性能,高并发
go语言内嵌了高并发的支持,不需要寻找一些经过高度优化的第三方库,只需要使用标准库和基于标准库的第三方库即可实现高并发应用程序。
- 语法简单,学习曲线平缓
类似于c语言,进行了大幅度的简化,比如if后面没有括号,循环也只有一种for循环,上手非常容易。
- 丰富的标准库
基本不需要集成第三方库,标准库有很高的稳定性和兼容性保障,还能持续享受语言迭代产生的性能优化。
- 完善的工具链
编译,代码格式化有提示工具,内嵌了完整的单元测试框架。
- 静态链接
在go里面只需要拷贝唯一一个可执行文件,不附加任何东西就可以部署运行,在容器上的环境下运行体积可以控制的非常小。
- 快速编译
编译速度非常迅速
- 跨平台
可以在常见的window,Linux等操作系统下运行
- 垃圾回收
无需考虑内存的分配,只关注业务即可
入门
1.helloworld(fmt)
package main//mian包的一部分,程序的入口包(入口文件) import "fmt"//导入fmt包,作用:格式化输入输出 func main() { fmt.Println("Hello World") }
导入fmt包在Go语言中主要用于格式化输入输出. fmt包中提供了很多函数,如Printf、Sprintf、Fprintf等,可以用来格式化输出字符串,还有Scanf、Sscanf、Fscanf等,可以用来读取格式化的字符串
2.变量
变量声明的两种方式:
- 显式声明:通过关键字var来声明一个变量,格式如下:
var variable_name variable_type var age int var name string
- 隐式声明:通过简写的方式声明变量,省略了var关键字,格式如下:
//variable_name := value age := 18 name := "John"
两种声明方式的区别:第二种方式只能在函数体内使用, 第一种可以在函数体外使用
3.if else
- if后面没有括号,也就是不是if(xxx)这种形式,而是if xxx这种形式。如果你加上括号,编辑器会在运行前自动去掉
- Go中的if语句具有自动类型转换特性, 也支持在条件判断语句前执行简单的语句
package main//mian包的一部分,程序的入口包(入口文件)
import "fmt"//导入fmt包,作用:格式化输入输出
func main() { fmt.Println("Hello World") }
4.switch
其中的变量
v可以是任何类型,
val1和
val2可以是同类型的任意值,类型不局限为常量或者整数,或者最终结果为相同类型的表达式。
switch v { case val1: ... case val2: ... default: ... }
5.数组
和c语言相同,Go语言也提供了数组类型的数据结构,数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
6.切片
切片 (slice) 是一种对数组的抽象,可以让你动态地管理数组中的元素。切片是一个指向底层数组的指针,并且包含了三个属性:指针、长度和容量
7.map
Go语言中的map是一种内置数据结构,用于存储键值对。键必须是可比较的数据类型(如字符串、整数等),值可以是任何数据类型。map可用于统计字符串中单词出现次数或维护用户信息数据库等任务。可以使用make函数创建新的map
- 在其他语言中,他可能叫做哈希或者字典
- map遍历时完全无序的,不会按照字母或者插入顺序
8.range
在 Go 中,
range 关键字用于遍历数组、切片、字符串、map 和通道中的元素。对于数组、切片和字符串,它将返回每个元素的索引和值。对于 map,它将返回每个键和值。对于通道,它将返回每个从通道中接收到的值。在 Go 中,range 关键字用于遍历数组、切片、字符串、map 和通道中的元素。对于数组、切片和字符串,它将返回每个元素的索引和值。对于 map,它将返回每个键和值。对于通道,它将返回每个从通道中接收到的值。
9.函数
在 Go 中,函数是一组可重用的代码块,可以在程序中多次调用。函数在 Go 中是一等公民(跟JS一样),可以像其他数据类型一样赋值给变量、作为参数和返回值
定义一个函数需要使用关键字 func, 函数名称,参数和返回值。
func functionName(parameterName type) returnType { // function body }
10.结构体
在 Go 中,结构体是一种用户定义的数据类型,它可以用来组合不同类型的数据。结构体是一组字段(类似于其他语言中的成员变量或属性)。
定义结构体需要使用关键字 type 和 struct。每个字段都有一个名称和类型。
type user struct { name string password string }