GO语言基本类型分析

 更新时间:2020年5月1日 09:42  点击:1837

本文实例分析了GO语言基本类型。分享给大家供大家参考。具体如下:

一、整型

go语言有13种整形,其中有2种只是名字不同,实质是一样的,所以,实质上go语言有11种整形。如下:

(1)int :依赖不同平台下的实现,可以是int32或int64

(2)int8 :  (-128->127)

(3)int16: (-32768->32767)

(4)int32: (-2 147 483 648->2 147 483 647)

(5)int64 :(-9 223 372 036 854 775 808->9 223 372 036 854 775 807)

(6)unit : 依赖不同平台下的实现,可以是int32或int64

(7)unit8 (又名byte):  (0->255)

(8)unit16 :   (0->65535)

(9)unit32 (又名rune):    (0->4 294 967 295)

(10)unit64 : (0->18 446 744 073 709 551 615)

(11)unitptr : 恰好容纳指针值的类型,对32位平台是unit32,对64位平台是unit64

(PS : 值得注意的是,go语言中没有自动类型转换,这意味着,除了上篇博文分析的比较运算符之外,其他的操作符基本需要类型转换,才能进行操作。否则就是编译错误)

二、浮点类型

go语言有2种类型的浮点和两种类型的复数类型。

(1) float32(-3.402...×1038->3.402...×1038)

(2) float64(-1.797...×10308->+1.797...×10308)

(3) complex64( 实部、虚部都是一个float32 )

(4) complex128  ( 实部、虚部都是一个float64 )

(PS:标准库math包中,包含了众多数学函数,其中所有函数均使用float64,

标准库math/cmplx包含众多复数相关的数学函数,其中所有函数均使用complex128)

(PPS : 跟数学中一样,Go语言使用后缀 i 表示复数,例如 5 + 5.1i )

三、字符串

Go语言的字符串是用UTF-8编码的变宽字符序列,每个字符都用一个或多个字节表示。这与Java不同,Java是采用UTF-16来表示,每个字符都对应2个字节。

