- go的变量声明方式
package main
import "fmt"
main() {
var age int = 8 //定义并赋值
var age1 int //定义变量,但不对其进行初始化,默认值为0
age1 = 18 //赋值
//定义并赋值,但定义时不需要手动声明类型,
//而是由编译器进行自动类型自动类型推断。
var age2 = 18
age3 := 4 //省略var和变量类型,直接使用:=进行赋值和自动类型推断。
//不能为变量赋予与其类型不匹配的值
var age4 int = 8.5 //该语句会在编译时报错
//对各个变量的值进行输出,go语言要求变量定义后必须使用。
fmt.Println(age,age1,age2,age3,age4)
}
- 一次性定义和赋值多个变量
var n1,n2,n3 int //n1,n2,n3都是int型,其值为初始值
var n1,name,n2 = 10,"jack",20 //不定义初始类型,由编译器进行推断。
n1,n2 := 8, 1.8 //使用:=进行多变量类型初始化。
3.全局变量和局部变量
函数体外的变量为全局变量,全局变量可以使用如下方式定义:
var (
a1 = 10
a2 = 2.8
a3 ="name"
)
4.golang的数据类型
-
整型
分为有符号整数int和无符号整数uint,每个还可细分为8,16,32,64位整数。
如果赋值超出界限,go会报错。
int和uint具体的位数根据当前系统决定,32位系统则为32位,64位系统为64位。
省略整数值的变量类型时,其类型推断为int -
浮点数
浮点型的存储格式:
符号位+指数位+尾数位
- 字符型
英文字符可以使用byte存储,但中文字符无法使用byte存储。
中文字符可以使用rune进行存储,rune等价于int32
Golang使用的字符集是Unicode字符集,其对应的编码方式是UTF-8编码
输出byte对应的字符可用如下格式:
fmt.Printf("%c",num)
//go中的一些特殊字符如",\等字符无法直接赋值给变量,需要使用转义字符,使用格式如下
a := '\"'
- 布尔型
bool取值仅有true 和 false
其占用空间大小为1字节
println输出值即为true和false
5.字符串类型
字符串类型变量一旦被定义,其中的字符不可被修改。
var str1 string = "abcd"
st1[0] = 'a' //报错,字符串赋值后,无法对其中的元素进行修改。
有两种定义方式,当无特殊字符时,直接使用双引号 ” 即可,当有特殊字符如换行,双引号,制表,空格等,此时使用反引号
var str1 = "aabbbcc"
var str2 = `body=1
cotext = 192.168.0.1`
//str2的结果为:
//body=1
//cotext = 192.168.0.1
- golang类型转换
Go的类型转换只有显式类型转换(强制类型转换)
强制类型转换方法: v = T(v2) //T为强转的类型
上图中n9不会编译通过,因为128不在int8的范围内,会报无法将int8与int类型相加的错误。
7.整型、浮点型 与 字符串型的相互转换
1、其他类型转string类型
(1)使用fmt.Sprintf()函数进行转换,具体方式见下图代码
(2)使用strconv包下的各种Format函数,具体方法见代码截图
string转int, float, uint, bool
使用strconv下的各个解析函数ParseInt, ParseBool, ParseUint等
要注意各个Parse函数的返回值都有两个,第二个返回值为erro
需要注意的是,ParseInt和ParseFloat的第一个返回值都是64位的,即传入参数bitSize(最后一个参数)仅定义精度,不改变返回值的类型。
这使得我们用于接收的变量也要设置为64位,若需更改精度需要另加一条语句进行强制类型转换。(上图中num1和f1都必须为64位)