上篇博文总结了Go语言的基础知识——GO语言总结(1)——基本知识  ,本篇博文介绍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)创建:一种是用双引号(")括起来,它表示可解析的字符串,可以进行字符转义。另一种是用单引号(')括起来,它表示原生的字符串,可以包含除反引号之外的任何字符,当然也可以换行。如下: 

  1. func test1() {
  2. str1 := "\"it's me!\""
  3. str2 := `"it's me,too"`
  4. fmt.Println(str1)
  5. fmt.Println(str2)
  6. }

输出为:

  1. "it's me!"
  2. "it's me,too"

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

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

输出为 :

  1. �言的字�
  2. 言的字�
  3.  
  4. Go

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

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

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

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

四、指针

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

  1. func test2() {
  2. a := "xyz"
  3. b := "opq"
  4. pa := &a //pa为指向a的指针
  5. pp := &pa //pp为指向pa的指针
  6. fmt.Println(a, b, *pa, **pp)
  7. a += "zz" //a追加“zz”
  8. fmt.Println(a, b, *pa, **pp)
  9. *pa += "bb" //pp指向的值,追加"bb"
  10. fmt.Println(a, b, *pa, **pp)
  11. fmt.Println("打印a各种情况:", &a, a)
  12. fmt.Println("打印pa各种情况:", &pa, pa, *pa)
  13. fmt.Println("打印pp各种情况:", &pp, pp, *pp, **pp)
  14. }

输出如下:

  1. xyz opq xyz xyz
  2. xyzzz opq xyzzz xyzzz
  3. xyzzzbb opq xyzzzbb xyzzzbb
  4. 打印a各种情况: 0xc0820001d0 xyzzzbb
  5. 打印pa各种情况: 0xc082038018 0xc0820001d0 xyzzzbb
  6. 打印pp各种情况: 0xc082038020 0xc082038018 0xc0820001d0 xyzzzbb

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

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

  1. type point struct {
  2. x int
  3. y int
  4. }
  5.  
  6. func test3() {
  7. a := point{, }
  8. b := new(point)
  9. c := &point{}
  10. d := &point{, }
  11. fmt.Println(a, b, c, d)
  12. }

输出为:

  1. { } &{ } &{ } &{ }

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

值得注意的是,如果Type不是一个可以用大括号初始化的类型,那就只能使用内置函数 new(Type)了。如下:

  1. func test5() {
  2. //创建一个int变量,并获得它的指针
  3. var1 := new(int)
  4. //var1 := &int32{}
  5. fmt.Printf("%T->%v\n", var1, var1)
  6. }

int不可以使用大括号初始化,所以第二种会报错,注释掉后,输出:

  1. *int->0xc082006270

参考:《Go语言程序设计》

GO语言总结(2)——基本类型的更多相关文章

  1. C语言基础(6)-char类型

    1. char常量.变量 使用单引号‘’引起来的就是char的常量 ‘a’是一个char类型的常量 “a”是一个字符串类型的常量 1是一个int型的常量 ‘1’是一个char型的常量 char a; ...

  2. C语言小结之结构类型

    C语言小结之结构类型 @刁钻的游戏 (1)枚举型类型enum COLOR {BLACK,RED,BLUE};//声明一种新的数据类型,其值分别为0,1,2但是用BLACK/RED/BLUE代表也可以这 ...

  3. 【C语言学习】存储类型

    C语言中的存储类型主要有四种:auto.static.extern.register ★auto存储类型 默认的存储类型.在C语言中,假设忽略了变量的存储类型,那么编译器就会自己主动默认为auto型 ...

  4. Go语言规格说明书 之 类型(Types)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...

  5. C语言学习之枚举类型

    前言 枚举(enum)类型是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把 ...

  6. 《Go语言实战》Go 类型:基本类型、引用类型、结构类型、自定义类型

    Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么. 提前知道值的类型的好处有很多,比如编译器 ...

  7. Docs-.NET-C#-指南-语言参考-关键字-值类型:可以 null 的值类型

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:可以 null 的值类型 1.返回顶部 1. Nullable value types (C# reference) 2019 ...

  8. Docs-.NET-C#-指南-语言参考-关键字-值类型:struct

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:struct 1.返回顶部 1. struct(C# 参考) 2015/07/20 struct 类型是一种值类型,通常用来封 ...

  9. Docs-.NET-C#-指南-语言参考-关键字-值类型:enum

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:enum 1.返回顶部 1. enum(C# 参考) 2015/07/20 enum 关键字用于声明枚举,一种包含一组被称为枚 ...

随机推荐

  1. DropDownList实现可输入可选择

    1.js版本 <div style="z-index: 0; visibility: visible; clip: rect(0px 105px 80px 85px); positio ...

  2. Xcode7.1环境下上架iOS App到AppStore 流程① (Part 一)

    前言部分 之前App要上架遇到些问题到网上搜上架教程发现都是一些老的版本的教程 ,目前iTunesConnect 都已经迭代好几个版本了和之前的 界面风格还是有很大的差别的,后面自己折腾了好久才终于把 ...

  3. Map集合

    1:Map (1)将键映射到值的对象. 一个映射不能包含重复的键:每个键最多只能映射到一个值. 键值对的方式存在 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯 ...

  4. 一个Java文件至多包含一个公共类

    编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...

  5. Spring MVC中的ModelMap作用及用法

    ModelMap的作用: ModelMap对象主要用于传递控制方法传递数据到结果页面.类似于request的setAttribute方法的作用. 所以我们要想在jsp页面获取数据,只要将数据放到Mod ...

  6. 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...

  7. 【设计模式】单例模式 c++实现

    单例模式一般应用在整个应用中只会存在一个对象.比如应用类,游戏场景类,工具类等. 实现方式: 头文件 singleton.h: #ifndef _SINGLETON_H_ #define _SINGL ...

  8. Quartz框架(第一版)

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  9. 应用Apache Axis进行Web Service开发

    转自(http://tscjsj.blog.51cto.com/412451/84813) 一.概述 SOAP原意为Simple Object Access Protocol(简单对象访问协议),是一 ...

  10. minSdkVersion maxSdkVersion targetSdkVersion target 的区别

    minSdkVersion 描述:app最低支持的sdk版本号 作用:如果手机SdkVersion小于app中定义的minSdkVersion,则android系统不允许安装该app 定义位置:And ...