值类型:基本数据类型int系列,float系列,bool,string,数组,结构体struct。
引用类型:指针,切片slice,map,interface,管道chan等都是引用类型
基本数据类型
整型
两类
有符号整数
int8、int16、int32、int64
无符号整数
uint8、uint16、uint32、uint64
特别的整型:uint,int,uintptr
前两种类型:随着操作系统是多少位,就是多少位的类型
最后一个为无符号整型:用于存放一个指针
数字字面整型:
fmt.Printf("%__", 变量名)
八进制:%o
十六进制:%x |%X
二进制:%b
十进制:%d
八进制以0开头
十六进制0x开头
浮点数
float32
float64
复数
complex64
complex128
布尔值
true
false
字符串转义符
字符串
utf-8
s1 := "你好"
fmt.Println(s1)
//字符串转义符
fmt.Println("str = \"E:\\GOPROJECT\\go.exe\"")
//多行字符串
s2 := `第一行
第二行
第三行`
fmt.Println(s2)
字符串常用操作
长度:len(str)
拼接:+,fmt.Sprintf
分割:strings.Split
是否包含:strings.contains(str,"xxx")
开头:strings.HasPrefix(str, "xx")
结尾:stings.HasSuffix(str,"d")
首次出现位置:strings.Index(str,"x")
最后:strings.LastIndex(str,"x")
出现次数:stings.Count
重复:strings.Repeat(str,2)
转大写:strings.ToLower()
小写:strings.ToUpper()
链接切片Join(str,"-")
去掉字符串首/尾部指定的字符:TrimLeft(str,"x"):TrimRight(str,"x")
去掉收尾的空格:TrimSpace(str2)
str2 := " hello world tt"
//去掉字符串首尾指定的字符
fmt.Println(strings.Trim(str2,"t")) // hello world
fmt.Println(strings.Trim(str2,"ttt")) //注意相同的字母即时数量比str的多也能去掉 hello world
fmt.Println(strings.Trim(str2," ")) //去除首尾空格hello world tt
fmt.Println(strings.Trim(str2,"b")) //没有b时不报错返回原字符串 hello world tt
字符
byte---uint8
rune
//遍历字符串
func traversalString() {
s := "hello沙河"
for i := 0; i < len(s); i++ { //byte
fmt.Printf("%v(%c)", s[i], s[i])
}
fmt.Println()
for _, r := range s { //rune
fmt.Printf("%v(%c)", r, r)
}
104(h)101(e)108(l)108(l)111(o)230(æ)178(²)153(NUll)230(æ)178(²)179(³)
104(h)101(e)108(l)108(l)111(o)27801(沙)27827(河)
fmt.Println()
}
因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。
字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。
修改字符串
字符串是不可修改的,任何修改,都会重新分配内存
func changeString() {
s1 := "big"
byteS1 = []byte(s1)
byteS1[0]:= 'p'
fmt.Println(sting(byteS1))
s2 := "白萝卜"
runeS2 := []rune(s2)
runeS2[0] = '红'
fmt.Println(string(runeS2))
}
类型转换
只有强制类型转换
T(表达式) T:要转换的类型 表达式:变量,复杂算子,函数返回值
//类型转换
func sqrtDemo() {
var a, b = 3, 4
var c int
// math.Sqrt():开方 参数为浮点型 强制类型装换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Printf("%d", c)
}