(1)创建:一种是用双引号(")括起来,它表示可解析的字符串,可以进行字符转义。另一种是用单引号(')括起来,它表示原生的字符串,可以包含除反引号之外的任何字符,当然也可以换行。如下: 

复制代码 代码如下:
func test1() {
    str1 := "\"it's me!\""
    str2 := `"it's me,too"`
    fmt.Println(str1)
    fmt.Println(str2)
}

输出为:

"it's me!"
"it's me,too"
(2)Go语言的字符串支持 “+=”操作,可以通过[n]获取索引处的原始字节、通过[n:m]、[n:]、[:m]来获取字节对应的字符串,若字符被截段,显示乱码。如:

复制代码 代码如下:
func test1() {
    str1 := "Go语言的字符串是用UTF-8编码的变宽字符序列,每个字符都用一个或多个字节表示。"
    fmt.Println(str1[4:15])
    fmt.Println(str1[5:15])
    fmt.Println(str1[5])
    fmt.Println(str1[:5])
    fmt.Println(len(str1))         //字节数
    fmt.Println(len([]rune(str1))) //字符数
}

输出为 :

�言的字�
言的字�
232
Go语
109
41

(3)字符串支持常规的比较运算符操作,比较运算符在内存中一个字节一个字节的比较字符串。当然了,这个比较是按照utf-8编码的顺序进行比较的。

(4)上例的最后一个取字符数的操作:len([]rune(str1)),在Go语言中,一个字符串可以可以用一个rune(又名int32)数组来表示,每个rune都表示一个单一的字符。如:

复制代码 代码如下:
func test1() {
    str1 := "Go语言的字符串是用UTF-8编码的变宽字符序列,每个字符都用一个或多个字节表示。"
    for _, char := range []rune(str1) {
        fmt.Println(char)
    }
}

这个操作会将str1的每个字符数字直接打印出来

四、指针

(1)指针的本质,用一个简单例子说明一下:

复制代码 代码如下:
func test2() {
    a := "xyz"
    b := "opq"
    pa := &a  //pa为指向a的指针
    pp := &pa //pp为指向pa的指针
    fmt.Println(a, b, *pa, **pp)
    a += "zz" //a追加“zz”
    fmt.Println(a, b, *pa, **pp)
    *pa += "bb" //pp指向的值,追加"bb"
    fmt.Println(a, b, *pa, **pp)
    fmt.Println("打印a各种情况:", &a, a)
    fmt.Println("打印pa各种情况:", &pa, pa, *pa)
    fmt.Println("打印pp各种情况:", &pp, pp, *pp, **pp)
}

输出如下:

xyz opq xyz xyz
xyzzz opq xyzzz xyzzz
xyzzzbb opq xyzzzbb xyzzzbb
打印a各种情况: 0xc0820001d0 xyzzzbb
打印pa各种情况: 0xc082038018 0xc0820001d0 xyzzzbb
打印pp各种情况: 0xc082038020 0xc082038018 0xc0820001d0 xyzzzbb

可见,指针的本质就是一个存放逻辑地址的变量。

(2)有两种创建变量的语法,同时获得指向它们的指针:new(Type) 和 &Type{}, 如下:

复制代码 代码如下:
type point struct {
    x int
    y int
}

func test3() {
    a := point{1, 2}
    b := new(point)
    c := &point{}
    d := &point{3, 4}
    fmt.Println(a, b, c, d)
}

输出为:

{1 2} &{0 0} &{0 0} &{3 4}

Go语言打印指向结构体的指针时,会打印解引用后的结构体内容,同时会将&作为前缀,表示它是一个指针。

希望本文所述对大家的GO语言程序设计有所帮助。

[!--infotagslink--]

相关文章

  • php中浮点型(float)和整型(integer)数据类型详解

    文章分析了关于php中浮点型(float)和整型(integer)数据类型的用法区别以及在那种情况下会出现数据长度不够。 取值只能为True或者False,当其他类型转化为boolean类...2016-11-25
  • c# 数据类型占用的字节数介绍

    本篇文章主要是对c#中数据类型占用的字节数进行了详细的介绍。需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25
  • Go语言压缩和解压缩tar.gz文件的方法

    这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • 深入理解PHP变量的值类型和引用类型

    在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式。PHP的变量在内存中是这样...2015-10-23
  • JQuery.Ajax()的data参数类型实例详解

    假如现在有这样一个表单,是添加元素用的。<form id='addForm' action='UserAdd.action' type='post'> <label for='uname'>用户名</label>:<input type='text' name='uname' id='uname'><br>...2015-11-24
  • Javascript中的数据类型之旅

    虽然Javascript是弱类型语言,但是,它也有自己的几种数据类型,分别是:Number、String、Boolean、Object、Udefined、Null。其中,Object属于复杂数据类型,Object 由无序的键值对组成。其余几种都属于简单数据类型。注意:变量...2015-10-21
  • C#泛型类型知识讲解

    这篇文章主要介绍了C#泛型类型知识,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-06-25
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • vue:el-input输入时限制输入的类型操作

    这篇文章主要介绍了vue:el-input输入时限制输入的类型操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • JavaScript实现数据类型的相互转换

    这篇文章主要为大家详细介绍了JavaScript实现数据类型的相互转换,感兴趣的朋友可以参考一下...2016-03-09
  • C#的四种基本数据类型

    本文主要介绍了C#的四种基本数据类型的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • 基于PostgreSQL和mysql数据类型对比兼容

    这篇文章主要介绍了基于PostgreSQL和mysql数据类型对比兼容,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-25
  • js判断浏览器类型,版本的代码(附多个实例代码)

    在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Chrome的出世不知道又要给我们添多少乱子。浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本。 JavaScrip...2014-05-31
  • C#与C++之间类型的对应知识点总结

    这篇文章主要介绍了C#与C++之间类型的对应知识点总结,对此有需要的朋友们可以参考下。...2020-06-25
  • R语言中的因子类型详解

    这篇文章主要介绍了R语言中的因子类型详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • C#引用类型和值类型的介绍与实例

    这篇文章主要介绍了C#引用类型和值类型,有需要的朋友可以参考一下...2020-06-25
  • go语言使用RC4加密的方法

    这篇文章主要介绍了go语言使用RC4加密的方法,实例分析了RC4加密的技巧与实现方法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-07
  • 你不知道的 TypeScript 高级类型(小结)

    这篇文章主要介绍了你不知道的 TypeScript 高级类型(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-29
  • toString.call()通用的判断数据类型方法示例

    这篇文章主要给大家介绍了关于toString.call()通用的判断数据类型方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-29