Go介绍
源于 2007 年,并在 2009 年正式对外发布,Go语言出自 Ken Thompson 和 Rob Pike、Robert Griesemer
语言类型
编译型:在运行代码时会将已经写好的代码编译成文件再执行
解释型:一边编译一边执行
共语言优势
原生支持并发
语言简洁,上手简单
强大的标准库
性能优秀
开发坏境搭建
计算机并不能识别go语言的语法,因为在计算机底层是通过汇编语言向计算机发送指令的,所以在学习一门新的语言时,第一步是要去下去这个语言的编译器,编译器的作用是将这门语言的代码编译成计算机可以读懂的指令。而在我们下编译器时内容除了编译模块以外一般维护团队还给我们更新了很多功能在里面供我们调用,比如说打印数据到屏幕上、获取当前时间等。
下载开发包(编译器)
官网地址(https://golang.google.cn/dl/)
直接点击下一步就行,安装地址选择在其他盘,其余的默认,最近版本的go已经可以自动添加环境变量。
编辑器的选择
使用vscode或者JetBraiins 的golang(推荐)也行,golang需要收费,免费版本自行百度或者某宝几块钱买一个。
编写Hello
新间一个hello.go文件
package main //声明包
import (
"fmt" // 导入 fmt 包,用于输出
)
func main() { // 声明 main 主函数
fmt.Println("Hello") // 输出到控制台
}
在命令行输入 go run hell.go运行该程序
基本语法
一门编程语言的代码块一般由变量、数据类型、选择(循环)结构组成。
注释
对程序进行注解和说明,编译时并不会编译注释
单行注释 :以//开头
多行注释:以/*开头,并以*/结尾
变量
声明变量
varnametype
varastring
varbint
声明并赋值
variint=1
vari =1
变量被声明之后,会在内存中产生一个默认值int 等于 0,float 等于0.0,bool 等于 false,string 等于空字符串,指针等于 nil 等。
变量的命名规则:骆驼命名法,除第一个外每个新单词的首字母大写,如:getDate 和 studentName。
在函数中通常使用简短格式
name :=value
变量必须初始化。
不要写数据类型。
只用于函数内部局部变量时候使用。
通常来说在变量的初始化中变量的类型可以省略不写,编译器会根据等号右边的表达式推导变量的类型。
多变量同时赋值
funcmain() { // 声明 main 主函数
i ,j :=1,2
vara,b=3,4
fmt.Println(i,j,a,b) // 输出到控制台
}
匿名变量
下画线“”,“”本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。使用匿名变量时,只需要在变量声明的地方使用下画线替换即可。
i ,j :=1,2
_,j :=i,j
_,err=send()
特点:
匿名变量不占用内存空间,不会分配内存。
匿名变量与匿名变量之间也不会因为多次声明而无法使用。
作用域
全局变量
在函数体外声明的变量称之为全局变量,全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。函数也同理
局部变量
函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。函数调用结束后这个局部变量就会被销毁
在Go语言程序中全局变量与局部变量名称可以相同,但是局部变量的优先级大于全局变量
常量
使用const关键字定义,用于存储不会改变的数据
数据类型
数字
整型
没有特殊需要时候直接使用int
variint=1
uint8 无符号 8 位整型 (0 到 255) |
uint16 无符号 16 位整型 (0 到 65535) |
uint32 无符号 32 位整型 (0 到 4294967295) |
uint64 无符号 64 位整型 (0 到 18446744073709551615) |
int8 有符号 8 位整型 (-128 到 127) |
int16 有符号 16 位整型 (-32768 到 32767) |
int32 有符号 32 位整型 (-2147483648 到 2147483647) |
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型
varjfloat64=1.1
float32 IEEE-754 32位浮点型数 |
float64 IEEE-754 64位浮点型数 |
complex64 32 位实数和虚数 |
complex128 64 位实数和虚数 |
复数
由两个浮点数表示,了解即可,不常用
varnamecomplex128=complex(x, y)
布尔类型
值只有两种:true 或 false,通常用于if-else的条件判断
产生布尔值的方法
!ture 值为flase
1==1 值为true
“ ” 值为flase
0 值为flase
1 && 1 值为true
......
字符串
字符串是一个不可改变的字节序列,字符串可以包含任意的数据,通常是用来包含可读的文本。一般使用“string”定义,换句话说只要给数据加一个双引号就变成了字符串,字符串本身是不可变的。
var b string = "1234"
var c string = "阿斯蒂芬"
byte 类型
字符串中的每一个元素叫做“字符(byte), 通常ASCII 码的一个字符
属于整型的特殊用法。byte是uint8的别名。
var ch byte = 'A'
var ch byte = 65
var ch byte = '\0x41' //0x后面必须跟2位的16进制数
指针
指针变量:指向任何一个值的内存地址(ptr)
*代表指针:根据变量取值
&取地址符:可以取到数据在内存中的地址
package main
import (
"fmt" // 导入 fmt 包,用于输出
)
func main() { // 声明 main 主函数
a := 1
ptr := &a
c := *ptr
fmt.Println(ptr,c) // 输出到控制台
}
输出结果:prt :0xc00009e058
c:1
数组
同一类型
长度不可变
var 数组变量名 [元素数量]Type
1.声明
var arr1 [3]int
2.声明并且赋值
var arr2 = [2]int{1,2}
3.数组遍历
for k,v :=range arr2{
fmt.Println(k,v)
}
切片
数组的升级版,长度可变