• 刷题中碰见的Golang语言问题


    一些已知的情况

    在Golang语言中,一个变量赋值/使用前,需要声明变量的类型。例如:

    var a int
    a = 10
    fmt.Printf("%d\n", a)
    

    使用另一种形式:=也可以对变量进行隐式的声明。例如:

    a := 10
    fmt.Printf("%d\", a)
    

    对于一个变量,可以赋值多次,但是只能声明一次,不能重复。例如:

    a := 10
    a := 100
    b := 10
    b := "10"
    

    这些重复声明都会报错:

    Line 5: Char 10: no new variables on left side of :=
    

    但是如果有多个变量在:=左侧的话,那么只要有一个变量还没有声明,这个语法就是正确的,下面的例子特别常见:

    a, err := foo()
    b, err := bar()
    

    还有一种情况是作用域不同也是可以重复声明的。例如:

    a := 1
    fmt.Printf("%d\n", a)
    if ... {
      a := 2
      fmt.Printf("%d\n", a)
    }
    fmt.Printf("%d\n", a)
    

    这里,应该输出:

    1
    2
    1
    

    奇怪的情况

    把上面几种情况组合一下:

    a := 1
    fmt.Printf("%d\n", a)
    if ... {
      a = 12
      fmt.Printf("%d\n", a)
      a, b := 2, 3
      fmt.Printf("%d\n", a)
      a = 13
      fmt.Printf("%d\n", a)
    }
    fmt.Printf("%d\n", a)
    

    这里输出的是:

    1
    12
    2
    13
    12
    

    这里竟然a是会被重新声明!,因此可以看出:=的意义,只要左侧变量可以被声明,那么就尽量让左侧变量声明。上面例子的写法其实非常的容易写错,解决的办法是提前声明b

  • 相关阅读:
    haproxy教程
    haproxy和keepalived的理解(转载)
    redis集群搭建_超详细
    磁盘IO过高时的参考
    tomcat优化
    MYSQL数据库的主从复制
    k8s学习笔记-etcd介绍和集群搭建
    python排序算法二---冒泡排序
    Python排序算法一—快速排序
    python:如何判断字典a在字典b
  • 原文地址:https://www.cnblogs.com/zhuowangy2k/p/15794932.html
Copyright © 2020-2023  润新知