• go 基础语法


    时间有限,简单记一些常用的,麻烦的不写了

    定义变量:可以连续定义,也可以单个定义

    var a int    int类型

    var a="ds"   默认string类型

    a:="string"  :=前面不可以有var

    上面三种属于等价的

    连续定义

    var x1,x2,x3 int =1,2,3

    name1,name2,name3:="mu","bai","xu"

    基本数据类型

    int int16,int32,int64  double float 32,64 complex具体含义百度

    循环

    for init;condition;desc/incr{

    }

    上面这种和c++的for循环一样,只不过没括号

    还有一种类似于while的

    for condition{

    }

    eg: condition:a<b  ||a>b

    无限循环

    for true{

    }

    switch:

    和c++的主要区别就是没有break

    type-switch

    Type Switch

    switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

    Type Switch 语法格式如下:

    switch x.(type){
        case type:
           statement(s);      
        case type:
           statement(s); 
        /* 你可以定义任意个数的case */
        default: /* 可选 */
           statement(s);
    }
    package main
    
    import "fmt"
    
    func main() {
       var x interface{}
         
       switch i := x.(type) {
          case nil:      
             fmt.Printf(" x 的类型 :%T",i)                
          case int:      
             fmt.Printf("x 是 int 型")                       
          case float64:
             fmt.Printf("x 是 float64 型")           
          case func(int) float64:
             fmt.Printf("x 是 func(int) 型")                      
          case bool, string:
             fmt.Printf("x 是 bool 或 string 型" )       
          default:
             fmt.Printf("未知型")     
       }   
    }

    select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

    以下描述了 select 语句的语法:

      • 每个case都必须是一个通信
      • 所有channel表达式都会被求值
      • 所有被发送的表达式都会被求值
      • 如果任意某个通信可以进行,它就执行;其他被忽略。
      • 如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。 
        否则:
        1. 如果有default子句,则执行该语句。
        2. 如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值

    条件:

    break,contonie,goto都是和c/里面的类似

    function:

    函数的返回值可以有一个二两或者多个,中间用逗号隔开就可以,return x,y,z

    return的值接的时候就是

    func function(a,b,c int) int{

      return a,b,c

    }

    x,y,z=function(a,b,c)

    package main
    import "fmt"
    
    func max(a,b int) int{
        var result int
        if a>b{
            result=a
        }else{
            result=b
        }
        
        return result
    }
    
    func main(){
        var re int
        
        re=max(14,6)
        fmt.Println(re)
    }

     函数可以作为值

      getSquareRoot := func(x float64) float64 {
          return math.Sqrt(x)
       }
    
       /* 使用函数 */
       fmt.Println(getSquareRoot(9))

    内置方法

    get()  len()都属于circle的内置方法

    package main
    import (
        "fmt"
    )
    type circle struct{
             x,y int
    }
    func main(){
        var c circle
        c.x=4
        c.y=51
        var ret int
        ret=c.get()
        fmt.Println(ret)
        ret=c.len()
        fmt.Println(ret)
    }
    
    func (c circle) len() int {
        return c.x+c.y
    }
    
    
    func (c circle) get() int{
          return c.x * c.y
    }

    range:

    package main
    import "fmt"
    func main() {
        //这是我们使用range去求一个slice的和。使用数组跟这个很类似
        nums := []int{2, 3, 4}
        sum := 0
        for i, num := range nums {
            fmt.Println(i)
            sum += num
        }
        fmt.Println("sum:", sum)
        //在数组上使用range将传入index和值两个变量。
        //上面那个例子我们不需要使用该元素的序号,
        //所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。
        for i, num := range nums {
            if num == 3 {
                fmt.Println("index:", i)
            }
        }
        //range也可以用在map的键值对上。
        kvs := map[int]string{1: "apple", 2: "banana"}
        for k, v := range kvs {
            fmt.Printf("%d -> %s
    ", k, v)
        }
        //range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。
        for i, c := range "go" {
            fmt.Println(i, c)
        }
    }

    map

    使用range map的时候可以返回两个值,第一个key第二个value

    package main
    
    import "fmt"
    
    func main() {
       var Map map[string]string
       /* 创建集合 */
        Map = make(map[string]string)
       
       Map["France"] = "Paris"
       Map["Italy"] = "Rome"
       Map["Japan"] = "Tokyo"
       Map["India"] = "New Delhi"
       
       
       for country ,value:= range Map {
       
           fmt.Println(country,value)
       }
       
     
       captial, ok := Map["United States"]
       /* 如果 ok 是 true, 则存在,否则不存在 */
       if(ok){
          fmt.Println("Capital of United States is", captial)  
       }else {
          fmt.Println("Capital of United States is not present") 
       }
    }
     delete(map,"France");
    通过delete我们可以删除指定map的key的value


  • 相关阅读:
    大量 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理
    点击按钮保存当前页面为图片html2canvas
    浅谈webpack优化
    nginx配置
    table表格边框线问题
    git push到指定仓库
    No bean named 'xxx' is defined错误,原因及解决方案
    关于The requested list key 'map' could not be resolved as a collection/array/map/enumera...
    Tomcat网页加载过慢的排查调整time_wait连接过多
    MySQL information_schema 系统库
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/7026473.html
Copyright © 2020-2023  润新知