开发者

Go语言中的基础数据类型使用实例

开发者 https://www.devze.com 2023-04-06 10:46 出处:网络 作者: water
目录前言基础数据类型整型有符号整型无符号整型特殊整型浮点型复数布尔值字符串字符串的转义符多行字符串常用的操作字符串的手段byte和rune类型修改字符串类型转换小结前言
目录
  • 前言
  • 基础数据类型
    • 整型
    • 有符号整型
    • 无符号整型
    • 特殊整型
    • 浮点型
    • 复数
    • 布尔值
    • 字符串
    • 字符串的转义符
    • 多行字符串
    • 常用的操作字符串的手段
    • byte和rune类型
    • 修改字符串
    • 类型转换
  • 小结

    前言

    任何语言都有数据类型,Go也不例外。有基础的整型、浮点型、布尔型、字符串。还有数组、切片、结构体、函数、map、通道等,这里主要巩固下Go语言数据类型。

    基础数据类型

    整型

    Go中整型数据类型主要分为

    • 有符号整型
    • 无符号整型
    • 特殊整型

    有符号整型

    • int8: 8位(-128 ~ 127)
    • int16: 16位(-32768 ~ 32767)
    • int32: 32位(-2147483648 ~ 214748347)
    • int64: 64位(-9223372036854775808 ~ 9223372036854775807)
    var a int8
    var b int16
    var c int32
    var d int64
    

    无符号整型

    • uint8: 8位(0 ~ 255)
    • uint16: 16位(0 ~ 65535)
    • uint32: 32位(0 ~ 4294967295)
    • uint64: 64位(0 ~ 18446744073709551615)
    var a uint8
    var b uint16
    var c uint32
    var d uint64
    

    特殊整型

    • uint: 在32位操作系统上就是unit32,64位操作系统上就是uint64
    • int: 在32位操作系统上就是int32,64位操作系统上就是int64
    • unitptr: 无符号整型,用于存放一个指针
    var a unit
    var b int
    var c unitptr
    

    Go中也可以使用数字字面量语法

    • 0b开头的代表二进制
    • 0o开头的代表八进制
    • 0x开头的代表十六进制

    浮点型

    Go中支持的浮点型有两种

    • float32
    • float64
    var a float32 = 3.14
    var b float64 = 3.1415
    

    复数

    Go中支持的复数有两种

    • complex64
    • complex128
    var a complex64
    a = 1 + 2i
    var b complex128
    b = 2 + 3i
    

    复数拥有实部和虚部,complex64的实部和虚部为32位,而complex128的实部和虚部为64位

    布尔值

    Go中布尔值通过bool进行类型声明,布尔值的数据只能时truefalse,并且布尔类型变量的默认值为falseGo中不允许将整型强制转换为布尔型,而且布尔型无法参加数值运算,也无法与其他类型进行转换

    var a bool = true
    var b bool = false
    

    字符串

    Go中字符串是以双引号包裹的内容

    var a string = "water"
    var b string = "你好"
    

    字符串的转义符

    • \r:回车符
    • \n:换行符
    • \t:制表符
    • \':单引号
    • \":双引号
    • \\:反斜杠

    多行字符串

    Go中要定义一个多行字符串时,需要使用反引号包裹

    var a string = `这是
    什么
    `
    

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

    常用的操作字符串的手段

    name := "water"
    zhName := "中国"
    join := []string{"water", "iio"}
    
    • len(string) 获取字符长度
    // len
    fmt.Println(len(name)) => 5
    fmt.Println(len(zhName)) => 6 // 一个汉字占用3个字符所以是字符的长度
    
    • utf8.RuneCountInString 获取字符串长度
    // utf8.RuneCountInString
    fmt.Println(utf8.RuneCountInString(name)) => 5
    fmt.Println(utf8.RuneCountInString(zhName)) => 2
    
    • +/fm编程客栈t.Sprintf 连接字符串
    // +/fmt.Sprintf
    fmt.Println(zhName + name) => "中国water"
    fmt.Println(fmt.Sprintf("我是%s的%s", zhName, name)) => "我是中国的water"
    
    • strings.Split 分割字符串
    fmt.Println(HoCpwEkstrings.Split(name, "")) => [w a t e r]
    
    • strings.Contains 判断是否包含子字符串
    fmt.Println(strings.Contains(name, "w")) => true
    
    • strings.HASPrefix 判断是否以子字符串开头
    fmt.Println(strings.HasPrefix(name, "w")) => true
    
    • strings.HasSuffix 判断是否以子字符串结尾
    fmt.Println(strings.HasSuffix(name, "r")) => true
    
    • strings.Index(http://www.devze.com) 判断子字符串或字符在父字符串中出现的位置(索引)
    fmt.Println(strings.Index(name, "r")) => 4
    
    • strings.LastIndex() 返回子字符串在字符串中最后出现位置的索引( 子字符串的第一个字符的索引)
    fmt.Println(strings.LastIndex("waterte", "te编程")) => 5
    
    • strings.Join(a[]string,sep string) 把切片连接成字符串
    fmt.Println(strings.Join(join, ",")) => "water,iio"
    

    byte和rune类型

    Go中组成字符串的叫做字符,每个字符串都有字符组成,一般可以通过遍历或者单个获取字符串元素获得字符。字符用单引号包裹

    var a = '我'
    var b = 't'
    

    Go中字符有两种

    • uint8类型也叫byte型,代表一个ASCII码字符
    • rune类型,代表一个UTF-8字符

    当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32

    Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

    因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。

    字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。

    修改字符串

    要修改字符串,需要先将其转换成[]rune[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

    funjavascriptc setString() {
       name := "water"
       // 强制类型转换
       byteName := []byte(n开发者_Python学习ame)
       byteName[0] = 'm'
       fmt.Println(string(byteName))
       zhName := "大熊猫"
       runeZhName := []rune(zhName)
       runeZhName[0] = '小'
       fmt.Println(string(runeZhName))
    }
    =>  mater
       小熊猫
    

    类型转换

    Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

    强制类型转换的基本语法如下:

    T(表达式)
     fmt.Println(string(runeZhName))
    

    小结

    这就是Go中的基础数据类型,也是比较常用的一些数据类型,希望对你有所帮助,更多关于Go基础数据类型的资料请关注我们其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消