go系列教程-类型

下面是 Go 支持的基本类型:
bool
数字类型
int8, int16, int32, int64, int
uint8, uint16, uint32, uint64, uint
float32, float64
complex64, complex128
byte
rune
string
bool
1、bool 类型表示一个布尔值,值为 true 或者 false。
2、有符号整型
int8:表示 8 位有符号整型大小:8 位范围:-128~127
int16:表示 16 位有符号整型大小:16 位范围:-32768~32767
int32:表示 32 位有符号整型大小:32 位范围:-2147483648~2147483647
int32:表示 32 位有符号整型大小:32 位范围:-2147483648~2147483647
int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。范围:在 32 位系统下是 -2147483648~2147483647,而在 64 位系统是 -9223372036854775808~9223372036854775807。
package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var a int = 89
    b := 95
    fmt.Sprintf("value of a is", a, "and is b\n", b)
    // a 的类型和大小
    fmt.Printf("type of a is %T, size of a is %d\n", a, unsafe.Sizeof(a))
    // b 的类型和大小
    fmt.Printf("type of b is %T, size of b is %d\n", b, unsafe.Sizeof(b))
}
在线运行程序
value of a is 89 and is 95
type of a is int, size of a is 8
type of b is int, size of b is 8
从上面的输出,我们可以推断出 a 和 b 为 int 类型,且大小都是 64 位(8 字节)。如果你在 32 位系统上运行上面的代码,会有不同的输出。在 32 位系统下,a 和 b 会占用 32 位(4 字节)的大小。
3、无符号整型
uint8:表示 8 位无符号整型大小:8 位范围:0~255
uint16:表示 16 位无符号整型大小:16 位范围:0~65535
uint32:表示 32 位无符号整型大小:32 位范围:0~4294967295
uint64:表示 64 位无符号整型大小:64 位范围:0~18446744073709551615
uint:根据不同的底层平台,表示 32 或 64 位无符号整型。大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。范围:在 32 位系统下是 0~4294967295,而在 64 位系统是 0~18446744073709551615。

4、浮点型
float32:32 位浮点数float64:64 位浮点数
package main

import (
    "fmt"
)

func main() {
    a, b := 5.67, 8.97
    fmt.Printf("type of a %T b %T\n", a, b)
    sum := a + b
    diff := a - b
    fmt.Println("sum", sum, "diff", diff)

    no1, no2 := 56, 89
    fmt.Println("sum", no1+no2, "diff", no1-no2)
}
在线运行程序
type of a float64 b float64
sum 14.64 diff -3.3000000000000007
sum 145 diff -33

a 和 b 的类型根据赋值推断得出。在这里,a 和 b 的类型为 float64(float64 是浮点数的默认类型)。

我们把 a 和 b 的和赋值给变量 sum,把 b 和 a 的差赋值给 diff,接下来打印 sum 和 diff。no1 和 no2 也进行了相同的计算

5、复数在计算机中,复数是由两个浮点数表示的,其中一个表示实部(real),一个表示虚部(imag)
complex64:实部和虚部都是 float32 类型的的复数。complex128:实部和虚部都是 float64 类型的的复数。
内建函数 complex 用于创建一个包含实部和虚部的复数。complex 函数的定义如下:func complex(r, i FloatType) ComplexType

该函数的参数分别是实部和虚部,并返回一个复数类型。实部和虚部应该是相同类型,也就是 float32 或 float64。如果实部和虚部都是 float32 类型,则函数会返回一个 complex64 类型的复数。如果实部和虚部都是 float64 类型,则函数会返回一个 complex128 类型的复数。

还可以使用简短语法来创建复数:c := 6 + 7i下面我们编写一个简单的程序来理解复数。
package main

import "fmt"

func main() {
    c1 := complex(5, 7)
    c2 := 8 + 27i
    cadd := c1 + c2
    fmt.Println("sum:", cadd)
    cmul := c1 * c2
    fmt.Println("product:", cmul)
}
在线运行程序
sum: (13+34i)
product: (-149+191i)

如果大家对复数的运算法则不是很了解,可以查阅《复数运算法则》,其中详细的讲解了复数的加减乘除操作 。

复数也可以用==和!=进行相等比较,只有两个复数的实部和虚部都相等的时候它们才是相等的。

Go语言内置的 math/cmplx 包中提供了很多操作复数的公共方法,实际操作中建议大家使用复数默认的 complex128 类型,因为这些内置的包中都使用 complex128 类型作为参数

