专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Go

GO语言小结(2)——数值类型

发布时间:2011-06-29 18:28:26 文章来源:www.iduyao.cn 采编人员:星星草
GO语言总结(2)——数值类型

  上篇博文总结了Go语言的基础知识——GO语言总结(1)——基本知识  ,本篇

一、整型

  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语言打印指向结构体的指针时,会打印解引用后的结构体内容,同时会将&作为前缀,表示它是一个指针。

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • ModernUI课程:定义一个Logo

    ModernUI教程:定义一个Logo ModernWindow的标题栏包含了一块区域用来显示自定义的窗体Logo: 这个窗体logo通过ModernWindow.LogoD...

  • Django忘记管理员账号和密码的解决方法

    Django忘记管理员账号和密码的解决办法 看着Django的教程学习搭建网站,结果忘记第一次创建的账号和密码了。结果搭建成功以后,一直...

  • GO语言小结(1)——基本知识

    GO语言总结(1)——基本知识 1、注释(与C++一样)   行注释://  块注释:/*   ...  */ 2、标识符   可以这么说,除了数字开头...

  • golang 惯用的文件读取方式

    golang 常用的文件读取方式 Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查。 一次性读取 小文件推荐一...

  • 查询深圳市通相关信息

    查询深圳通相关信息 用 HTTP.GET 从开放 API 中查询深圳通信息,然后将 JSON 数据存入结构体中,再格式化输出。 注意:获取的并不是实...

  • Go语言设计模式实践:结合(Composite)

    Go语言设计模式实践:组合(Composite) 关于本系列 这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就...

  • 列出索引和遍历目录

    列出目录和遍历目录 获取目录列表用 ioutil.ReadDir(),遍历目录用 filepath.Walk(),使用方法请参考文章示例。 示例代码: package ma...

  • io 包的惯用接口速记

    io 包的常用接口速记 我没有 C/C++ 基础,没有接口的概念,且从 Python 投奔而来,Python 的极简主义(一个结果往往只提供一个方法),让我在...

  • 代理服务扩充

    代理服务扩展 之前自己实现了一个代理服务,当时考虑的是只要支持SOCKS5就好了,因为我经常用CHROME,配合着SwitchySharp,体验还是很棒...

  • 文件的创造与打开

    文件的创建与打开 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的。Golang 对文件的支持是在 os package ...

热门推荐: