GO语言总结(2)——基本类型
上篇博文总结了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)——基本类型的更多相关文章
- C语言基础(6)-char类型
1. char常量.变量 使用单引号‘’引起来的就是char的常量 ‘a’是一个char类型的常量 “a”是一个字符串类型的常量 1是一个int型的常量 ‘1’是一个char型的常量 char a; ...
- C语言小结之结构类型
C语言小结之结构类型 @刁钻的游戏 (1)枚举型类型enum COLOR {BLACK,RED,BLUE};//声明一种新的数据类型,其值分别为0,1,2但是用BLACK/RED/BLUE代表也可以这 ...
- 【C语言学习】存储类型
C语言中的存储类型主要有四种:auto.static.extern.register ★auto存储类型 默认的存储类型.在C语言中,假设忽略了变量的存储类型,那么编译器就会自己主动默认为auto型 ...
- Go语言规格说明书 之 类型(Types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...
- C语言学习之枚举类型
前言 枚举(enum)类型是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把 ...
- 《Go语言实战》Go 类型:基本类型、引用类型、结构类型、自定义类型
Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么. 提前知道值的类型的好处有很多,比如编译器 ...
- Docs-.NET-C#-指南-语言参考-关键字-值类型:可以 null 的值类型
ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:可以 null 的值类型 1.返回顶部 1. Nullable value types (C# reference) 2019 ...
- Docs-.NET-C#-指南-语言参考-关键字-值类型:struct
ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:struct 1.返回顶部 1. struct(C# 参考) 2015/07/20 struct 类型是一种值类型,通常用来封 ...
- Docs-.NET-C#-指南-语言参考-关键字-值类型:enum
ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:enum 1.返回顶部 1. enum(C# 参考) 2015/07/20 enum 关键字用于声明枚举,一种包含一组被称为枚 ...
随机推荐
- 读书笔记--SQL必知必会--常用MySQL(MariaDB)命令
DBMS信息 显示DBMS的版本 select version(); 显示DBMS状态 status; 显示DBMS资源状态 show status; 显示DBMS支持的权限 show privile ...
- new/delete重载
在c++中,有时我们需要在运行阶段为一个变量分配未命名的内存,并使用指针来访问它,这里就可以用到new关键字.另外需要指出的是,new分配的内存块通常与常规变量分配的内存块不同,常规变量的值都储存在被 ...
- UITableViewCell单元格的删除、插入、移动
UITableViewDelegate的方法 设置编辑模式中得cell的编辑样式(删除或插入) - (UITableViewCellEditingStyle)tableView:( ...
- javascript性能优化:创建javascript无阻塞脚本
javaScript 在浏览器中的运行性能,在web2.0时代显得尤为重要,成千上万行javaScript代码无疑会成为性能杀手, 在较低版本的浏览器执行JavaScript代码的时候,由于浏览器只使 ...
- EF6.0 Code First使用mysql的各种错误和解决办法!!
1.修改或者添加connectionStrings <connectionStrings> <add name="MvcDBContext" connection ...
- Java之多态(一)
package test05; public class DuoTai_Test { /** * 一个对象,多种形态 * WQQ → Student.Worker.Friend 1).一个对象,多种形 ...
- 子div设置浮动无法把父div撑开。
<div class="mainBox"> <div class="leftBox"></div> <div clas ...
- spring springMVC
spring是一个开源框架,是为了解决企业应用程序开发,功能如下 目的:解决企业应用开发的复杂性 功能:使用基本的javabean代替EJB,并提供了更多的企业应用功能 范围:任何java应用 总之: ...
- SQL Server游标(转)
清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...
- SharePoint 是哪些人设计、开发的?
闲下来的时候,我有时候会想:SharePoint 是哪些人设计.开发的? 毕竟,你说一个单选的字段,你从列表里面添加的时候,字段类型选的是 “Yes/No”:而如果你是通过编程把它加入列表的时候,字段 ...