zoukankan      html  css  js  c++  java
  • 【Go语言学习笔记】Go语言的基础语法

    上一篇已经说了,Go的语法和C的很接近,直接看看异同即可。

    变量

    变量名还是一样,字母或下划线开头,区分大小写。不能是关键字。
    Go定义了int32和int64这种类型来显示声明大小,和C里面的short和long一样。

    Go的变量定义有以下几种方式:

    var v1 int //类型在后面
    
    var v3 , v4 int //多个变量
    
    var v5 = 10 //初始化
    v5 := 10  //初始化
    
    //下面这种算重复定义
    var v6 int
    v6 := 10 //err
    

    Go比较厉害的是支持多个返回值了,所以:

    var v2, v3, v4 int
    v2, v3, v4 = 1, 2, 3    //多重赋值
    
    i := 10
    j := 20
    i, j = j, i    //交换变量
    

    Go还支持匿名变量,表示抛弃:

    _, i, _, j := 1, 2, 3, 4 //i=2 j=4
    

    常量

    常量用const。

    const Pi float64 = 3.14
    const zero = 0.0 // 浮点常量, 自动推导类型
    
    const ( // 常量组
        size int64 = 1024
        eof        = -1 // 整型常量, 自动推导类型
    )
    const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
    const a, b, c = 3, 4, "foo"
    // a = 3, b = 4, c = "foo"    //err, 常量不能修改
    

    常量枚举

    const (
                a = iota   //0
                b          //1
                c          //2
                d = "ha"   //独立值,iota += 1
                e          //"ha"   iota += 1
                f = 100    //iota +=1
                g          //100  iota +=1
                h = iota   //7,恢复计数
                i          //8
        )
    fmt.Println(a,b,c,d,e,f,g,h,i)//0 1 2 ha ha 100 100 7 8
    

    类型

    类型和C差不多,但是不支持隐式转换了,都需要显示转换,而且转换只能发生在两种相互兼容的类型之间。比如:

    //布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换
    var b bool
    b = 1 // err, 编译错误
    b = bool(1) // err, 编译错误
    

    bool转int

    func bool2int(b bool) int {
        if b {
            return 1
        }
        return 0
    }
    

    int转bool

    func int2bool(i int) bool {
        return i != 0
    }
    

    字符和字符串

    byte就是char,也就是int8,存的还是ASCII码。
    字符串string,双引号,末尾还是有个‘’。
    字符串之间可以用加号拼接。

    格式化输入输出

    格式和C一样,只是包换成了fmt

    //整型
    a := 15
    fmt.Printf("a = %b
    ", a) //a = 1111
    fmt.Printf("%%
    ")        //只输出一个%
    
    //字符
    ch := 'a'
    fmt.Printf("ch = %c, %c
    ", ch, 97) //a, a
    

    输入:

    var v int
    fmt.Println("请输入一个整型:")
    fmt.Scanf("%d", &v)
    //fmt.Scan(&v)
    fmt.Println("v = ", v)
    

    运算符

    运算符和C里面没有什么区别。

    流程控制

    • if - else 条件语句
    • switch - case 选择语句
    • for - range 循环语句
    • goto 无条件跳转语句
    • defer 延迟执行

    有变化的:

    • case默认带break
    • range可以用来遍历string/array/slice/map,第一个返回值是元素的数组下标,第二个返回值是元素的值。
    s := "abc"
        for i := range s { //支持 string/array/slice/map。
            fmt.Printf("%c
    ", s[i])
        }
     
        for _, c := range s { // 忽略 index
            fmt.Printf("%c
    ", c)
        }
     
        for i, c := range s {
            fmt.Printf("%d, %c
    ", i, c)
    }
    
    • goto语句和标签之间不能有变量定义

    defer单独开一篇讲吧。

  • 相关阅读:
    Java数据处理,Map中数据转double并取小数点后两位
    19年7月份面试7家公司,整理的java面试题(答案自行百度解决,也是个学习的过程)
    2019阿里云面试题,竟然现场敲代码,现在的企业越来越实在了
    解决win10状态栏的搜索框无法搜索本地应用或无反应
    sql,按照时间排序,取前N条
    List数组排序
    阿里云的maven仓库 地址
    hashcode相等两个类一定相等吗?equals呢?相反呢?
    杂记
    java排序
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/15402249.html
Copyright © 2011-2022 走看看