Loading

Golang基本数据类型

Go语言中每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。

整型

整型可以分为以下几种:

类型 描述
uint8 无符号8位整型
uint16 无符号16位整型
uint32 无符号32位整型
uint64 无符号64位整型
int8 有符号8位整型
int16 有符号16位整型
int32 有符号32位整型
int64 有符号64位整型

其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。

特殊整型:

类型 描述
uint 32位操作系统上就是uint32,64位操作系统上就是uint64
int 32位操作系统上就是int32,64位操作系统上就是int64
uintptr 无符号整型,用于存放一个指针

浮点型

Go语言中支持两种精度的浮点数:float32float64

类型 描述
float32 32位浮点数
float64 64位浮点数
  • float32的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32
  • float64的浮点数的最大范围约为1.8e308,可以使用常量定义:math.MaxFloat64
package main
import "fmt"
func main() {
	f1 := 1.23
    // go语言中的小数默认都是float64类型
	fmt.Printf("%T\n", f1) // float64
	
	f2 := float32(1.23)
	fmt.Printf("%T\n", f2)  //float32
}

复数

go语言有两种复数类型:complex64complex128

package main
import "fmt"
func main() {
	var c1 complex64
	c1 = 1 + 2i
	var c2 complex128
	c2 = 2 + 3i

	fmt.Println(c1)
	fmt.Printf("%T\n", c1)
	fmt.Println(c2)
	fmt.Printf("%T\n", c2)
}

布尔型

go语言中的布尔类型有两个值truefalse

  • 布尔类型变量的默认值为false
  • go语言不允许将整型强制转为布尔型
  • 布尔型无法参与数值运算,也无法与其他类型进行转换
package main
import "fmt"
func main() {
	b1 := true
	fmt.Printf("%T\n", b1)
    
	//默认false
	var b2 bool
	fmt.Printf("%v\n", b2)  //false
}

字符串型

go语言中的字符串使用UTF-8编码,英文占用1个字符,汉字占3个字符,采用双引号或者反引号包裹。字符串是不可变的数据类型。

定义字符串:

var str1 string = "hello"

定义多行字符串:

使用反引号可以实现原样输出

package main
import "fmt"
func main() {
	str2 := `
		hello
			world
		golang
	`
	fmt.Println(str2)
}

使用 + 完成字符串拼接:

package main
import (
	"fmt"
)
func main(){
	str := "hello" + "world"
	str += "tom"
	fmt.Println(str)  // helloworldtom
}

使用 fmt.Sprintf 完成字符串拼接:

package main
import (
	"fmt"
)
func main(){
	name1 := "tom"
	name2 := "jerry"
	str1 := fmt.Sprintf("%s%s",name1, name2)
	fmt.Println(str1)  //tomjerry
}

获取字符串长度:

使用内置函数len()可以获取字符串的长度

package main
import (
	"fmt"
)
func main(){
	str1 := "hello"
	fmt.Println(len(str1))  // 5
}

字符串转义符:

转义 含义
\r 回车符
\n 换行符
\t 制表符
\' 单引号
\" 双引号
\ 反斜杠

示例:

package main
import (
	"fmt"
)
func main(){
	fmt.Println("str:=\"c:\\aa\\bb.test\"")  // str:="c:\aa\bb.test"
}

byte和rune类型

字符串中的每个元素被称为字符。

go中的字符有以下两种:

  • byte类型:占用一个字节,表示ACSII表中的一个字符,本质上就是uint8类型。
  • rune类型:占用四个字节,表示的是一个UTF-8字符,用来处理中文等复合字符,本质上就是 uint32类型。

由于字符串是不可变类型,我们可以将其转换成[]rune或者[]byte ,再转换成string,完成修改功能。

package main
import (
	"fmt"
)
func main(){
	name1 := "tom"
	// 把字符串强制转换成一个rune切片
	name2 := []rune(name1)
	name2[0] = 'j'
	// 把rune切片强制转换成字符串
	fmt.Println(string(name2))  // jom
}

数据类型转换

go语言中只有强制类型转换,没有隐式类型转换。

语法:

v1 := T(v)
  • T:需要转换的数据类型
  • v:需要转换的变量
  • v1:转换成 T 类型后的变量
package main
import (
	"fmt"
)
func main(){
	var num1 int32 = 100

	var num2 float32 = float32(num1)
	fmt.Printf("%T\n", num2)  // float32
	fmt.Printf("%v\n", num2)  //100
}
posted @ 2021-09-02 20:28  charlatte  阅读(251)  评论(0编辑  收藏  举报