在 Go 编程语言中,数据类型用于声明函数和变量。

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

Go 语言按类别有以下几种数据类型:

序号 类型和描述

1

布尔型

布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。

2

数字类型

整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

3

字符串类型:

字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

4

派生类型:

包括:

  • (a) 指针类型(Pointer)

  • (b) 数组类型

  • (c) 结构化类型(struct)

  • (d) Channel 类型

  • (e) 函数类型

  • (f) 切片类型

  • (g) 接口类型(interface)

  • (h) Map 类型

一、布尔型

在 Go 中,布尔值的类型为 bool,值是 true 或 false,默认为 false。

//示例代码
var isActive bool // 全局变量声明
var enabled, disabled = true, false // 忽略类型的声明
func test() {
var available bool // 一般声明
valid := false // 简短声明
available = true // 赋值操作
}

所能进行的操作如下:
&& and 与
|| or 或
! not 非

任何空值(nil)或者零值(0, 0.0, "")都不能作为布尔型来直接判断

package main
import (
"fmt"
)
func main() {
var equal bool
var a int =
var b int =
equal = (a == b)
fmt.Println(equal)
}

错误的用法

package main
import (
"fmt"
)
func main() {
if {
fmt.Println("hello world")
}
if nil {
fmt.Println("hello world")
}
if "" {
fmt.Println("hello world")
}
}

结果:

二、数字类型

Go 也有基于架构的类型,例如:int、uint 和 uintptr。

序号 类型和描述
1 uint8
无符号 8 位整型 (0 到 255)
2 uint16
无符号 16 位整型 (0 到 65535)
3 uint32
无符号 32 位整型 (0 到 4294967295)
4 uint64
无符号 64 位整型 (0 到 18446744073709551615)
5 int8
有符号 8 位整型 (-128 到 127)
6 int16
有符号 16 位整型 (-32768 到 32767)
7 int32
有符号 32 位整型 (-2147483648 到 2147483647)
8 int64
有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮点型

序号 类型和描述
1 float32
IEEE-754 32位浮点型数
2 float64
IEEE-754 64位浮点型数
3 complex64
32 位实数和虚数
4 complex128
64 位实数和虚数

其他数字类型

以下列出了其他更多的数字类型:

序号 类型和描述
1 byte
类似 uint8
2 rune
类似 int32
3 uint
32 或 64 位
4 int
与 uint 一样大小
5 uintptr
无符号整型,用于存放一个指针

go 1.9版本对于数字类型,无需定义int及float32、float64,系统会自动识别。

package main
import "fmt" func main() {
var a = 1.5
var b =
fmt.Println(a,b)
}

运行结果

1.5 

如果加上类型float,会出现如下结果

# command-line-arguments
./int.go::: undefined: float

三、字符型

字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。(对于汉字,通常由多个字节组成)。这就是说,传统的字符串是由字符组成的,而Go的字符串不同,是由字节组成的。这一点需要注意。

字符串的表示很简单。用(双引号””)或者(``号)来描述。

区别是,双引号之间的转义字符会被转义,而单引号号之间的转义字符保持原样不变。

字符 " 可以用\"代替

基本操作:

  获取字符串长度:len(str)

  例如:

    str string = "你"

    fmt.Println(len(str))

    输出结果为:3 (因为Golang字符串是由字节构成的)

  要想计算中文的实际字符数可以使用unicode/utf8包的RuneCountInString函数。

  随机访问单个字符:str[i]

  字符串连接:str1 + str2

示例:

package main
import (
"fmt"
"unicode/utf8"
)
func main() {
var a = "hello \n world"
var b = `hello \n world`
var str string = "你"
fmt.Println(a)
fmt.Println("----------")
fmt.Println(b)
fmt.Println(str)
fmt.Println(len(str))//获取字符长度
fmt.Println(str[])//获取单个字节
count := utf8.RuneCountInString("一起学习")//计算中文字符数
fmt.Print(count) //
}

结果:

这里我们看到str[0]得到的是228,这就证明了Go的字符串是由字节组成的

其它的数据类型我们以后再探讨

 

