Go语言之数据类型

Go语言中,除了常见的整形、浮点型、布尔类型、字符串基本数据类型之外,还包括数组、切片、结构体、函数map、通道等。

基本数据类型

在go中整型分为无符号整型、和有符号整型。按长度分为int8int16int32int64,其对应的无符号整型为uint8uint16uint32uint64

类型说明
int8有符号8位整型,- 2^7 +1到2^7 - 1
int16有符号16位整型,- 2^15 +1到2^15- 1
int32有符号32位整型,- 2^31 +1到2^31 - 1
int64有符号16位整型,- 2^63 +1到2^63 - 1
uint8无符号8位整型,0到2^8 - 1
uint16无符号16位整型,0到2^16 - 1
uint32无符号32位整型,0到2^32 - 1
uint64无符号64位整型,0到2^64 - 1

注意啊:在32位操作系统中,uintuint32intint32;在64位操作系统中, uintuint64intint64uintptr为无符号整型,其作用在于存放一个指针。因此,可能会在不同的编译平台中使用程序时,不要使用intuint这两个数据类型,能够防止文件的结构不会受平台限制。

在Go中,定义整型的数据类型时可以使用数字字面量来定义数字。比如num := 0b0101,其代表了二进制的101,十进制的5。八进制以0开头,十六进制以0x开头,示例如下:

package main

import "fmt"

func main(){
	//十进制
	var num10 int = 10
	fmt.Printf("%d\n", num10)	//十进制输出为10
	fmt.Printf("%b\n", num10)	//二进制输出为1010

	//八进制
	var num8 int = 077
	fmt.Printf("%o\n",num8)		//77

	//十六进制
	var num16 int = 0xABC123
	fmt.Printf("%x\n", num16)	//ABC123

浮点型

Go语言的浮点型分为两种:float32float64定义时float默认为float64
其中float32的最大范围为3.4e38,可使用math.MaxFloat32来定义。float64的最大范围为1.8e308,可以使用math.MaxFloat64来定义。关于其打印示例:

package main

import "fmt"
import "math"

func main(){
	fmt.Printf("%f\n", math.Pi)
	fmt.Printf("%2f\n", math.Pi)
}

复数

在go中复数分为complex64和complex128。
复数拥有实部和虚部

字符串

在Go中字符串的实现是以UTF8编码,字符串的值为双引号"中的内容。

字符串转义符

Go语言中常见的转义符如下所示:

转义符说明
\r回车符,返回到行首
\n换行符(跳到下一行的同列的位置)
\t制表符
单引号
"双引号
\反斜杠

示例:

package main

import "fmt"

func main(){
	fmt.Println(" dir = \"C:\\Go\\src\\github\\string.exe\" ")
}

多行字符串

在Go中定义多行字符串时,需要用到反引号符 (`) ,示例:

package main

import "fmt"

func main(){
	str := ` 第一行
	第二行
	第三行
	`
	fmt.Println(str)
}

在反引号间的换行将会被视作字符串的换行,文本会原样输出;同时所有的转义字符也会失效,也会在文本中原样输出。

字符串的操作

Go找那个字符串可求长度、拼接、分割、包含判断、前后缀判断、子串出现的位置等等。说明如下:

操作函数
求长度len(str)
拼接字符串+ 或 fmt.Sprintf
分割strings.Split
判断是否包含strings.Contains
前\后缀判断strings.HasPrefix 、strings.HasSuffix
子串出现的indexstrings.Index、strings.LastIndex

byte和rune

字符是字符串的每一个元素。字符可以通过单引号(’’)定义,示例:

var s1 := 'a'
var s2 := '张'
var s3 := `진`

在Go中字符分为两类:

  1. byte类型,也就是uint8类型,代表了一个ASCII码字符。
  2. rune类型,代表一个UTF8字符,其实际为一个int32字符。

当我们在使用中文、韩文等其他复合字符的时候,就需要用到rune类型。
在我们遍历复合字符串的时候,因为UTF8由3~4个字节组成,所以不能像英文字符串一样按照字节去遍历字符串。字符串的底层为一个byte数组,所以可以和[]byte类型相互转换。遍历含中文的字符串示例:

package main

import "fmt"

func traverStr(str string){
	for _, s := range str{ //rune
	fmt.Printf("%v(%c) ", s, s)
	}
	//输出:104(h) 101(e) 108(l) 108(l) 111(o) 20013(中) 22269(国)
	fmt.Println()
}

func main(){
	s := "hello中国"
	traverStr(s)
}

字符串的修改

修改字符串时先要将其转换成[]rune[]byte,完成后再转换为string。在过程中会重新分配内存并且复制字节数组
示例:

func changeStr(){
	str1 := "hello"
	byteStr1 := []byte(str1)
	byteStr1[1] = 'o'
	fmt.Println(string(byteStr1))

	str2 := "小米"
	runeStr2 := []rune(str2)
	runeStr2[0] = '大'
	fmt.Println(string(runeStr2))
}

类型转换

在Go语言中只存在强制类型转换,不存在隐式类型转换。
示例:

func test(){
	var c,k = 3, 4
	var x int
	//math.Sprt()的参数为float64类型
	x = int(math.Sprt(float64(c*c + k*k)))
	fmt.Println(x)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值