三、Go语言基础入门——Go数据类型

前言

最近买了两本书准备学习一下Go语言,其中一本是《Go语言高并发与微服务实战》另外一本是《Go Web编程实战派》,第一本是为了深入了解一下Go语言在高并发中的魅力,买第二本的原因是因为刚刚从Java转到Go语言,所以想更快的学习一些工作中可能接触到的Go Web相关的知识。

众所周知,Go语言是Google于2009年开源的一门编程语言,原名GoLanguage也叫Golang。它可以在不损失应用程序性能的情况下极大地降低代码的复杂度。相比较其他编程语言,它具备了简洁、快速、安全、并行、有趣、开源、内存管理、数组安全、编译迅速等等一些列特点。

话不多少,我会先学习《Go Web编程实战派》这本书,跟随我一起走进Go语言学习的海洋吧!!!

Go数据类型

Go语言的基本数据类型分为布尔型、数字类型、字符串类型、复合类型这4种。其中复合类型又分为:数组类型、切片类型、Map类型、结构体类型。Go语言常见的基本数据类型:

类型 说明
布尔型 布尔型的值只可以是常量true或者false。eg:var b bool = true
数字类型 包含以下类型:
uint8:无符号8位整型(0~255)
int8:有符号的8位整型(-128~127)
uint16:无符号16位整型(0~65535)
int16:有符号的16位整型(-32768~32767)
uint32:无符号32位整型(0~429496295)
int32:有符号32位整型(-2147483648~2147483647)
uint64:无符号64位整型(0~188446744073709551615)
int64:有符号64位整型(-9223372036854775808~9223372036854775807)
uint:32或者64无符号整型
int:32或者64有符号整型
float32:1EEE-754 32位浮点型数
float64:1EEE-754 64位浮点型数
complex64:32实数和虚数
complex128:64实数和虚数
byte:和uint8等价的,另外的名称
rune:和int8等价的,另外的名称
uintptr:无符号的整型,用来存放指针
字符串类型 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用的是UTF-8编码标识Unicode文本
复合类型 包含数组类型、切片类型、Map类型、结构体类型

布尔型

布尔型的值只可以是常量true或者false。比如说if和for语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型值

一元操作符(!)对应的逻辑“非”操作,因此当我们使用 !true 的时候它代表的值就是false。

Go语言对于值之间的比较有非常严格的限制,只有两个相同类型的值才可以进行比较。

如果值的类型是接口(interface),这我时候我们必须都要实现相同的接口。

如果其中的一个值是常量,则另外一个值可以不是常量,但是类型必须和该常量的类型保持一致。

如果以上的条件都不满足,则必须在将其中的一个值的类型转换成另外一个值的类型。

布尔类型可以和&&(and)和||(or)操作符结合。如果运算符左边的值已经可以确定整个布尔表达式的值,则运算符右边的值将不在进行求值。

package main

import "fmt"

func main() {
	var language1 string = "java"
	var language2 string = "javascript"
	if language1 == "go" && language2 == "java"  {
		fmt.Println(language1)
	}
}

布尔值并不会隐转换为数字值0或1,反之亦然,必须使用if语句显示的进行转换。

package main

import "fmt"

func main() {
	flag1 := 0
	flag2 := true
	if flag2 {
		flag1 = 1
		fmt.Println(flag1)
	}
}

当我们经常要做这种类型转换的时候,我们可以封装一个函数:

func boolToInt(b bool) int {
	if b {
		return 1
	}
	return 0
}

如果反过来我们需要把数值转化到布尔型,这个时候我们也可以封装一个函数进行操作

func intToBool(i int) bool {
	return i != 0
}

Go语言中绝对不允许将布尔型强制转换为整型,会出现报错(Cannot covert type bool to type int)

数字类型

Go语言中支持整型和浮点型数字,同时原生也支持复数,其中位的运算才用的是补码。

Go语言也有基于架构的类型,例如:int、uint、uintptr。这些类型的长度都是根据运算程序所在的操作系统类型决定的。在32操作系统中,int和uint就是32位(4个字节),在64位操作系统中,他们就都是64位(8字节)

符号 类型和描述
uint8 无符号8位整型(0~255)
int8 有符号的8位整型(-128~127)
uint16 无符号16位整型(0~65535)
int16 有符号的16位整型(-32768~32767)
uint32 无符号32位整型(0~429496295)
int32 有符号32位整型(-2147483648~2147483647)
uint64 无符号64位整型(0~188446744073709551615)
int64 有符号64位整型(-9223372036854775808~9223372036854775807)
uint 32或者64无符号整型
int 32或者64有符号整型
float32 1EEE-754 32位浮点型数
float64 1EEE-754 64位浮点型数
complex64 32位实数和虚数
complex128 64位实数和虚数
byte 和uint8等价的,另外的名称
rune 和int8等价的,另外的名称
uintptr 无符号的整型,用来存放指针

字符串类型

字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用的是UTF-8编码标识Unicode文本。由于UTF-8这个编码占用的字节长度是不确定的,所以在GO语言中,字符串会根据需要占用1~4字节,这个与其他语言是完全不同的(eg:java始终使用2个byte)。

字符串是一种值类型。更深入讲,字符串就是字节的定长数组。

字符串的声明和初始化

声明和初始化而非常容易:

str := "123456"

上述代码已经声明了一个叫str的变量并且给它赋值了”123456“

字符串转义

在Go语言中,字符串的字面量使用英文双引号(“)或者反引号(`)创建。

双引号用来创建可解析的字符串,支持转义但是不能用来引用多行;

反引号用来创建原生的字符串字面量,可能由多行组成,但是不支持转义,并且可以除反引号之外的所有字符

用双引号来创建可解析的字符串

用反引号创建书写多行消息、html、正则表达式

字符串的连接

虽然Go语言中的字符串是不可变的,但是字符串支持级联操作(+)和追加操作(+=)

package main

import "fmt"

func main() {
	str := "yuliuyun say : "
	str1 := "\"hello zachariah\""


	str2 := str + str1

	str += str1

	fmt.Printf(str + "\n")
	fmt.Print(str2)
}

未完…

你可能感兴趣的:(Go语言,go,编程语言)