内置类型
一、值类型
1.数值型
整数型:
// unsafe.Sizeof(3)查看占用空间,占用空间不一样,int是根据电脑位数来的
int, int8, int16, int32(rune), int64
uint, uint8(byte), uint16, uint32, uint64
注:
int和uint的区别:取值范围不一样,如int8(-128-127),uint8(0-255)
其中u开头的类型就是指:正整数和零,非u开头的可以是负数
浮点型:
float32:单精度浮点型
float64:双精度浮点型
注:
float32:总长是8,总长度的第九位四舍五入
float64:总长是16,总长度的第十七位四舍五入
虚数型:
complex64, complex128
// complex64:占8个长度,complex128:占16个长度
注:两个浮点数,一个表示实部(real),一个表示虚部(imag)
注意:不允许在整数型_变量和浮点型变量_之间进行运算,这里是变量
b := 20.1
c := 30
fmt.Println(b + c) // 变量,这种不行
fmt.Println(b + 30) // 这种可以
2.字符串类型
string
字符串相关操作接口:
字符串转大写:srings.ToUpper(str string) string
字符串转小写:strings.ToLower(str string) string
根据空格分隔,返回切片 strings.Field(str string) []string
将子串用sep连接起来 strings.Join(s1 []striing, sep string) string
子串出现次数 strings.Count(str string, substr string) int
字符串替换 strings.Replace(s string, old string, new string, n int) string n 为-1 表示全部替换,否则表示替换次数
判断字符串s是否已prefix开头 strings.HasPrefix(s string, prefix string) bool
判断字符串s是否已subffix结尾 strings.HasSuffix(s string, subffix string) bool
3.布尔型
bool:true或false
注:不能用空值(nil)或0等值直接判断
4.数组
array -- 固定长度的数组
注意:数组是个值类型
func TestArr(arr [5]int) {
arr[1] = 1
fmt.Println(arr)
}
func main() {
arr := [5]int{1}
TestArr(arr)
fmt.Println(arr)
}
打印结果:
[1 1 0 0 0] TestArr改变了
[1 0 0 0 0] 原数组没变
二、引用类型
1.slice:切片
func main() {
arr := []int{1,2,3}
TestSlice(arr)
fmt.Println(arr)
}
func TestSlice(arr []int) {
arr[1] = 1
fmt.Println(arr)
}
结果:
[1 1 3]
[1 1 3]
会改变原值
2.map:映射(make看函数章节)
func main() {
map_data := map[string]interface{}{
"name":"zhiliao",
"age":18,
}
TestMap(map_data)
fmt.Println(map_data)
}
func TestMap(map_data map[string]interface{}) {
map_data["name"] = "hallen"
fmt.Println(map_data)
}
结果:
map[age:18 name:hallen]
map[age:18 name:hallen]
会改变原值
3.chan:管道(看并发章节)
初始化方式:
1.var 通道名 chan 数据类型
2.通道名 := make(chan 数据类型)