6、其他数字类型
byte 是 uint8 的别名。rune 是 int32 的别名。

7、string 类型在golang中,字符串是字节的集合,其中每一个元素叫做字符。具体内容参看《go系统教程-字符串》

8、类型转换
Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换
package main

import "fmt"

func main() {
    a := 1
    b := 5.5
    sum := a + b
    fmt.Println(sum)
}
在线运行程序
invalid operation: a + b (mismatched types int and float64)

上面的代码在 C 语言中是完全合法的,然而在 Go 中,却是行不通的。a的类型是 int ,而 b 的类型是 float64 ,

我们正试图把两个不同类型的数相加,Go 不允许这样的操作。

如果运行程序,你会得到: invalid operation: i + j (mismatched types int and float64)

要修复这个错误,i 和 j 应该是相同的类型。在这里,我们把 j 转换为 int 类型。把 v 转换为 T 类型的语法是 T(v)

package main

import "fmt"

func main() {
    a := 1
    b := 5.5
    sum := a + int(b)
    fmt.Println(sum)
}
在线运行程序
 6

 
 

原文地址:https://www.cnblogs.com/e10470252222/p/12638333.html

时间: 2024-10-27 06:13:12

go系列教程-类型的相关文章

MongoDB系列教程(八):GridFS存储详解

MongoDB系列教程(八):GridFS存储详解 GridFS简介 mongoDB的文档以BSON格式存储,支持二进制的数据类型,当我们把二进制格式的数据直接保存到mongoDB的文档中.但是当文件太大时,例如图片和视频等文件,每个文档的长度是有限的,于是mongoDb会提供了一种处理大文件的规范--GridFS. GridFS实现原理 在GridFS数据库中,默认使用fs.chunks 和fs.files来存储文件,其中fs.files集合存放文件的信息,fs.chunks存放文件的数据,一

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

[Cocos Creator ](千人群):  432818031 上一篇,介绍了Himi在使用过cc所有组件后的一篇总结,没有具体介绍每个组件的原因在于官方文档很齐全,而且也有视频的介绍. 所以希望童鞋们可以把我这两篇博文当成对组件.脚本两部分开发的整理与总结. 后续的文章,Himi应该主要更新一些官方还未补充或者还没有的教程.避免无用功. 下面直接放出代码,因为不是很难理解.所以不再一一赘述,都是常用的函数.事件监听.动作回调.定时器等开发过程中必接触的. 大致内容如下: cc 属性介绍 获

史上最详细的Android Studio系列教程一--下载和安装

链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 背景 相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显

Java NIO 系列教程(转)

原文中说了最重要的3个概念,Channel 通道Buffer 缓冲区Selector 选择器其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步的非堵塞模式才加入的东西.以前的流总是堵塞的,一个线程只要对它进行操作,其它操作就会被堵塞,也就相当于水管没有阀门,你伸手接水的时候,不管水到了没有,你就都只能耗在接水(流)上.nio的Channel的加入,相当于增加了水龙头(有阀门),虽然一个时刻也只能接一个水管的水,但依赖轮换策略,在水量不大的时候,各

Web攻防系列教程之跨站脚本攻击和防范技巧详解

Web攻防系列教程之跨站脚本攻击和防范技巧详解[XSS] 收藏:http://www.rising.com.cn/newsletter/news/2012-04-25/11387.html 来源:瑞星 2012-04-25 14:33:46 摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式.因为Web环境的复杂性 以及XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么,又该如何进行有效的防范呢?本文对此进行了 有针对性的具体

Python系列教程大汇总

Python初级教程 Python快速教程 (手册) Python基础01 Hello World! Python基础02 基本数据类型 Python基础03 序列 Python基础04 运算 Python基础05 缩进和选择 Python基础06 循环 Python基础07 函数 Python基础08 面向对象的基本概念 Python基础09 面向对象的进一步拓展 Python基础10 反过头来看看 Python补充01 序列的方法 Python中级教程 Python进阶01 词典 Pytho

ASP.NET MVC3 系列教程 - 模型

I:基础绑定的实现 1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时候,有时候会利用到QueryString去做一些功能如:http://localhost/First/QueryString.aspx?Sort=Desc,在MVC中,它的实现有两种方式: 控制器代码 public class QueryStringController : Controller { pub

ASP.NET MVC3 系列教程 – 新的Layout布局系统

原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage那些事 code: <!------------Begin--------------> <!-- Master文件 --> <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPa

C#微信公众号开发系列教程二(新手接入指南)

http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微