go var 一个整数_Go教程第四篇:数据类型

第四篇:数据类型

这篇文章是我们的《Golang系列教程》的第四篇文章。

下面是Go语言中的基本数据类型:

bool

Numberic Types

int8, int16,int32,int64,int

uint8,uint16,uint64,uint

float32,float64

complex64,complex128

byte

rune

bool

布尔类型代表了一个布尔值,它要么是true要么是false。

package main

import "fmt"

func main() {

a := true

b := false

fmt.Println("a:", a, "b:", b)

c := a && b

fmt.Println("c:", c)

d := a || b

fmt.Println("d:", d)

}

在上面的程序中,a被赋予true值,b被赋予false值。c被赋予a&&b。&&操作符只有当a和b都为true的情况下才返回

true。因此,在本例子中,c的值是false。

|| 操作符只要a和b中有一个是true,它就返回true。在本例中,d的值是true因为a为true。

我们将得到如下输出:

a: true b: false

c: false

d: true

有符号整数型

int8 :代表8为有符号整数

大小 : 8位

范围 : -125到127

int8 :代表8为有符号整数

大小 : 8位

范围 : -125到127

int16 :代表16为有符号整数

大小 : 16位

范围 : -32768到32767

int32 :代表32为有符号整数

大小 : 8位

范围 : -2147483648到2147483647

int64 :代表64为有符号整数

大小 : 64位

范围 : -9223372036854775808 到9223372036854775807

int :

int 代表32或64位整数,具体取决于底层的平台。通常你只需要使用int来表示一个整数值即可。

除非在某些情况下,你要指定位数。

大小 :在32位系统上是32位,在64位系统上是64位。

范围 :

在32位系统上是-2147483648 to 2147483647

在64位系统上是-9223372036854775808 to 9223372036854775807

package main

import "fmt"

func main() {

var a int = 89

b := 95

fmt.Println("value of a is", a, "and b is", b)

}

上面的程序将输出: value of a is 89 and b is 95

在上面的程序中,a是一个int类型,b的类型是根据它的初始值推断出来的。正如我们上面所说的那样,

int的大小在32位系统上是32位,在64位系统上是64位。我们来验证一下。

变量的类型可以在Printf函数里面使用%T格式化分隔符打印出来。使用Go下面的unsafe包,我们可以使用Sizeof功能

来计算变量的字节数。使用unsafe包可能有性能问题,但是就本文教程来说,我们可以使用它。

下面的程序会输出变量a和b的数据类型和内存大小:

package main

import (

"fmt"

"unsafe"

)

func main() {

var a int = 89

b := 95

fmt.Println("value of a is", a, "and b is", b)

fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) //type and size of a

fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) //type and size of b

}

上面的程序将会产生如下输出:

value of a is 89 and b is 95

type of a is int, size of a is 4

type of b is int, size of b is 4

我们可以从上面的输出中推断出来,a和b的类型是int并且他们是32位(4字节)。

如果在64位系统上运行,结果将会有所不同。在一个64位系统上,a和b占据着64位(8字节)。

无符号型整数

uint8: 表示8位无符号整数

大小: 0 to 255

uint16: 表示16位无符号整数

大小: 16 bits

范围: 0 to 65535

uint32:表示32位无符号整数

大小: 32 位

范围: 0 to 4294967295

uint64: 表示64位无符号整数

大小: 64 位

范围: 0 to 18446744073709551615

uint : 表示32位或64位无符号整数(取决于底层的平台的位数)

大小 : 32 位或64位

范围 :在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 := 56, 89

fmt.Println("sum", no1+no2, "diff", no1-no2)

}

a和b的值可以根据赋值给他们的值来推断出来。在本例中,a和b是float64(浮点值的默认类型是float64)。

我们使a和b相加,并且把结果赋值给变量sum。同时,使a减去b,然后把差值赋值给diff变量。

最后把sum和diff打印出来。类似的计算,我们使用no1和no2也进行一次。上面的程序将会打印:

type of a float64 b float64

sum 14.64 diff -3.3000000000000007

sum 145 diff -33

复杂类型

complex64 : 这是有着一个float32位实数和float32位虚数的复杂类型的数字

complex128 : 这是有着一个float64位实数和float64位虚数的复杂类型的数字

使用内置函数 complex可以构造一个有着实数和虚数部分的复杂类型数字。complex函数的定义如下:

func complex(r, i FloatType) ComplexType

这个函数接收俩个float类型的参数,分别是实数部分和虚数部分,然后返回一个complex类型的数字。

需要注意的是: 实数部分和虚数部分都必须要么全是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)

}

在上面的程序中,c1和c2是俩个复杂数值类型。c1的实数部分是5,虚数部分是7。c2的实数部分是8,虚数部分是27。

把c1和c2的和赋值给cadd变量。c1和c2的乘积复制给cmul变量。该程序将输出如下:

sum: (13+34i)

product: (-149+191i)

其他数值类型

byte 是uint8的别名

rune 是int32的别名

我们将在学习字符串的时候,再对byte和rune进行详细说明。

string 类型

在Golang里,字符串是一系列字节的集合。好吧,你或许觉得这个定义毫无意义。

现在,我们先假设 一个字符串是一个系列字符的集合。在单独的章节中的我们会再学习

string的细节。

package main

import (

"fmt"

)

func main() {

first := "Naveen"

last := "Ramanathan"

name := first +" "+ last

fmt.Println("My name is",name)

}

在上面的程序中,first被赋值于"Naveen"。last被赋值于"Ramanathan"。string可以使用+号进行连接。

firt拼接一个空格符然后在拼接last之后被赋值给name。上面的程序将会打印如下:name is Naveen Ramanathan

类型转换

Go对于类型的要求是非常严格和明确的,它不会自动地进行类型升级或类型转换。我们将用一个例子说明:

package main

import (

"fmt"

)

func main() {

i := 55 //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 := 55 //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 := 10

var j float64 = float64(i) //this statement will not work without explicit conversion

fmt.Println("j", j)

}

在第九行,i先是被转换成float64,然后被赋值给j。如果你试图在没有进行类型转换的情况下,把i赋值给j的话,编译器将会

抛出一个错误。

致谢

感谢您百忙之中阅读本文。如果有任何反馈和问题,请您在评论区留言。

备注

本文系翻译之作原文博客地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值