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

 更新时间:2023年04月06日 08:52:44   作者:water  
这篇文章主要为大家介绍了Go中的基础数据类型使用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

任何语言都有数据类型,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
  • +/fmt.Sprintf 连接字符串
// +/fmt.Sprintf
fmt.Println(zhName + name) => "中国water"
fmt.Println(fmt.Sprintf("我是%s的%s", zhName, name)) => "我是中国的water"
  • strings.Split 分割字符串
fmt.Println(strings.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() 判断子字符串或字符在父字符串中出现的位置(索引)
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。无论哪种转换,都会重新分配内存,并复制字节数组。

func setString() {
   name := "water"
   // 强制类型转换
   byteName := []byte(name)
   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基础数据类型的资料请关注脚本之家其它相关文章!

相关文章

  • 解读rand.Seed(time.Now().UnixNano())的作用及说明

    解读rand.Seed(time.Now().UnixNano())的作用及说明

    这篇文章主要介绍了关于rand.Seed(time.Now().UnixNano())的作用及说明,具有很好的参考价值,希望对大家有所帮助。
    2023-03-03
  • Go内置序列化库gob的使用

    Go内置序列化库gob的使用

    本文主要介绍了Go内置序列化库gob的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Golang并发编程之Channel详解

    Golang并发编程之Channel详解

    传统的并发编程模型是基于线程和共享内存的同步访问控制的,共享数据受锁的保护,使用线程安全的数据结构会使得这更加容易。本文将详细介绍Golang并发编程中的Channel,,需要的朋友可以参考下
    2023-05-05
  • 利用Go实现一个简易DAG服务的示例代码

    利用Go实现一个简易DAG服务的示例代码

    DAG的全称是Directed Acyclic Graph,即有向无环图,DAG广泛应用于表示具有方向性依赖关系的数据,如任务调度、数据处理流程、项目管理以及许多其他领域,下面,我将用Go语言示范如何实现一个简单的DAG服务,需要的朋友可以参考下
    2024-03-03
  • Go语言学习笔记之文件读写操作详解

    Go语言学习笔记之文件读写操作详解

    这篇文章主要为大家详细介绍了Go语言对文件进行读写操作的方法,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
    2022-05-05
  • Golang 按行读取文件的三种方法小结

    Golang 按行读取文件的三种方法小结

    本文主要介绍了Golang 按行读取文件的三种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • golang http使用踩过的坑与填坑指南

    golang http使用踩过的坑与填坑指南

    这篇文章主要介绍了golang http使用踩过的坑与填坑指南,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 利用Go语言初步搭建一个web应用的教程

    利用Go语言初步搭建一个web应用的教程

    这篇文章主要介绍了利用Go语言初步搭建一个web应用的教程,由于很多国人盲目迷信谷歌,导致Go语言在国内的人气远超国外...需要的朋友可以参考下
    2015-06-06
  • Go语言学习之条件语句使用详解

    Go语言学习之条件语句使用详解

    这篇文章主要介绍了Go语言中条件语句的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 详解golang中 work与 module 的区别与联系

    详解golang中 work与 module 的区别与联系

    Go 模块通常由一个项目或库组成,并包含一组随后一起发布的 Go 包,Go 模块通过允许用户将项目代码放在他们选择的目录中并为每个模块指定依赖项的版本,解决了原始系统的许多问题,本文将给大家介绍一下golang中 work与 module 的区别与联系,需要的朋友可以参考下
    2023-09-09

最新评论