strings & strconv包
-
strings包
strings.HasPrefix(s,refix string)bool //判断s是否含有前缀prefix strings.HasSuffix(s,suffix string)bool //判断s是否含有后缀suffix strings.Contains(s,substr string)bool //判断是否包含 strings.Index(s,str string)int //返回索引,不存在返回-1 strings.LastIndex(s,str string)int //返回最后一次出现的索引 strings.Replace(str,old,new string n int)string //以旧换新,n指定替换的次数,if n == -1 : 替换整个字符串 strings.Count(s,str string)int // 统计str在s中出现的非重叠次数 string.Repeat(s string ,n int)string //重复n次s并返回新字符串 string.ToLower/Upper(s string)string //大小写转换 ...... -
strconv包 - 字符串转换
strconv.Atoi(s string)(i int err error) strconv.ParseFloat(s string ,t int)(o float64 err error)
指针
var p *int //指针的格式化输出: p%
// 不允许对常量取地址, cannot take address of a (constant 1 of type int
// 对空指针反向引用也会引发程序崩溃
// 没有指针算法
控制结构
if-else
if{
}else{ //注意else必须在if结束括号的同一行,也必须在自己开始括号的同行
}
// 常用写法是
if{
}
xxxx // 直接跟代码,省略else
switch
switch var1{
case val2:
case val3,val4: // 可以同时测试多个值
default:
} // var1可以是任何类型
for
for i :=1;i<4;i++{
}
for i,j := 0,10;i<10;i,j = i+1,j+1{
// 可以看出并行赋值确实很有用
}
// 无限循环
for{
}
for i := 0; i < 5; i++ {
var v int
fmt.Printf("%d ", v)
v = 5
}
//output: 0 0 0 0 0 每次都初始化
for range
for ix,vl in range coll{}
标签&goto
LABEL1: // 建议大写
goto LABEL1
不支持:由于goto语句可以在程序中随意跳转,可能会导致代码逻辑混乱,产生一些难以察觉的错误和 bug
goto语句会打破代码的结构,使得代码的逻辑流程难以跟踪和理解。其他开发者阅读代码时可能很难理解goto语句所代表的跳转目标和条件
函数
-
go不支持函数重载
-
多指返回
-
传值问题:
call by value /call by reference(消耗更少)
注意的是: 虽然
return或return var都是可以的,但是return var = expression(表达式) 会引发一个编译错误:
syntax error: unexpected =, expecting semicolon or newline or }。
即使函数使用了命名返回值,你依旧可以无视它而返回明确的值。