前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言中常用的基本数据类型

Go语言中常用的基本数据类型

作者头像
极客运维圈
发布2020-03-23 16:12:40
1.3K0
发布2020-03-23 16:12:40
举报
文章被收录于专栏:乔边故事乔边故事

整型

  • 有符号
    • int8
    • int16
    • int32
    • int64
  • 无符号
    • uint8
    • uint16
    • uint32
    • uint64
  • 特殊整型
    • uint,32位操作系统就是uint32,64位操作系统就是uint64
    • int,32位操作系统就是int32,64位操作系统就是int64
    • uintptr,无符号整型,用于存放指针

★注意:在使用intuint类型时,不能假定它是32位或64位的整型,而是考虑intuint可能在不同平台上的差异。 ”

进制
代码语言:javascript
复制
// 程序入口
func main() {
	// age = "17"
	// fmt.Println("Hello World")
	// fmt.Print("isOK")
	// fmt.Printf("Age: %s", age)\n
	var a1 = 10
	fmt.Printf("十进制:%d\n", a1)
	fmt.Printf("二进制:%b\n", a1)
	fmt.Printf("八进制:%o\n", a1)
	fmt.Printf("十六进制:%x\n", a1)

	// 直接定义八进制
	a2 := 077
	fmt.Printf("直接声明八进制:%d\n", a2)
	// 直接定义十六进制
	a3 := 0x12321
	fmt.Printf("直接声明十六进制:%d\n", a3)
}

浮点型

Go语言支持两种浮点型:

  • float32,使用常量math.MaxFloat32来定义;
  • float64,使用常量math.MaxFloat64来定义;

打印浮点数,可以用fmt包配合%f ,如下:

代码语言:javascript
复制
package main
import (
        "fmt"
        "math"
)
func main() {
        fmt.Printf("%f\n", math.Pi)
        fmt.Printf("%.2f\n", math.Pi)
}

布尔类型

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)false(假)两个值。

注意:

  1. 布尔类型变量的默认值为false
  2. Go 语言中不允许将整型强制转换为布尔型.
  3. 布尔型无法参与数值运算,也无法与其他类型进行转换。

复数

复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。如下:

代码语言:javascript
复制
func main(){
    var c1 complex64
	c1 = 1 + 2i
	var c2 complex128
	c2 = 2 + 3i
	fmt.Println(c1)
	fmt.Println(c2)
}

字符串

Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。Go 语言里的字符串的内部实现使用UTF-8编码。字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:

代码语言:javascript
复制
s1 := "Joker"
s2 := "HelloWorld"

如果是多行字符串,则用反引号,它里面的内容会原样输出,比如:

代码语言:javascript
复制
s1 := `
	你好,
	欢迎光临。
`
字符

组成每个字符串的元素叫做字符字符'' 括起来,如下:

代码语言:javascript
复制
s1 := 'H'
s2 := '你'

Go语言中的字符有两种:

  • uint8类型,或者叫byte型,代表ASCII 码的一个符号;
  • rune类型,代表一个UTF-8 符号;

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

代码语言:javascript
复制
package main

import "fmt"

func main() {
	s1 := "Hello World,你好啊!"
	// fmt.Printf(s1)
	// 遍历字符串,Byte类型
	for i := 0; i < len(s1); i++ {
		fmt.Printf("%v(%c)", s1[i], s1[i])
	}
	fmt.Println()
	// 遍历字符串,rune类型
	for _, r := range s1 {
		fmt.Printf("%v(%c)", r, r)
	}
}

其输出结果如下:

代码语言:javascript
复制
72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)239(ï)188(¼)140()228(ä)189(½)160( )229(å)165(¥)189(½)229(å)149(
)138()239(ï)188(¼)129()
===============================================
72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)65292(,)20320(你)22909(好)21834(啊)65281(!)

从上可以看到,第一种遍历方法是按字节进行遍历的,而对于非英文字母或者数字来说,其占用的并非一个字节,比如中文在UTF-8 编码中就占用3个字节,这时候如果我们按着字节来遍历就会得到第一种结果,这种结果并不是我们想要的。我们就需要采用第二种遍历方式,rune类型用来 表示UTF-8 字符,一个rune字符由一个或者多个字节组成。

字符串转义

特殊字符串需要保持其原生的意义,就需要对其进行转义,常用的如下表:

转义符

含义

\r

回车

\n

换行

\t

制表

\'

单引号

\\

反斜杠

\"

双引号

比如:

代码语言:javascript
复制
package main

import "fmt"

func main() {
	s1 := "\"Hello World\""
	fmt.Printf(s1)
}
字符串的常用操作

方法

作用

len(s)

求长度(是字节的长度)

+或者fmt.Sprintf

字符串拼接

strings.Split

字符串切割

strings.contains

判断字符串中是否包含

strings.HasPrefix,strings.HasSuffix

判断字符串的前缀/后缀(布尔类型)

strings.Index(),strings.LastIndex()

输出子串出现的位置(索引)

strings.Join(a[]string, sep string)

join操作

例子:

代码语言:javascript
复制
package main

import "fmt"
import "strings"

func main() {
	s := "Hello World 你好啊!"
	// 求长度
	fmt.Println(len(s))
	// 字符串拼接
	s1 := "Joker"
	s2 := "你好"
	fmt.Println(s1 + s2)
	s12 := fmt.Sprintf("%s%s", s1, s2)
	fmt.Println(s12)
	// 字符串切割
	sSplit := strings.Split(s, " ")
	fmt.Println(sSplit)
	// 判断字符串是否包含
	fmt.Println(strings.Contains(s, "H"))
	fmt.Println(strings.Contains(s, "L"))
	// 判断字符串的前缀
	fmt.Println(strings.HasPrefix(s, "H"))
	// 判断字符串的后缀
	fmt.Println(strings.HasSuffix(s, "啊"))
	// 判断字串出现的位置
	fmt.Println(strings.Index(s, "H"))
	// 判断子串最后出现的位置
	fmt.Println(strings.LastIndex(s, "o"))
	// join操作
	fmt.Println(strings.Join(sSplit, "-"))
}
字符串的修改

要修改字符串,需要先将其转换成[]rune[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

代码语言:javascript
复制
package main

import "fmt"

func main() {
	s1 := "hello"
	// 1、强制转换
	byteS1 := []byte(s1)
	// 2、进行修改
	byteS1[0] = 'H'
	// 3、强制转换成字符串并打印
	fmt.Println(string(byteS1))

	s2 := "我爱你中国"
	// 1、强制转换
	runeS2 := []rune(s2)
	// 2、修改
	runeS2[3] = '祖'
	// 3、强制转换成字符串并打印
	fmt.Println(string(runeS2))
}

类型转换

Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

强制类型转换的基本语法如下:

代码语言:javascript
复制
T(表达式)

其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乔边故事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 进制
  • 浮点型
  • 布尔类型
  • 复数
  • 字符串
    • 字符
      • 字符串转义
        • 字符串的常用操作
          • 字符串的修改
          • 类型转换
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档