简单的语法

69 阅读2分钟

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 }

即使函数使用了命名返回值,你依旧可以无视它而返回明确的值。