一:基础类型
1.不能以数字 ,关键词 ,名字里不能有运算符
2.导入包不使用会报错
3.类型有int float bool string 复合型struct array slice map channel 只描述类型的行为的 iinterface
4.类型转换
类型b的值 = 类型b(l类型a的值)
5.init包常用来做调用goroutine执行
6.:=只能在自己函数内部调用 不可以用于全局变量的声明
func main() { //GOG a = "G" print(a) f1() } func f1() { a := "O" print(a) f2() //依旧调用的是全局变量里的a的值 } func f2() { print(a) }
7.go中没有float和double类型 只有float32和float64类型
8.格式化:%d 整数 %g 浮点数 %b二进制 %o 八进制 %x %X十六进制 大小写 %0d输出定长的整数 %n.mg / %n.mf 表示精确小数点后几位
%c character %v或%d输出该字符的整数
9. \n换行 \r 回车 \ 反斜杠 \t tab键
10.go中的len()用于获取ASCI字符串长度,对于其他字符会占有2-4个字符,(中文字符是占3个字符位置) 而是用RuneCountlnString() 则会获得字符串的长度
func main() { // count number of characters: str1 := "asSASA ddd dsjkdsjs dk" fmt.Printf("The number of bytes in string str1 is %d\n", len(str1)) //22 fmt.Printf("The number of characters in string str1 is %d\n", utf8.RuneCountInString(str1)) //22 str2 := "asSASA ddd dsjkdsjsこん dk" fmt.Printf("The number of bytes in string str2 is %d\n", len(str2)) //28 fmt.Printf("The number of characters in string str2 is %d", utf8.RuneCountInString(str2)) //24 }
11.字符串常用方法:
1.判断字符串开头结尾是否包含某个
strings.HasPrefix(s,prefix string) bool 判断orefix是否是s开头 strings.HasSuffix(s,suffix string) bool 判断suffix是否是s结尾
2.Contains Index 和 LastIndex 和 IndexRune
strings.Contains(s,substr string) bool // 判断字符串substr是否在s strings.Index(s,str string) int // 判断str在s中的索引位置 strings.LastIndex(s,str string) int // 返回str在s中最后出现时的索引位置 strings.IndexRune(s string,r rune) int //如果查找时候不是asci码时,使用该方法 //第四个方法例子 strings.IndexRune("chicken",'k') strings.IndexRune("chicken",'d')
2.Contains Index 和 LastIndex 和 IndexRune
strings.Contains(s,substr string) bool // 判断字符串substr是否在s strings.Index(s,str string) int // 判断str在s中的索引位置 strings.LastIndex(s,str string) int // 返回str在s中最后出现时的索引位置 strings.IndexRune(s string,r rune) int //如果查找时候不是asci码时,使用该方法 //第四个方法例子 strings.IndexRune("chicken",'k') strings.IndexRune("chicken",'d')
3.Replace 和 count 替换和统计次数
strings.Replace(str,old,new string,n int)) string //将前n个old替换成new strings.count(s,str string) int //统计s中str的个数
4.重复 Repeat 和 修改字符串的大小写
strings.Repeat(s,count int) string //将目标字符串重复count遍 strings.Tolower(s) string //将字符创转化为小写 strings.ToUpper(s) string //将字符串转化为大写
5.修剪TrimSpace,分割Fields,Split,拼接slice 字符串
strings.TrimSpace(s) //用来剔除字符串开头和结尾的空呗符号 strings.TrimSpace(s,"cut") // 将开头和结尾的cut去除掉 strings.Fields(s) //利用空呗作为分隔符 strings.split(s,sep) //自定义分隔符号 strings.join(s1,sep string) // 以sep为分隔符将s1拼接上去
6.读取内容 NewReader 和 字符串和其他类型的转化
Read() //从[]byte中读取内容 ReadByte() 和 ReadRune() //从字符串中读取下一个byte或者rune strconv.IntSize //查看int类型所占的位数 strconv.Itoa(i int) string //返回i的字符串型的十进制数字 strconv.FormatFloat() string //将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b'、'e'、'f' 或 'g'),prec 表示精度,bitSize 则使用 32 表示 float32,用 64 表示 float64。 strconv.Atoi(s string)(i int,err error) //将字符串型转化为int类型
**7.指针:不可以用于常量
var i1 = 5 定义变量
var intP *int 调用指针p
使用 intP= &i1 将i1的地址赋予intP
要想表示5 则可以使用 *intP 则可以表示指针所指地址的值
如果 *intP 的值发生改变,表示的是指针所指地址的值发生改变 那个i1也就发生了改变,不是原来的值
二:循环结构
1.for循环两种输出形式
for xx(){
}
for 索引,值 :=range xx{
}
2.标签 对大小写敏感 要求全部大写字母**
LABEL1: for i := 0; i <= 5; i++ { for j := 0; j <= 5; j++ { if j == 4 { continue LABEL1 } fmt.Printf("i is: %d, and j is: %d\n", i, j) } }
标签的作用对象为外部,所以continue跳出之后,会进入外层的下一步寻循环内
三:函数
1、slice…
如果参数被存储在一个slice类型的变量中,可以通过slice…的形式来调用变成那函数
2、defer 还可以用来 追踪进入和离开
类似于java中的finally,最后执行 当有多个deger时,类似于栈,后进先出
3.闭包
当函数作为返回值i的时时候,
func Add2() (func(b int) int) 例如这种
有 p:= Add2(2) 这个参数2传给你的是返回匿名函数中