在 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. PAT甲级真题及训练集

    正好这个"水水"的C4来了 先把甲级刷完吧.(开玩笑-2017.3.26) 这是一套"伪题解". wacao 刚才登出账号测试一下代码链接,原来是看不到..有空 ...

  2. opengl Polygon Offset

    http://www.cnblogs.com/bitzhuwei/archive/2015/06/12/4571539.html#_label2 启用了Polygon Offset,那么到底要把立方体 ...

  3. Oracle树查询总结

    最近在做公司的项目中遇到一个问题,多级级联导航菜单,虽然只有三级目录,但<li>中嵌套<ul>,数据库表结构如下: CREATE TABLE FLFL ( ID NUMBER ...

  4. STP-13-MST和其它STP版本的互操作性(没写完)

    为了理解MST和其他STP版本的互操作性,首先要来看看MST与没有每VLAN概念的纯IEEE802.1D STP或802.1w RSTP非MST交换机(本书称其为非MST交换机)之间互操作的方式.这些 ...

  5. mysql5.7安装部署后初始密码查看以及修改

    一.查看初始密码以下两种方法: 1.找到自己的error.log日志文件,执行自己的命令,红色标记的部分为初始化密码. grep 'temporary password' /data/mysql/er ...

  6. JSPs only permit GET POST or HEAD的解决方案(REST风格)

    问题:原文链接 https://blog.csdn.net/tiberroot/article/details/76615727 看到很多人解决办法使用 @ResponseBody注解 这个意思是按照 ...

  7. Vuex+axios

    Vuex+axios   Vuex简介 vuex是一个专门为Vue.js设计的集中式状态管理架构. 状态? 我们把它理解为在data中需要共享给其他组件使用的部分. Vuex和单纯的全局对象有以下不同 ...

  8. Codeforces 163C(实数环上的差分计数)

    要点 都在注释里了 #include <cstdio> #include <cstring> #include <iostream> #include <al ...

  9. 如何减小SQL 的物理读,。

    1.dev time:1226 1个跑批 db_file_multiblock_read_count =128 60.05 (mins) 26-Dec-17 16:00:20 ~ 26-Dec-17 ...

  10. spring基础概念AOP与动态代理理解

    一.代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...