Golang的数据类型
- 基本数据类型
- 数值型
- 整数类型: int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte
- 浮点数类型: float32、float64
- 字符型(没有单独的字符型,使用byte来保存单个的字符)
- 布尔型 bool
- 字符串 string
- 派生/复杂数据类型
- 指针
- 数组
- 结构体
- 管道
- 函数
- 切片
- 接口
- map
进制和进制转换
1.二进制转十进制
二进制: 1101
1*2^3 + 1*2^2 + 0*2^1 + a*2^0
= 8 + 4 + 0 + 1 = 13
2. 十进制转二进制
十进制 13
2 | 13
——————
2 | 6 1
——————
2 | 3 0
——————
2 | 1 1
_____
0 1
1101
package main
import "fmt"
func main() {
var a int = 10
fmt.Printf("%d\n", a)
fmt.Printf("%b\n", a)
var b = 075
fmt.Printf("%d\n", b)
fmt.Printf("%o\n", b)
f := 0xff
fmt.Printf("%d\n", f)
fmt.Printf("%x\n", f)
}

整数类型
类型 有无符号 占用存储空间 表数范围
int8 有 1字节 -2^7 ~ 2^7 - 1
int16 有 2字节 -2^15 ~ 2^15 - 1
int32 有 4字节 -2^31 ~ 2^31 - 1
int64 有 8字节 -2^63 ~ 2^63 - 1
类型 有无符号 占用存储空间 表数范围
uint8 有 1字节 0 ~ 255
uint16 有 2字节 0 ~2^16 - 1
uint32 有 4字节 0 ~ 2^32 - 1
uint64 有 8字节 0 ~ 2^64 - 1
- 特殊类型

package main
import (
"fmt"
"math"
)
func main() {
var age uint8 = 255
fmt.Println(age)
fmt.Println(math.MaxFloat32)
fmt.Println(math.MaxFloat64)
}

布尔值
bool类型声明的,只有2个值 true和false
- 注意:
- 默认值false
- Go语言不允许将整型强制转换成布尔型
- 布尔型无法参与数值运算,也无法与其它类型进行转换
package main
import (
"fmt"
)
func main() {
var a bool
fmt.Println(a)
a = true
fmt.Println(a)
}

字符串
- Go 语言里的字符串的内部实现使用
UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符
package main
import (
"fmt"
"strings"
)
func main() {
a := "hello world"
b := "hello 沫沫"
fmt.Println(a)
fmt.Println(b)
fmt.Println("c:\\code\\t.exe")
fmt.Println("\t制表符\n换行符")
s := `
多行字符串
\t
\n
`
fmt.Println(s)
s1 := "hello"
fmt.Println(len(s1))
s2 := "hello 沫沫"
fmt.Println(len(s2))
fmt.Println(s1 + s2)
s3 := fmt.Sprintf("%s - %s", s1, s2)
fmt.Println(s3)
s4 := "how do you do"
fmt.Println(strings.Split(s4, " "))
fmt.Printf("%T\n", 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"))
s5 := []string{"how", "do", "you", "do"}
fmt.Println(strings.Join(s5, "-"))
}

字符
- 组成字符串的每个元素称之为
字符
''定义字符
- 字符的分类
- byte: uint8的别名 -> 只能表示常见的 ASCII码
- rune: int32的别名 -> 中文类的就要用这种的了
package main
import (
"fmt"
)
func main() {
var c1 byte = 'c'
var c2 rune = 'c'
fmt.Println(c1, c2)
fmt.Printf("c1:%T c2:%T\n",c1, c2)
s := "hello 小白"
for i:=0; i < len(s); i++ {
fmt.Printf("%c\n", s[i])
}
for _, r := range s {
fmt.Printf("%c\n", r)
}
}
