前言:
上一节把go的相关环境以及配置,以及goland的下载创建项目说了一下。做完这些以后我们就可以开始好好认识学习这门语言了,在学习之前,要知道go语言是C系的,与java等面向对象不同,它没有面向对象的概念,也没有类,但并不是说它难学,相反它的写法看上去和js弱语言相似,但是确实一门地地道道的强语言(后面敲代码就可以看出来),学过C语言的同学应该学的更快,上手更利索一些,因为go的研发者就是奔着让C系的程序员容易快速上手去的。好了,废话不多说,我们这篇主要围绕go的基本语法,变量,数据类型来说。
1.变量,常量
变量
变量一般就是存储特定的值并且还占有一定内存,说白了就是一块内存,拿来存数据的,在整个程序运行的过程中,它存的数值可以改变,它的命名规范:以字母或下划线开头,由一个或多个字母、数字、下划线组成
1.1声明变量
go中声明单个变量一般用的是var关键字
声明一个变量,以int为例
第一种,指定变量类型,声明后若不赋值则使用默认值
第二种,不指定变量类型,由于go的强语言特性,它自己可以根据后面的值来推断前面变量的类型
第三种,省略var但这一般只能用在函数体里
这里不要去质疑这个函数体,我是随便写的便于理解而已,不要去管无关的事情,只需要知道这种方式只能用于函数体内,不可用于全局变量的声明以及赋值
注意::=左边的变量最好不要是已经声明过的,多个变量同时声明,最少要有一个是新的,不然编译出错
1.2多变量声明
第一种:逗号分开,声明赋值分开同样不赋值存在默认值
第二种:直接赋值,可以不指明类型
第三种:用集合的形式来统一管理
1.3变量注意事项
变量只有先定义了才能使用
定义的变量名在同一个作用域不能冲突
:=定义的左边的变量名至少有一个是新的(前面说过),而且:=不能定义全局变量
不像java等语言,在go中为了方便后序的管理,在go中强制要求定义过的变量必须使用,不然编译不通过(在以前这些东西全靠个人是因为各大互联网公司对于程序员的信任,一般都是通过书面形式要求项目开发者),go这样做就可以使开发团队将更多的精力放于开发上
常量
1.1声明常量
我这里就简单说了,和变量的定义方式上,除了第三种不能用,其他两种形式上,就是把var关键字变为const,而且在声明的时候必须赋值,下面贴上所有的实例代码
注意最后一条常量组不指定类型初始值时,与上一行非空常量右值相同
常量的注意事项:
-
常量的数据类型只能是布尔型、数字型(整数型、浮点型和复数)和字符串
-
定义但没有使用的常量,在编译的时候,是不会报错的
1.2iota
iota,被编译器修改的特殊常量
iota用法
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1(这个时候只用第一个后面写iota就行,直到遇见不同类型的值停止)
运行结果
如果中断iota自增,必须显式恢复。
自增默认是int类型,当然也可以显示指定类型
数字常量不分配存储空间,不用像变量那样通过内存寻址来取值,所以就无法获取地址
2.基础数据类型
基本数据类型
2.1 布尔型bool
布尔型的值只能是常量 true 或者 false。
一个简单的例子:var a bool = true
2.2 数值型
1、整数型
go的整数型分的很细
int8 有符号 8 位整型 (-128 到 127) 长度:8字节
int16 有符号 16 位整型 (-32768 到 32767)
int32 有符号 32 位整型 (-2147483648 到 2147483647)
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
uint8 无符号 8 位整型 (0 到 255) 8位都用于表示数值:
uint16 无符号 16 位整型 (0 到 65535)
uint32 无符号 32 位整型 (0 到 4294967295)
uint64 无符号 64 位整型 (0 到 18446744073709551615)
除了需要使用特定大小的整数,通常应该使用int来表示整数。
2.3、浮点型
float32 IEEE-754 32位浮点型数
float64 IEEE-754 64位浮点型数
complex64 32 位实数和虚数
complex128 64 位实数和虚数
2.4、其他
byte 类似 uint8
rune 类似 int32
uint 32 或 64 位
int 与 uint 一样大小
uintptr 无符号整型,用于存放一个指针
2.5 字符串型
字符串是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。
var str string ="菜菜的涛"
2.6数据类型转换
语法格式就是Type(Value)
常数:有需要的时候,会自动转型
变量:需要自己手动转型 T(V)
想要更深理解参考(2)Go的数据类型转换 - Go语言中文网 - Golang中文社区 (studygolang.com)
复合类型
指针
数组
结构体
Channel 通道
函数
切片
接口
Map 映射
感觉我写的还行的点个订阅吧