下面是 Go 支持的基本类型:

    • bool
    • Numeric Types 
      • int8, int16, int32, int64, int
      • uint8,uint16,uin32,uint64, uint
      • float32, float64
      • complex64, complex128
      • byte
      • rune
    • string

bool

bool 类型表示真假值,只能为 true 或 false

import "fmt"

func main() {
var a bool = true
b := false
fmt.Println("a:", a, "b:", b)
c := a && b
fmt.Println("c:", c)
d := a || b
fmt.Println("d:", d)
}

这里 a 被赋值为 trueb 被赋值为 false

c 被赋值为 a && b。与操作符(&&)仅在 a 与 b 都为 true 时才返回 true,因此在这里 c 被赋值为 false

或操作符(||)在 a 与 b 中至少有一个为 true 时返回 true。在这里因为 a 为 true,因此 d 也被赋值为 true译者注:a 为 true,因此 a || b 的结果为true,因此 d 为 true)。我们将会得到如下输出:

a: true b: false
c: false
d: true

有符号整型

int8:表示8位有符号整数 
size:8 bits 
range:-128 ~ 127

int16:表示16位有符号整数 
size:16 bits 
range:-32768 ~ 32767

int32: 表示32位有符号整数 
size: 32 bits 
range: -2147483648 ~ 2147483647

int64: 表示64位有符号整数 
size: 64 bits 
range: -9223372036854775808 ~ 9223372036854775807

int: 根据底层平台(underlying platform)不同,表示32或64位整数。在实际编程中,除非对大小有明确的要求,否则一般应该使用 int 表示整数。 
size: 在32位系统下 32 bits,在64位系统下 64 bits 
range: 在32位系统下 -2147483648 ~ 2147483647,在64位系统下 -9223372036854775808 ~ 9223372036854775807

package main

import "fmt"

func main() {
var a int =
b :=
fmt.Println("value of a is", a, "and b is", b)
}

输出结果为:

value of a is  and b is 

无符号整型

uint8: 表示8位无符号整型 
size: 8 bits 
range: 0 ~ 255

uint16: 表示16位无符号整型 
size: 16 bits 
range: 0 ~ 65535

uint32: 表示32位无符号整型 
size: 32 bits 
range: 0 ~ 4294967295

uint64: 表示64位无符号整型 
size: 64 bits 
range: 0 ~ 18446744073709551615

uint : 根据底层平台不同表示32或64位无符号整型 
size : 32位系统下是32 bits,64位系统下64 bits 
range :32位系统下 0 ~ 4294967295,64位系统下 0 ~ 18446744073709551615

浮点类型

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 := ,
fmt.Println("sum", no1+no2, "diff", no1-no2)
}

变量 a 和 b 的类型从它们的初值推导。在这里 a 和 b 都为 float64。(float64是浮点数的默认类型)。我们将 a 与 b的和赋值给 sum。将 a 与 b 的差赋值给 diff。然后打印 sum 和 diffno1 和 no2 也是同样的操作。上面的程序,输出如下:

type of a float64 b float64
sum 14.64 diff -3.3000000000000007
sum diff -

复数类型

complex64:实部和虚部都是 float32 
complex128:实部和虚部都是 float64

通过内置函数 complex 来构造一个包含实部和虚部的复数。它的原型为:

func complex(r, i FloatType) ComplexType

它接收一个实部和一个虚部为参数并返回一个复数类型。实部和虚部应该为同一类型(float32 或 float64)。如果实部和虚部都是 float32,该函数返回一个类型为 complex64 的复数。如果实部和虚部都是 float64,该函数返回一个类型为complex128 的复数。

复数也可以通过简短声明语法来创建:

c :=  + 7i 

让我们写一个小程序来了解复数:

package main

import (
"fmt"
) func main() {
c1 := complex(, )
c2 := + 27i
cadd := c1 + c2
fmt.Println("sum:", cadd)
cmul := c1 * c2
fmt.Println("product:", cmul)
}

在上面的程序中,c1 和 c2 是两个复数。c1 的实部为 5 虚部为 7c2 的实部为 8 虚部为 27c1 与 c2 的和赋值给 caddc1 与 c2 的积赋值给 cmul运行这个程序得到如下输出:

sum: (+34i)
product: (-+191i)

其他数字类型

byte 是 uint8 的别称 
rune 是 int32 的别称

我们将在学习 string 类型时详细讨论 byte 和 rune

字符串类型

在Go中字符串(String)是 byte 的集合。如果你觉得这个定义没有任何意义也没关系。我们可以暂且假定一个字符串就是一串字符的集合。在后面的教程中我们将通过一整篇的篇幅来介绍字符串的细节。

让我们写一个程序来了解字符串:

package main

import (
"fmt"
) func main() {
first := "Naveen"
last := "Ramanathan"
name := first +" "+ last
fmt.Println("My name is",name)
}

在上面的程序中,first 被赋值为 "Naveen"last 被赋值为 "Ramanathan"。字符串可以通过 + 操作符连接在一起。name 被赋值为 first 、空格与 last 三者连接后的结果。上面的程序将得到如下输出:

My name is Naveen Ramanathan

还有许多操作可应用于字符串。我们将用单独的一篇教程来介绍它们。

字符串的长度

utf8 包 提供了 func RuneCountInString(s string) (n int) 来获取字符串的长度,该方法接受一个字符串作为参数,并返回该字符串中 rune 的数量。

译者注: RuneCountInString 返回字符串中 Unicode 字符的个数,而 len 返回字符串中 byte 的个数,注意两者的区别。 

package main

import (
"fmt"
"unicode/utf8"
) func length(s string) {
fmt.Printf("length of %s is %d\n", s, utf8.RuneCountInString(s))
}
func main() { word1 := "Señor"
length(word1)
word2 := "Pets"
length(word2)
}

