变量&基本数据类型
变量
-
指定变量类型,若未赋值则使用默认值string默认为空,int和浮点数默认为0
-
根据值自动判断类型
-
省略var,注意:= 左侧的变量应该是未申明的
var i int //类型1 i = 10 var num = 10.36 //自动判断类型 name := "jack" //等价于 var num num = "jack" var n1,n2,n3 int var n1,n2,n3 = 100, "tom", 3.2 n1,n2,n3 := 100, "tom", 3.2 -
函数外定义的就是全局变量
package main import "fmt" //n1-4均为全局变量 var n1 = 1 var n2 = 2 var( n3 = 100 n4 = 200 ) func main() { fmt.Println("hello") } -
全局变量可以声明而不使用其他变量都需要使用(注意是使用不是赋值)
-
空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。
_ 实际上是一个只写变量,你不能得到它的值。这样做是因为Go语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
数据类型
-
基本数据类型
-
数值型:
-
整数--->int(取决于OS),int8,int16,int32,int64...通过后面数字区分位数,整型默认声明为int
-
浮点---->float32,float64....默认64位,浮点类型有固定范围和字段长度不受具体OS影响,推荐使用float64,默认值是0
-
-
布尔型--->go中的bool只允许true或false,默认false不允许用0-1表示
-
复数(complex)
待补 -
字符型--->go无专门的字符型,使用byte(与uint8等价)保存单个字母字符,汉字无法用byte存储因为UTF-8下汉字占三个字节,go编码统一使用UTF-8没有乱码问题
rune:等价int32,表示一个Unicode码点,常用于处理汉字。在书写 Unicode 字符时,需要在 16 进制数之前加上前缀
\u或者\U。因为 Unicode 至少占用 2 个字节,所以我们使用 int16 或者 int 类型来表示。如果需要使用到 4 字节,则会加上
\U前缀;前缀\u则总是紧跟着长度为 4 的 16 进制数,前缀\U紧跟着长度为 8 的 16 进制数var ch int = '\u0041' var ch2 int = '\u03B2' var ch3 int = '\U00101234' fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // 当和字符配合使用时,%v 或 %d 会输出用于表示该字符的整数 fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // 格式化说明符 %c 用于表示字符 fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes fmt.Printf("%U - %U - %U", ch, ch2, ch3) //%U 输出格式为 U+hhhh 的字符串 输出: 65 - 946 - 1053236 A - β - r 41 - 3B2 - 101234 U+0041 - U+03B2 - U+101234 -
字符串(string)--->官方将其归结到基本数据类型,在go中字符串是不可变的,默认是空""。字符串是字节的定长数组,注意
s[i]取出的是对应的字节值而不是字符/* 使用反引号` `原生形式输出字符不识别转义字符可以防止攻击输出源代码,使用双引号" "会识别转义字符 */ str1 = "hello\n" //会换行 //以下会原样输出,tab也会输出 str2 = ` import( "fmt" "unsafe" ) `字符串拼接
str1 = "hello" + "world" str2 = "hello" + //多行拼接+号留在上一行 "world" -
基本数据类型转换---->go不能隐式转换必须显示转换
var i int32 = 100 var n float32 = float32(i) var n1 int32 = 12 var n2 int64 n2 = n1 + 20 //n1是int32,n1+20也是int32 var n1 int32 = 12 var n2,n3 int8 n2 = int8(n1) + 127 //可以编译通过 n3 = int8(n1) + 128 //编译不通过 -
基本数据类型和string类转换(注意要确保string类型可以转成有效数据,若无法转换编译器会转换成默认值)
/*#基本数据类型转string*/ var num1 int = 99 var num2 float32 = 23.3 var b bool = true var myChar byte = 'h' var str string //方法一:fmt.Sprintf函数 str = fmt.Sprintf("%d",num1) str = fmt.Sprintf("%f",num2) str = fmt.Sprintf("%c",myChar) //方法二: strconv包里面的相应函数 str = strconv.FormatInt(int64(num1),10) //10表示用十进制输出 str = strconv.FormatFloat(num2,'f',10,64) //f表示格式ddd.dddd,10表示精度-1表示使用最少的精度表示,64表示float64 str = strconv.Itoa(num1) //int转的边界方法 /*string转基本数据类型*/ var str string = "true" var b bool b, _ =strconv.ParseBool(str) //该函数有两个返回值我们只要bool所以忽略另一个返回值
-
-
派生/复杂数据类型
- 指针(Pointer)
- 数组
- 结构体(struct)
- 管道(Channel)
- 函数(也是一种类型)
- 切片(slice)
- 接口(interface)
- map

浙公网安备 33010602011771号