一、整数类型
按照长度分为: int8 、int16 、int32 、int64
对应的无符号整型: uint8、uint16、uint32、uint64
获取对象的长度用len()
进制
十进制:
var a int = 10
fmt.Printf("%d \n",a) //10
fmt.Printf("%b \n",a) //1010 占位符%b表示二进制
八进制:
var b int = 077
fmt,Printf("%o \n",c) //ff
十六进制:
var c int = oxff
fmt.Printf("%x \n",c) //ff
fmt.Printf("%X \n",c) //FF
内存地址:
fmt.Printf("%p \n",&a) //0x00004c080 占位符%p表示十六进制的内存地址
注:不同int类型之间不能转换相加减,需要转换成相同类型
interface可以转换任意类型
func test() { var a interface{} //{}表示空的interface var b int = 100 var c float32 = 1.2 var d string = "hello" a = b fmt.Println("a=", a) //100 a = c fmt.Println("a=", a) //1.2 a = d fmt.Println("a=", a) //hello }
二、浮点型
类型:float32和float64 不定义默认是0 浮点数不够精确,可以把浮点数先*100或*1000编程整数进行运算 占位符输出%f
三、布尔类型
类型:True和Flase 默认Flase go语言不能将整型强制转换成布尔型 布尔型无法参与数值运算,也无法与其他类型转换 用%t表示格式化
四、String类型
定义:以原生数据类型出现内部实现使用utf-8
表示字符串:
“ ” //双引号输出会出现转义符的意义
·· //反引号会忽视转义符的意义
字符串常用转义符:
\r:回车符(返回行首) \n:换行符(直接跳到下一行的同列位置) \t:制表符 \':单引号 \":双引号 \:反斜杠
字符串常用方法
+或fmt.Sprintf //拼接字符串 (1) c = c+c fmt.Printf("c = %s\n",c) (2) c = fmt.Sprintf("%s%s",c,c) fmt.Printf("c=%s\n",c) strings.Split //分割 import "strings" func test(){ ip := "10.10.10.1;192.168.1.1" ipArray := strings.Split(ip,";") fmt.Printf("first ip :%s\n",ipArray[0]) fmt.Printf("second ip :%s\n",ipArray[1]) } strings.contains //判断是否包含 import "strings" func test(){ ip := "10.10.10.1;192.168.1.1" result := strings.Contains(ip,"10.10.10.1") fmt.Println(result) //返回布尔值 } strings.HasPrefix/HasSuffix //判断前缀和后缀 import "strings" func test(){ str := "https://www.baidu.com" if strings.HasPrefix(str,"http"){ fmt.Println("str is http url") }else{ fmt.Println("str is not http url") } var last bool last = strings.HasSuffix(str,"com") fmt.Printf(last) //返回bool } strings.Index()/LastIndex() //子串出现的位置 import "strings" func test(){ str := "https://www.baidu.com" index := strings.Index(str,"baidu") //baidu第一次出现的位置 fmt.Printf("str is index:%d\n",index) index = strings.LastIndex(str,"baidu") //baidu最后一次出现的位置 fmt.Printf("baidu last index:%d\n",index) } strings.Join(a[]string,sep string) //join操作,把一个数组每一个元素根据分隔符为基准重新组成字符串 func test(){ var strArr []string = []string{"10.10.10.1","11.11.11.2","12.12.12.3"} resultStr = strings.Join(strArr,";") fmt.Printf("result=%s\n"mresultStr) //输出result=10.10.10.1;11.11.11.2;12.12.12.3 }
五、字符类型
定义:组成字符串的元素叫做字符,字符用' '表示,分别有uint8(byte)类型,代表一个ASCII码的字符;rune类型,代表一个UTF-8字符
package main import "fmt" func main(){ s1 := "Golang" c1 := 'G' fmt.Println(s1,c1) //Golang 71 字符的编码 s2 := "中国" c2 := '中' //汉字表示3位 fmt.Println(s2,c2) //中国 20013 s3 := "Go语言" fmt.Println(len(s3)) //11 一个字符1字节,中文3字节 for i := 0;i<len(s3);i++{ //bytes中文乱码 fmt.Printf("%c\n",s3[i]) //%c打印字符 } for k,v := range s3{ //可打印中文字符 fmt.Printf("%d,%c\n",v) //k表示字节的索引数 } }
强制转换字符串和utf-8
func main(){ s1 := "big" bytes1 := []byte(s1) //将字符串强制转换成字节数组类型 fmt.Println(bytes1) //[98 105 103]分别对应了各自的字符 bytes1[0] = 'p' fmt.Println(string(bytes1)) //[112 105 103] s1 = string(bytes1) //将字节数组强制转换成字符串类型 fmt.Println(s1) s2 := "大白菜" runes2 := []rune(s2) runes2[0] ='小' fmt.Println(string(runes2),len(runes2)) } //只有强制类型转换,不能重新赋值
字符串反转操作
//英文 func main(){ s1 := "hello" byteArray := []byte(s1) //[h e l l o] //方法1 s2 := "" for i :=len(byteArray)-1;i>=0;i--{ s2 = s2 + string(byteArray[i]) //byteArray[i] --> o l l e h } fmt.Println(s2) //方法2 for i := 0;i<len(byteArray)/2;i++{ byteArray[i],byteArray(len(byteArray)-1-i) = byteArray(length-1-i),byteArray[i] } fmt.Println(string(byteArray)) } //中文 func main(){ str := "中文" r []rune := []rune(str) for i := 0;i<len(r)/2;i++{ tmp := r[len(str)-i-1] r[len(str)-i-1] = r[i] r[i] = tmp } fmt.Println(string(r[i])) }
六、指针
七、Array数组
八、Slic切片
九、Map哈希表
十、Struct结构体
十一、时间和日期
使用time包中的time.Time类型用来表示时间
获取当前时间:
now := time.Now() 获取当前时间
now := time.Now().Day()
now := time.Now().Minute()
now := time.Now().Month()
now := time.Now().Year()
格式化:
func main(){ now := time.Now() fmt.Printf("current time:$v\n",now) tear := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Minute() send := now.Second() fmt.Printf("%02d-%02d-%02d-%02d-%02d-%02d", year, month, day, hour, minute, send) }
定时器
func main(){ ticker := time.Tick(5*time.Second) //每5s执行一次其中的函数 for i := range ticker{ fmt.Printf("%v\n",i) 函数() } }
格式化
func main(){ now := time.Now() fmt.Println(now.Format("02/1/2006 15:04")) fmt.Println(now.Format("2006/1/02 15:04")) fmt.Println(now.Format("2006/1/02")) } //格式可以换,时间必须为2006 1 02 15:04
计算程序运行时间
func main(){ start := time.Now().UnixNano() for i := 0;i<10;i++{ time.Sleep(time.Millisecond) } end := time.Now().UnixNano() cost := (end - start)/1000000 //微秒化成秒 fmt.Printf("%vn",cost) }