go基本数据类型

Posted juju-niuniu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go基本数据类型相关的知识,希望对你有一定的参考价值。

基本数据类型:

  Go语言中有丰富的数据类型,基本数据类型大体分为三类:数字类型、布尔类型、字符串类型、特殊类型;高级数据类型有:数组、切片、map、结构体、函数、接口、通道等;本文只介绍基本数据类型,高级的数据类型往后章节分别介绍。

数字类型:

  数字类型主要分为有符号数和无符号数,有符号数可以用来表示负数,除此之外它们还有位数的区别,不同的位数代表它们实际存储占用空间,以及取值的范围;uint8、int8、uint16、int16、uint32、int32、uint64、in64、float32、float64、complex64、complex128、uint(32 or 64 bits)、int(32 or 64 bits)、uintptr;uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。

(1)uint和int的长度由操作系统的位数决定,在 32 位系统里面,它们的长度为 32 bit, 64 位系统,长度为 64 bit;

(2)uintptr无符号整型,用于存放一个指针;

注意:

  a) 每种数字类型都有取值范围,超过了取值范围,出现 overflows 的错误;

  b) 涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用uint和int;

技术图片
 1 package main
 2 
 3 import (
 4     "fmt"
 5     "math"
 6 )
 7 
 8 func main() {
 9     // 十进制
10     var a int = 10
11     fmt.Printf("%d 
", a) // 10
12     fmt.Printf("%b 
", a) // 1010  占位符%b表示二进制
13 
14     // 八进制  以0开头
15     var b int = 077
16     fmt.Printf("%o 
", b) // 77
17 
18     // 十六进制  以0x开头
19     var c int = 0xff
20     fmt.Printf("%x 
", c) // ff
21     fmt.Printf("%X 
", c) // FF
22 
23     //float
24     fmt.Printf("%f
", math.Pi)
25     fmt.Printf("%.2f
", math.Pi)
26     //复数
27     var c1 complex64
28     c1 = 1 + 2i
29     var c2 complex128
30     c2 = 2 + 3i
31     fmt.Println(c1)
32     fmt.Println(c2)
33 }
View Code

 

布尔类型:

  布尔型数据只有true和false两个值。

注意:

  a) 布尔类型变量的默认值为false;

  b) Go 语言中不允许将整型强制转换为布尔型;

  c) 布尔型无法参与数值运算,也无法与其他类型进行转换。

字符串类型:

  (1)Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号("xxx")中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:

技术图片
s1 := "hello"
s2 := "你好"
View Code

  (2)Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示

转义符 说明
回车符(返回行首)
换行符(直接跳到下一行的同列位置)
制表符
单引号
" 双引号
反斜杠

  (3)Go语言中要定义一个多行字符串时,就必须使用反引号字符:

技术图片
s1 := `第一行
第二行
第三行
`
fmt.Println(s1)
View Code

注意:

   反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

    (4)字符串常见操作:

方法 介绍
len(str) 求长度
strings.Split 分割
+或fmt.Sprintf 拼接字符串
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 字串出现的位置
strings.Join(a[]string, sep string) join操作
技术图片
var str = "hello, 失身男孩"

b := str[0]  //b is a uint8 type, like byte
fmt.Println(b)  // 
fmt.Println(string(b)) // 强转

fmt.Println(len(str)) // 查看字符串有多少个字节
fmt.Println(len([]rune(str))) // 查看有多少个字符
View Code

 

特殊类型:

  (1)byte,或者叫uint8 ,用于表示二进制数据的 bytes,代表了ASCII码的一个字符;

  (2)rune,实际是int32 , 用于表示一个符号,代表一个UTF-8字符;

 注意:

  当需要处理中文、日文或者其他复合字符时,则需要用到rune类型Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

 

技术图片
// 遍历字符串
func forStr() {
    s := "hello 林志玲"
    for i := 0; i < len(s); i++ { //byte
        fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    for _, r := range s { //rune
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
}
View Code

 

以上是关于go基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章

go中string类型转换为基本数据类型的方法

go-08-基本数据类型-字符串和布尔值

go-08-基本数据类型-字符串和布尔值

go-08-基本数据类型-字符串和布尔值

Go的基本数据类型

go基本数据类型