Golang入门学习(2)
Go的第二课——Go的特性&变量
Go的一些特性
这次又学了点特性就是:
- 如果引入的包在文件中没有被用到则会导致编译通不过,这一点比较匪夷所思了,因为很多语言都没有这种限制。
- 同样,变量也有这个限制,定义的变量没有使用过也会报错。
- 入口函数为 main 函数
- 源文件必须 .go 为后缀
- 大小写敏感的语言
标准api文档在线:https://studygolang.com/pkgdoc(PS:这玩意可以直接保存下来离线观看)
Go的变量
基础用法和注意事项
每个编程语言最基本的单位就是变量了,那来看看 go 的一个定义和操作变量的方法吧。
基本数据类型
- 整数型((u)int(默认是64位),(u)int8,(u)int16,(u)int32,(u)int64,byte)
- 浮点类型(float(默认是float64),float32,float64)
- 字符型(没有专门的数据类型,一般使用 byte)
- 布尔型(bool)
- 字符串(string)
派生/复杂数据类型
- 指针(pointer)
- 数组([])
- 结构体(struct)
- 管道(Channel)
- 函数(func)
- 切片(slice)
- 接口(interface)
- 映射(map)
定义一个整形变量
1 | var num int; |
一般形式当然就是:
var 变量名 变量类型
,也不同于我们平时的写法。
查看变量类型
1 | package main |
查看变量所占用的空间
1 | package main |
注意事项
变量使用有以下注意事项
- 如果指定了变量类型,则可以选择手动初始化,也可以选择自动初始化,自动初始化使用默认值0,如果是字符串则初始化为空字符串。
- 若未指定变量类型,则一定要初始化,方便做类型推导,推导整数类型时一般为 int。
- var 关键字可以不加,但是需要使用
:=
的方式去赋值,否则会报错 undefined ,而:=
这个赋值符号只能对未定义的变量第一次赋值使用。
允许一句话声明多个变量,多个变量用逗号分隔,若不初始化则只能声明多个同类型变量
1 | package main |
也可以采取类型推导,此时允许声明不同类型的变量
1 | package main |
在第二种方式中,若想省略 var
则需要把 =
替换为 :=
。
定义在函数体外部的叫全局变量,全局变量没有必须使用的限制。
整数类型注意事项
int 默认是 64 位有符号。
go 允许在计算的时候发生溢出,但是不允许赋值范围以外的一个数,比如 int8 的范围是 -128-127
那么我初始化一个 int8 的值为 128 就会直接在编译阶段报错。
浮点数类型注意事项
float 默认位 64 位的精度。
浮点数会有精度问题,若发现精度有所丢失则需要考虑使用 float64。
计算机的科学计数法表示的浮点常量如下所示:
- $5e6=5\times 10^6$
- $3e9=5\times 10^9$
字符类型
golang 中没有 char 类型,但是存在字符常量,一般使用 byte 类型保存。
1 | byte c='a'; |
但是直接输出会当成整形输出,如果要输出字符那么可以使用格式化字符串输出的 %c
参数。
如果尝试保存中文则会因为类型问题无法保存,此时只能使用 int 前来保存单个中文字符,同样要输出这个字符也是使用格式化字符串的 %c
打印。
golang 使用 UTF-8 强制编码,因此在编程中很少遇到乱码问题(挺好的)。
布尔类型
唯一的区别就是不能使用数字赋值,只能使用 true
和 false
赋值。
字符串类型
字符串本质就是字符序列,使用 UTF-8 强制编码。
golang 中的字符串一旦赋值之后是不可变的,这里的不可修改指的是不能单独修改字符串中其中一个字符的内容,给字符串重新赋值是允许的。
字符串常量可以使用反引号包裹,反引号的内容不会被转义而是被原样输出,有点类似于 python 的三双引号。
但是因为只有一个反引号,所以说我想在反引号里面加一个反引号字符的话目前是做不到的,只能采用字符串拼接的方法加上去。
字符串可以使用 + 拼接。允许换行加法,但是一定要注意加法不能开头,也就是说下面这种写法是错的
1 | var s string="123" |
而下面的写法是正确的
1 | var s string="123"+ |
变量基本运算
首先是加法运算符(+),对于数值来说会使两个数值相加,对于两个字符串来说,会使两个字符串进行拼接。