Go语言特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
字节 Google 腾讯 facebook 美团 七牛云 滴滴 b站 百度 PingCAP 都使用Go语言
优势
- 可以直接编译成机器码,不依赖其他库
- 天生支持并发
- 支持垃圾回收
- 静态语言但是有动态语言的感觉开发效率高
- 丰富的标准库
适合服务器编程、分布式系统、网络编程、内存数据库、云平台
golang下载
中文文档
Hello World
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
go有且仅有一个入口函数,main
go语言以包作为管理单位 每个文件必须先声明包 ,任何一个 .go 文件都要保含在一个包中,包名并不要求是所在的文件夹名。程序必须有一个main包
Println()会自动换行
fmt.Println("a = ",a,"b=",b) //一段一段处理,自动加换行
fmt.Printf("a= %d\n",a)//格式化输出 %c以字符方式打印 %d以整型方式打印
函数名 和 左括号{ 必须放在同一行
go语言语句结尾没有分号
导入包必须使用,变量声明了必须使用
go run xxx.go 不生成可执行文件,直接运行
go build xxx.go 编译go代码,生成可执行文件 xxx 运行
如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上运行。
数据类型
好多好复杂,以后再仔细看吧
基本数据类型:数值型(整型 浮点型) 字符型 布尔型 字符串型
bool 布尔类型 1字节
byte 字节 1 uint8别名
rune 字符 4 专用于存储unicode编码,等价于uint32
int,uint 整型 4或8
int8,uint8 1
int16,uint16 2
uint32,uint32 4
int64,uint64 8
float32 浮点型 4
float64 8
complex64 复数 8
complex128 16
unipter 整型 4或8 足以存储指针的uint32或uint64整数
string 字符串
复杂数据类型 指针 数组 结构体 管道 函数 切片 接口 map
命名规范
- 字母,下划线,数字组成
- 不能数字开头
- 不能是关键字
- 区分大小写
float64存储小数比float32准确
浮点数字面量被自动类型推导为float64类型
复数类型在计算机中使用两个浮点数表示
len() 字符串长度
字符 单引号 往往只有一个字符,除了转义字符
字符串有一个或多个字符组成,隐藏一个结束符 '\0'
str[0]操作字符串从0开始
real()实部 imag()虚部
变量
同一个{}里,声明的变量名是唯一的
自动推导类型 a=true
初始化
var b,c int = 1,2
a, b := 10,20
声明
var 变量名 类型
赋值
变量名=值
自动推导类型
先声明,再赋值
变量名 := 值
变量在定义时没有明确的初始化时会被赋值为零值
零值
- 数值类型为0
- 布尔类型为false
- 字符串为""(空字符串)
多重赋值
变量1,,变量2,.. :=值1,值2,.. /可以给多个变量一起赋值
i, j=j, i //使用多重赋值将i,j值交换 原理是将两个被赋值的变量的值都存储在临时变量里,然后再用临时变量去赋值
_ 匿名变量
丢弃数据不处理
go函数可以返回多个值
func test(){ a, b, c int}
_, d, _=test()
常量
var改成const
常量声明必须显式赋值
不能用 :=
const a int =10
const a=10
批量声明
const (
A = 'A'
B = 'B')
iota
常量计数器
iota作用于itoa使用前的最近的const,如果itoa后续后又出现const,则会重置
const AA = iota // 针对当前const 行索引为0
const (
O = iota // 0
P // 1
Q // 2
)
太难了,感觉go语法好混乱,不过应该还是因为我太笨了,继续学吧。