换个语言学一下 Golang (3)——数据类型的更多相关文章

  1. 换个语言学一下 Golang (12)——Web基础

    一.web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什么呢?对于普通的上网过程,系统其实是这样做的 ...

  2. 换个语言学一下 Golang (1)

    做技术的总是有些拗.这么多年一直在.net的框框里打转转.直到现在市场上.net工作越来越难找,项目越来越老才发现不做出改变不行了.就从学习Go开始吧. Go语言的特点 简洁.快速.安全 并行.有趣. ...

  3. 换个语言学一下 Golang (13)——Web表单处理

    介绍 表单是我们平常编写Web应用常用的工具,通过表单我们可以方便的让客户端和服务器进 行数据的交互.对于以前开发过Web的用户来说表单都非常熟悉.表单是一个包含表单元素的区域.表单元素是允许用户在表 ...

  4. 换个语言学一下 Golang (11)——使用包和测试

    Go天生就是为了支持良好的项目管理体验而设计的. 包 在软件工程的实践中,我们会遇到很多功能重复的代码,比如去除字符串首尾的空格.高质量软件产品的特点就是它的部分代码是可以重用的,比如你不必每次写个函 ...

  5. 换个语言学一下 Golang (10)——并行计算

    如果说Go有什么让人一见钟情的特性,那大概就是并行计算了吧. 做个题目 如果我们列出10以下所有能够被3或者5整除的自然数,那么我们得到的是3,5,6和9.这四个数的和是23.那么请计算1000以下( ...

  6. 换个语言学一下 Golang (9)——结构体和接口

    基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,G ...

  7. 换个语言学一下 Golang (7)——使用函数

    什么是函数 函数,简单来讲就是一段将输入数据转换为输出数据的公用代码块.当然有的时候函数的返回值为空,那么就是说输出数据为空.而真正的处理过程在函数内部已经完成了. 想一想我们为什么需要函数,最直接的 ...

  8. 换个语言学一下 Golang (6)——数组,切片和字典

    在上面的章节里面,我们讲过Go内置的基本数据类型.现在我们来看一下Go内置的高级数据类型,数组,切片和字典. 数组(Array) 数组是一个具有相同数据类型的元素组成的固定长度的有序集合.比如下面的例 ...

  9. 换个语言学一下 Golang (6)——控制流程

    Go语言的控制结构关键字只有if..else if..else ,for 和 switch. 而且在Go中,为了避免格式化战争,对程序结构做了统一的强制的规定.看下下面的例子. 请比较一下A程序和B程 ...

随机推荐

  1. Halcon 和 C# 联合编程 - 如何使用开源项目 ViewROI

    声明 HWndCtrl _viewCtrl; ROIController _roiCtrl; 初始化 _viewCtrl = new HWndCtrl(hWindowControl); _roiCtr ...

  2. iOS 防止抓包

    原文链接:https://www.jianshu.com/p/1ab83d726d3f 现在 APP 开发,数据的保密性越来越受重视,保密性高才不会让数据轻易被泄露,同时保护到用户和公司的利益.如何做 ...

  3. uoj#348/洛谷P4221 [WC2018]州区划分(FWT)

    传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...

  4. 关于HTML5用SVG画图

    SVG在HTML5中的应用 SVG(Scalable Vector Graphics)是用来绘制矢量图的HTML5标签.只要定义好XML属性就能够获得与其一致的图像元素. 使用SVG之前先将标签加入到 ...

  5. 微服务监控神器Prometheus的安装部署

    本文涉及:如何在k8s下搭建Prometheus+grafana的监控环境 基本概念 Prometheus提供了容器和云原生领域数据搜集.存储.处理.可视化和告警一套完整的解决方案,最初时是由Soun ...

  6. Docker 安装部署RabbitMQ

    获查询镜像 docker search rabbitmq:management 可以看到如下结果: 获取镜像 docker pull rabbitmq:management 运行镜像 docker r ...

  7. linux网页资料链接

    http://lab.xmirror.cn/  玄镜官网 https://blog.csdn.net/zxgmdzz/article/details/79207944      Navicat Pre ...

  8. day7计算作业详解

    1.day7题目 1.判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 13 + 53 + 3**3 2.给 ...

  9. IBM WebSphere MQ

    相关链接: http://kakajw.iteye.com/category/269774 http://www.ibm.com/support/knowledgecenter/zh/SSFKSJ_7 ...

  10. Spring中的注入方式 和使用的注解 详解

    注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ...