第一句子大全,网罗天下好句子,好文章尽在本站!

go语言入门教程05 类型

时间:2023-12-13

package mainimport fmtfunc main { a := trueb := falsefmt Printlna:, a, b:, bc := a && bfmt Printlnc:, cd := a || bfmt Printlnd:, d}在上面的程序中,a 赋值为 true,b 赋值为 false

友情提示:本文共有 4705 个字,阅读大概需要 10 分钟。

编程语言中类型属性有很多,不熟悉类型的话对后续的编程也会带来很多的难点,那么如何正确的理解类型以及运用类型呢,下面来学习一下吧!

类型

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

bool

数字类型

int8, int16, int32, int64, int

uint8, uint16, uint32, uint64, uint

float32, float64

complex64, complex128

byte

rune

string

bool

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。在这里,由于 a 为 true,因此 d 也为 true。我们将得到程序的输出如下。

a: true b: false

c: false

d: true

有符号整型

int8:表示 8 位有符号整型

大小:8 位

范围:-128~127

int16:表示 16 位有符号整型

大小:16 位

范围:-32768~32767

int32:表示 32 位有符号整型

大小:32 位

范围:-2147483648~2147483647

int64:表示 64 位有符号整型

大小:64 位

范围:-9223372036854775808~9223372036854775807

int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。

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

范围:在 32 位系统下是 -2147483648~2147483647,而在 64 位系统是 -9223372036854775808~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 的类型通过赋值(95)推断得出。上面我们提到,int 类型的大小在 32 位系统下是 32 位,而在 64 位系统下是 64 位。接下来我们会证实这种说法。

在 Printf 方法中,使用 %T 格式说明符(Format Specifier),可以打印出变量的类型。Go 的 unsafe 包提供了一个 Sizeof 函数,该函数接收变量并返回它的字节大小。unsafe 包应该小心使用,因为使用 unsafe 包可能会带来可移植性问题。不过出于本教程的目的,我们是可以使用的。

下面程序会输出变量 a 和 b 的类型和大小。格式说明符 %T 用于打印类型,而 %d 用于打印字节大小。

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)) // a 的类型和大小

fmt.Printf("ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) // 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 位无符号整型

大小: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。

浮点型

float32:32 位浮点数

float64:64 位浮点数

下面一个简单程序演示了整型和浮点型的运用。

package main

import (

"fmt"

)

func main() {

a, b := 5.67, 8.97

fmt.Printf("type of a %T b %Tn", 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,把 b 和 a 的差赋值给 diff,接下来打印 sum 和 diff。no1 和 no2 也进行了相同的计算。上述程序将会输出:

type of a float64 b float64

sum 14.64 diff -3.3000000000000007

sum 145 diff -33

复数类型

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)

}

在上面的程序里,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 中,字符串是字节的集合。如果你现在还不理解这个定义,也没有关系。我们可以暂且认为一个字符串就是由很多字符组成的。我们后面会在一个教程中深入学习字符串。 下面编写一个使用字符串的程序。

package main

import (

"fmt"

)

func main() {

first := "Naveen"

last := "Ramanathan"

name := first +" "+ last

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

}

上面程序中,first 赋值为字符串 "Naveen",last 赋值为字符串 "Ramanathan"。+ 操作符可以用于拼接字符串。我们拼接了 first、空格和 last,并将其赋值给 name。上述程序将打印输出 My name is Naveen Ramanathan。

还有许多应用于字符串上面的操作,我们将会在一个单独的教程里看见它们。

类型转换

Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。我们通过一个例子说明这意味着什么。

package main

import (

"fmt"

)

func main() {

i := 55 //int

j := 67.8 //float64

sum := i + j //不允许 int + float64

fmt.Println(sum)

}

上面的代码在 C 语言中是完全合法的,然而在 Go 中,却是行不通的。i 的类型是 int ,而 j 的类型是 float64 ,我们正试图把两个不同类型的数相加,Go 不允许这样的操作。如果运行程序,你会得到 main.go:10: invalid operation: i + j (mismatched types int and float64)。

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

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) // 若没有显式转换,该语句会报错

fmt.Println("j", j)

}

在第 9 行,i 转换为 float64 类型,接下来赋值给 j。如果不进行类型转换,当你试图把 i 赋值给 j 时,编译器会抛出错误。

本文如果对你有帮助,请点赞收藏《go语言入门教程05 类型》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(2)
  1. 斜~陽丅45嶶笑2024-01-04 13:38斜~陽丅45嶶笑[澳门网友]203.56.254.193
    感谢分享,学习了很多关于Go语言类型的知识,期待更多的教程!
    顶5踩0
  2. 琉璃阁主2023-12-24 10:44琉璃阁主[火星网友]202.12.1.4
    这个教程真的太棒了,讲解很清晰,对于刚接触Go语言的人来说非常友好。
    顶3踩0
相关阅读
go语言入门教程02 Go基础入门

go语言入门教程02 Go基础入门

...会端茶倒水的人。##2.2、变量及其定义###2.2.1什么是数据类型作为牛逼的人类很容易就能区出什么是数字什么是文字,但计算机却不能,某些方面就和傻子一样,需要你清清楚楚明明白白的告诉它,1是数字,“隔壁老王”是文字...

2013-09-02 #经典句子

自学文员入门教程

自学文员入门教程

去网上看一些基础入门的教程,很多都是不用钱的。要看您是做什么文员,像一般的普通的文员的话,工作很简单,就是比较繁琐,小事情多。文员有很多种,有前台文员,办公室文员,跟单文员,生产文员差不多就这些!不管...

2009-11-17 #经典句子

Python入门基础解答条件判断语句和循环语句的新手使用教程

Python入门基础解答条件判断语句和循环语句的新手使用教程

无论什么语言都不会缺少条件判断语句和循环语句。我们日常中也有条件判断和循环,条件判断(明天如果下雨就不出门,如果晴天就出门。);循环(上学朗读课文,老师说:把文章的第几段落读三遍,重复一遍又一遍。)条...

2023-08-31 #经典句子

Go 语言中无心插柳柳成荫的接口和无为而治的空接口

Go 语言中无心插柳柳成荫的接口和无为而治的空接口

...编程规范的另外一种风格规范.这种规范常被视为是鸭子类型 duck typing --- "当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称为鸭子."在这种规范中并不关心结构体对象是什么类型或者说到底是不...

2023-08-10 #经典句子

go语言底层数据结构之map解析

go语言底层数据结构之map解析

go语言中map类型首先我们来看一段代码:大家想下程序会输出什么?如果go语言是传递引用的话,那输出应该是false,但是实际输出是true,fn内部申请的map[int][int]不影响外部m,那此时我们就要问:如果map不是引用类型,那map是什...

2007-05-09 #经典句子

「收藏学习」最新 Go 语言学习路线图!

「收藏学习」最新 Go 语言学习路线图!

...阶高级 Go 语言工程师,还需要通关以下的知识点。数据类型方面:基于底层数组的切片;用来传递数据的通道;作为一等类型的函数;可实现面向对象的结构体;能无侵入实现的接口。在语法方面:异步编程神器go语句;函数的...

2023-12-13 #经典句子

「GCTT 出品」你所不知道的 Go 语言的一些令人惊叹的优点

「GCTT 出品」你所不知道的 Go 语言的一些令人惊叹的优点

...单可用的API,并做出了最小的假设。你可以将其用于不同类型的测试,分析,甚至提供可执行的代码示例。它开箱即用,能够生成了 CI 友好的输出,使用方法通常和运行 go test 一样简单。当然,它也支持高级功能,如并行运行...

2019-02-21 #经典句子

面向对象的语言

面向对象的语言

...80年代后期在ISE公司开发的,它的主要特点是全面的静态类型化、有大量的开发工具、支持多继承。1、Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具...

2017-07-18 #经典句子