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

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[:])
fmt.Println(str1[:])
fmt.Println(str1[])
fmt.Println(str1[:])
fmt.Println(len(str1)) //字节数
fmt.Println(len([]rune(str1))) //字符数
}

输出为 :

�言的字�
言的字� Go语

  (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{, }
b := new(point)
c := &point{}
d := &point{, }
fmt.Println(a, b, c, d)
}

输出为:

{ } &{ } &{ } &{ }

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

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

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

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

*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. LinqToDB 源码分析——前言

    记得笔者进入公司的时候接触的第一个ORM框架是Entity Framework.为了Entity Framework也看了不些的英文资料(不是笔者装B哦).正式使用三个月后.笔者对他有一个全面性的认识 ...

  2. ASP.NET MVC5下载数据到Excel文件

    项目中的一个功能是将数据导入到Excel文件中,这里使用NPOI操作Excel,代码如下: public class Excel : IDataTransfer { public Stream Exp ...

  3. C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper

    前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...

  4. 全局变量:global与$GLOBALS的区别和使用

    今天在写框架的时候想把SaeMySQL初始化之后作为全局变量使用.但是后来发现PHP中的全局变量和Java或者OC中的全局变量还是有较大区别的.下面记录一下php里面的global的使用相关注意事项. ...

  5. java 开发模式

    Java-开发模式 Java Web开发方案有多种,这里列举一些经典的开发模式进行横向比较JSP+JAVABEAN开发模式:    特点:该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可 ...

  6. [连载]《C#通讯(串口和网络)框架的设计与实现》- 7.外部接口的设计

    目       录 第七章           外部接口的设计... 2 7.1           插件接口... 2 7.2           图形显示接口... 3 7.3           ...

  7. GJM : Unity3D 高通Vuforia SDK AR 开发

    一.AR概念: 增强现实(Augmented Reality,简称AR),是在虚拟现实的基础上发展起来的新技术,也被称之为混合现实.是通过计算机系统提供的信息增加用户对现实世界感知的技术,将虚拟的信息 ...

  8. MongoDB基础命令笔记

    一.创建数据库 use foobar 二.创建集合 db.persons.insert({name:"zhaomin",age:23}) 三.查找 db.persons.find( ...

  9. 响应式手机商城页面顶部样式HTML代码

    本特效支持PC浏览器和触屏浏览器. 效果展示 http://hovertree.com/texiao/bootstrap/8/ 手机扫描二维码体验效果: HTML代码如下: <!DOCTYPE ...

  10. Vue基本应用

    1.  returnDetail.$mount('#returnDetail');  不用el 直接可以绑定数据到页面的id上 作用区域不能交叠多个vue 实体 否则后面的vue 实体会失效. 2. ...