1.go语言数据类型
1.整型
-
整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64。
-
其中,uint8 就是我们熟知的byte 型,int16 对应C语言中的short 型,int64 对应C语言中的long 型
类型 |
描述 |
uint8 |
无符号 8位整型 (0 到 255) |
uint16 |
无符号 16位整型 (0 到 65535) |
uint32 |
无符号 32位整型 (0 到 4294967295) |
uint64 |
无符号 64位整型 (0 到 18446744073709551615) |
int8 |
有符号 8位整型 (-128 到 127) |
int16 |
有符号 16位整型 (-32768 到 32767) |
int32 |
有符号 32位整型 (-2147483648 到 2147483647) |
int64 |
有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
-
特殊整型
类型 |
描述 |
uint |
32位操作系统上就是uint32 ,64位操作系统上就是uint64
|
int |
32位操作系统上就是int32 ,64位操作系统上就是int64
|
uintptr |
无符号整型,用于存放一个指针 |
-
注意: 在使用int 和 uint 类型时,不能假定它是32位或64位的整型,而是考虑int 和uint 可能在不同平台上的差异。
-
注意事项 获取对象的长度的内建len() 函数返回的长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用int 来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int 和 uint 。
-
Println & Printf 区别
package main
import "fmt"
//基本数据类型
func main() {
//十进制打印为二进制
n := 10
fmt.Printf("%b\n", n)
//十进制打印十进制
fmt.Printf("%d\n", n)
//八进制
m := 075
fmt.Printf("%d\n", m)
fmt.Printf("%o\n", m)
//十六进制
f := 0xff
fmt.Println(f)
fmt.Printf("%x\n", f)
}
//%b 二进制,%o 八进制 %x十六进制
2.浮点型:
-
Go语言支持两种浮点型数:float32 和float64 。
-
float32 的浮点数的最大范围约为 3.4e38 ,可以使用常量定义:math.MaxFloat32 。 float64 的浮点数的最大范围约为 1.8e308 ,可以使用一个常量定义:math.MaxFloat64 。
-
示例:
- 打印浮点数时,可以使用
fmt 包配合动词%f ,代码如下
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("%f\n", math.Pi)//3.141593
fmt.Printf("%.2f\n", math.Pi)//3.14
}
3.复数
4.布尔值:
- 只有true,false(默认) 没有1,0之分
- 注意:
- 布尔类型变量的默认值位false
- Go语言中不允许将整型强制转换位布尔值
- 布尔型无法参与数值运算,也无法与其他类型进行转换。
package main
import (
"fmt"
"math"
)
//基本数据类型
func main() {
//十进制打印为二进制
n := 10
fmt.Printf("%b\n", n)
//十进制打印十进制
fmt.Printf("%d\n", n)
//八进制
m := 075
fmt.Printf("%d\n", m)
fmt.Printf("%o\n", m)
//十六进制
f := 0xff
fmt.Println(f)
fmt.Printf("%x\n", f)
//uint 8
var age uint8 //0~255
age = 255
fmt.Println(age)
//浮点数
fmt.Println(math.MaxFloat32)
fmt.Println(math.MaxFloat64)
//布尔值
var a bool
fmt.Println(a)
a = true
fmt.Println(a)
//字符串
s1 := "hello beijing"
s2 := "你好 北京"
fmt.Println(s1, s2)
//打印 一个路径c:\code\go.exe
fmt.Println("c:\\code\\go.exe")
fmt.Println("\t制表符\n换行符")
s3 := `
多行字符串
两个反引号内容
会原样输出\n\t
`
fmt.Println(s3)
}
5.字符串
- Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用
UTF-8 编码。 字符串的值为双引号(") 中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:
- 字符串转义符:
转义符 |
含义 |
\r |
回车符(返回行首) |
\n |
换行符(直接跳到下一行的同列位置) |
\t |
制表符 |
\' |
单引号 |
\" |
双引号 |
\\ |
反斜杠 |
package main
import (
"fmt"
"strings"
)
//字符串常见操作
func main() {
//求字符串长度
s := "hello"
fmt.Println(len(s))
s2 := "hello中国"
fmt.Println(len(s2))
//拼接字符串
fmt.Println(s + s2)
s3 := fmt.Sprintf("%s - %s", s, s2)
fmt.Println(s3)
//字符串的分割
s4 := "how do you do"
fmt.Println(strings.Split(s4, " "))
//判断是否包含
fmt.Println(strings.Contains(s4, "do"))
//判断前缀
fmt.Println(strings.HasPrefix(s4, "how"))
//判断后缀
fmt.Println(strings.HasSuffix(s4, "how"))
//判断子串的位置
fmt.Println(strings.Index(s4, "do"))
//最后子串出现的位置
fmt.Println(strings.LastIndex(s4, "do"))
//join
s5 := []string{"how", "do", "you", "do"}
fmt.Println(s5)
fmt.Println(strings.Join(s5, "+"))
}
-
byte和rune区别
- byte:给存储ascii码类型起的别名
- rune:给存储unicode码类型起的别名
package main
import "fmt"
//字符
func main() {
//byte unit8的别名 ASCII码
//rune int32的别名
var c1 byte = 'c'
var c2 rune = 'c'
fmt.Println(c1, c2) //99 99
// %T 输出值的类型
fmt.Printf("c1:%T c2:%T\n", c1, c2) //c1:uint8 c2:int32
s := "hello中国"
for i := 1; i < len(s); i++ {
fmt.Printf("%c\n", s[i]) //按照索引遍历字符串。中文占好几个字节会出现乱码。
}
// %c 输出Unicode的字符
for _, r := range s {
fmt.Printf("%c\n", r) //按字符循环不会出现乱码
}
}
练习题:
题目:百元百鸡,一百元钱买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3个。
解题思路 先找出100元最多可以买多少只鸡,再通过条件,找出符合要求的正确数字
package main
import "fmt"
func main() {
for i := 0; i <= 20; i++ {
for t := 0; t <= 33; t++ {
k := 100 - i - t
if i*5+t*3+k/3 == 100 && k%3 == 0 {
fmt.Println(i, t, k)
}
}
}
}
- 修改字符串:
- 修改字符串,需要先将它转换成[]rune或byte,再转换string,并复制给字节数组。
func main() {
s1 := "hello"
bytes1 := []byte(s1)
bytes1[0] = 'H'
// Hello
fmt.Println(string(bytes1))
s2 := "你好"
runes2 := []rune(s2)
runes2[0] = '不'
// 不好
fmt.Println(string(runes2))
}
|
请发表评论