在Go语言中经常使用的基本数据类型有以下几种:数组
注意:在使用
int
和uint
类型时,不能假定它是32位或64位的整型,而是考虑int
和uint
可能在不一样平台上的差别。bash
// 程序入口 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语言支持两种浮点型:ide
打印浮点数,能够用fmt包配合%f
,以下:函数
package main import ( "fmt" "math" ) func main() { fmt.Printf("%f\n", math.Pi) fmt.Printf("%.2f\n", math.Pi) }
Go语言中以bool
类型进行声明布尔型数据,布尔型数据只有true(真)
和false(假)
两个值。性能
注意:ui
false
。复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。以下:编码
func main(){ var c1 complex64 c1 = 1 + 2i var c2 complex128 c2 = 2 + 3i fmt.Println(c1) fmt.Println(c2) }
Go语言中的字符串以原生数据类型出现,使用字符串就像使用其余原生数据类型(int、bool、float3二、float64 等)同样。 Go 语言里的字符串的内部实现使用UTF-8
编码。 字符串的值为双引号(")
中的内容,能够在Go语言的源码中直接添加非ASCII码字符,例如:操作系统
s1 := "Joker" s2 := "HelloWorld"
若是是多行字符串,则是用反引号,它里面的内容会原样输出,好比:指针
s1 := ` 你好, 欢迎光临。 `
组成每一个字符串的元素叫作字符
,字符
用''
括起来,以下:code
s1 := 'H' s2 := '你'
Go语言中的字符有两种:
ASCII
码的一个符号;UTF-8
符号;当须要处理中文、日文或者其余复合字符时,则须要用到rune
类型。rune
类型实际是一个int32
。
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。
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) } }
其输出结果以下:
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 | 制表 |
\' | 单引号 |
\\ | 反斜杠 |
\" | 双引号 |
好比:
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操做 |
例子:
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
。不管哪一种转换,都会从新分配内存,并复制字节数组。
package main import "fmt" func main() { s1 := "hello" // 一、强制转换 byteS1 := []byte(s1) // 二、进行修改 byteS1[0] = 'H' // 三、强制转换成字符串并打印 fmt.Println(string(byteS1)) s2 := "我爱你中国" // 一、强制转换 runeS2 := []rune(s2) // 二、修改 runeS2[3] = '祖' // 三、强制转换成字符串并打印 fmt.Println(string(runeS2)) }
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
强制类型转换的基本语法以下:
T(表达式)
其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.