上面程序的输出为:

length of Señor is
length of Pets is

类型转换

Go是强类型的语言,没有隐式的类型提升和转换。让我们通过一个例子说明这意味着什么:

package main

import (
"fmt"
) func main() {
i := //int
j := 67.8 //float64
sum := i + j //int + float64 not allowed
fmt.Println(sum)
}

上面的代码在C语言中是完全合法的,但是在Go中却不是。i 的类型是 int 而 j 的类型是 float64,将这两个类型不同的数字相加是非法的。运行这个程序将会报错:main.go:10: invalid operation: i + j (mismatched types int and float64)

为了修复这个错误,我们应该将 i 和 j 转换为同样的类型,在这里让我们将 j 转换为 int。通过 T(v)可以将 v 的值转换为 T 类型 。

package main

import (
"fmt"
) func main() {
i := //int
j := 67.8 //float64
sum := i + int(j) //j is converted to int
fmt.Println(sum)
}

可以得到正确的输出结果:122

在赋值时情况也是如此,将一个变量赋值给另一个类型不同的变量时必须显式转型。下面的程序说明了这一点

package main

import (
"fmt"
) func main() {
i :=
var j float64 = float64(i) //this statement will not work without explicit conversion
fmt.Println("j", j)
}

在 var j float64 = float64(i) 这一行,i 被转换为 float64,然后赋值给 j。当你尝试将 i 不进行转换直接赋值给 j时,编译器将报错。

Golang教程:类型的更多相关文章

  1. golang枚举类型 - iota用法拾遗

    在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...

  2. Golang - 复合类型

    目录 Golang - 复合类型 1. 指针 2. new()和make() 3. 数组 4. slice 5. Map 6. 结构体 7. 结构体参数 Golang - 复合类型 1. 指针 go语 ...

  3. Golang基本类型整理

    总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次. Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入 ...

  4. Golang教程:变量

    声明单一变量 声明一个变量的语法为:var name type,例如 package main import "fmt" func main() { var age int // ...

  5. golang:interface{}类型测试

    在golang中空的interface即interface{}可以看作任意类型, 即C中的void *. 对interface{}进行类型测试有2种语法: 1. Comma-ok断言: value, ...

  6. golang 自定义类型的排序sort

    sort包中提供了很多排序算法,对自定义类型进行排序时,只需要实现sort的Interface即可,包括: func Len() int {... } func Swap(i, j int) {... ...

  7. [Objective-C语言教程]类型定义:typedef(19)

    Objective-C编程语言提供了一个名称为typedef的关键字,可以使用此关键字为类型指定新名称. 以下是为单字节数字定义术语BYTE的示例 - typedef unsigned char BY ...

  8. Golang教程:Map

    什么是 map? Map 是 Go 中的内置类型,它将键与值绑定到一起.可以通过键获取相应的值. 如何创建 map? 可以通过将键和值的类型传递给内置函数 make 来创建一个 map.语法为:mak ...

  9. Golang教程:数组和切片

    数组 数组是类型相同的元素的集合.例如,整数 5, 8, 9, 79, 76 的集合就构成了一个数组.Go不允许在数组中混合使用不同类型的元素(比如整数和字符串). 声明 var variable_n ...

随机推荐

  1. 对路径“c:\windows\system32\inetsrv\syslog”的访问被拒绝。

    win7 64 系统,在调试wcf的时候,出了这个错误,当时感觉iis的权限不够,iis搞了好长时间没解决.最后改了用到的应用程序池中的标识.标识改成 localSytem,之后问题解决. IIS-- ...

  2. 「HNOI 2015」菜肴制作

    题目链接 戳我 \(Description\) 有若干限制,需要求一个\(1\)到\(n\)的排列,每个限制\((x,y)\)表示\(x\)必须在\(j\)之前,并要求所求的排列满足所有限制并让\(1 ...

  3. Python 的web自动化测试

    安装selenium 上面python已安装完毕,接下来安装selenium. 安装selenium之前需安装些必要工具 1. 安装setuptools 下载地址:https://pypi.pytho ...

  4. JS关闭页面弹窗提醒

    <html> <head><title>JS测试</title> <script type="text/javascript" ...

  5. php数据库编程---mysqli扩展库

    1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作.Mysqli扩展库比mysql扩展库加强了. 2,mysqli扩展库和mysql扩展库的比较 (1) mysq ...

  6. [Objective-C语言教程]常量(7)

    常量指的是程序在执行期间不会改变的固定值.这些固定值也称为文字.常量可以是任何基本数据类型,如整数常量,浮点常量,字符常量或字符串文字.还有枚举常量.常量被视为常规变量,只不过它们的值在定义后无法修改 ...

  7. 浅谈Android选项卡(一)

    选项卡,这样UI设计在很多方面都存在,window,web,ios,Android. 选项卡的主要作用,不用多介绍,可以在有线的空间内,显示出更多内容,同时也是操作起来也很方便.

  8. 为 JSON 字符串创建对象

    ---------------------------页面效果---------------------------------- ---------------------------代码实现--- ...

  9. Vue---基础笔记 (基础的构建 )

    vue 基础 准备工作 chrome浏览器插件安装 完成后出现标记 vue页面标记需要使用vue.js非vue.min.js 调试页面 结构模型MVVM =  m:model + v:view + v ...

  10. [Alpha]Scrum Meeting#6

    github 本次会议项目由PM召开,时间为4月8日晚上10点30分 时长25分钟 任务表格 人员 昨日工作 下一步工作 木鬼 整理开会记录 撰写并发布之前因为清明耽误的博客 SiMrua 寻找方法捕 ...