介绍
go语言中的数据类型,常见的有整形、浮点型、布尔型、字符串,除此外还有数组、切片、结构体、函数、map、通道等。本篇记录基本的数据类型。整形
整型分无符号整型和有符号整型,无符号整型为uint8、uint16、uint32、uint64,有符号整型为int8、int16、int32、int64。无符号的就是正数、有符号的加了符号,包括了负数。
例如无符号uint8的取值范围是0-255,而有符号的int8取值范围就是-128-127。
在go语言中整型的长度和其他语言类似,只不过是用8、16、32、64来表示的,例如uint8就相当于byte型,int16就相当于short型,int64就相当于long型。
当然在go中也有int型和uint型,它们取值根据操作系统位数来定,例如int在32位系统上就是int32,在64位系统上就是int64.
整型进制间的转换
go中可以使用fmt来表达不同的进制,十进制为%d,二进制为%b,八进制为%o,十六进制为%x,示例代码如下。
package mainimport "fmt"func main(){ num := 10 fmt.Printf("%d \n", num) // 十进制 fmt.Printf("%b \n", num) // 二进制 fmt.Printf("%o \n", num) // 八进制 fmt.Printf("%x \n", num) // 十六进制}
浮点型
go中浮点型有两种,float32和float64,定义一个浮点数默认是float64,如果想定义float32,可进行强制转换。使用fmt输出时使用%f即可,%T用来查看变量类型,示例代码如下。
package mainimport "fmt"func main(){ num := 123.456 num1 := float32(123.456) fmt.Printf("%T \n", num) // float64 fmt.Printf("%f \n", num) fmt.Printf("%T \n", num1) //float32 fmt.Printf("%f \n", num1 )}
布尔值
go中布尔值有两种true和false,默认为false。示例代码如下。
package mainimport "fmt"var name boolfunc main(){ name1 := true fmt.Printf("%T \n",name) fmt.Println(name) // false fmt.Printf("%T \n",name1) fmt.Println(name1) // true}
字符串
go中字符串使用双引号包裹,单引号包裹不是字符串,而是字符。go的字符串默认使用的是utf-8,对中文支持较好。示例代码如下。
package mainimport "fmt"func main(){ name := "afa" name1 := 'a' fmt.Printf("%T \n",name) // string fmt.Println(name) // afa fmt.Printf("%T \n",name1) // int32 fmt.Println(name1) // 97}
上面例子字符a的类型为int32,输出为97,输出的是a字符的ascii码。
在go语言中如果要把字符串按原因输出,例如回车,缩进等格式,可以使用反引号,示例代码如下。
package mainimport "fmt"var name = `dear name: hello,this is ...`func main(){ fmt.Printf("%T \n",name) // string fmt.Print(name) // 按格式输出}
字符串常用函数
常用函数说明及用法见如下示例。
package mainimport ( "fmt" "strings")var name = "afa gong fang shi yan shi"func main(){ // len函数输出字符串长度 fmt.Println(len(name)) // 使用+或者fmt.Sprintf进行字符串拼接 fmt.Println(name + " is good !") fmt.Println(fmt.Sprintf("%v %v", name, "is good !")) // %v可用来接收所有类型的值 // 使用strings.Split切割字符 fmt.Println(strings.Split(name, " ")) // 以空格为切割符来切割name变量,返回一个切片 // 使用strings.Contains来判断是否包含 fmt.Println(strings.Contains(name, "afa")) // true // 使用strings.HasPrefix判断字符串前缀 fmt.Println(strings.HasPrefix(name, "a")) //true // 使用strings.HasSuffix判断字符串后缀 fmt.Println(strings.HasSuffix(name, "a")) //false // 使用strings.Index判断字符第一次出现的位置 fmt.Println(strings.Index(name, "f")) // 1 // 使用strings.LastIndex判断字符最后一次出现的位置 fmt.Println(strings.LastIndex(name, "a")) // 19 // 使用strings.Join连接字符 fmt.Println(strings.Join([]string{"afa", "gong", "fang", "shi", "yan", "shi"}, " "))}
字符
go中字符有两种,一种是uint8类型,也叫byte类型,代表的是ascii码的字符。还有一种是rune类型,代表的是utf-8字符。
当循环遍历一个字符串时,则是uint8类型,该类型对中文、特殊符号等支持不友好,如下实例。
而rune类型对中文、特殊符号等支持友好,rune相当于是int32类型的包装,使用rune遍历一个字符串,返回的是索引号和字符内容,示例如下。
字符串是不支持修改的,但我们可以利用byte类型和rune类型进行这种处理,只需要把字符串转换为byte或rune类型,然后替换字符,最后再转回字符串就可以了,示例代码如下。