zoukankan      html  css  js  c++  java
  • <1>Golang基础进阶——变量

    Golang变量

    1. 声明变量

    1 var a int
    2 var b string
    3 var c []float32
    4 var d func() bool
    5 var e struct{
    6     x int
    7 }

    2. 变量的几种声明形式

    2.1. 标准格式

    var 变量名 变量类型

    2.2. 批量格式

    var (
        var a int
        var b string
        var c []float32
        var d func() bool
        var e struct{
            x int
        }
    )

    3. 初始化变量

    Go语言再声明变量时,自动对变量对应的内存区进行初始化操作。每个变量会初始化其默认值:

    • 整型和浮点型变量的默认值为0
    • 字符串变量的默认值为空字符串
    • 布尔型变量默认为bool
    • 切片、函数、指针变量的默认为nil

     3.1. 标准格式

    var 变量名 类型 = 表达式
    
    例如:
    var hp int = 100
    

    3.2. 编译器推导式类型的格式

    在标准格式基础上,省去int编译器会尝试根据等号右边的表达式推导hp变量的类型。

    var hp2 = 100

     示例:

    package main
    import "fmt"

    var attack = 40 var defence = 20 // damageRate 如果不指定变量类型则为float64 var damageRate float32 = 0.17 var damage = float32(attack-defence) * damageRate func main() { fmt.Println(damage) }

    3.3. 短变量声明并初始化

    package main
    
    import "fmt"
    
    func main() {
        attack := 40
        fmt.Println(attack)
    }

     注意:由于使用了" := ",而不是赋值的 " = ",因此推导声明写法的变量必须是没有定义过的变量。

     如果hp已经被声明过,但依然使用" := "时编译器会报错,代码如下:

    package main
    
    import "fmt"
    
    func main() {
        var attack int
        attack := 40
        fmt.Println(attack)
    }
    no new variables on left side of :=

    短变量的声明在开噶中的例子较多,比如:

    conn, err := net.Dial("tcp","127.0.0.1:8080")

    net.Dial 是按照指定协议和地址发起的网络连接,这个函数有两个返回值,一个是连接对象,一个是err对象。如果是标准格式将会变成:

    var conn net.Conn
    var err error
    conn, err = net.Dial("tcp","127.0.0.1:8080")

    在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即使其他变量名可能是重复声明的,编译器也不会报错,代码如下:

    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    conn2, err := net.Dial("tcp", "127.0.0.1:8080")

     3.4. 多重赋值

    func main() {
    var w1, w2 int
    w1, w2 = 1, 2
    fmt.Println(w1, w2)
    }

    4. 匿名变量

    匿名变量的表现是一个" _ "下划线。匿名变量不占用命名空间不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。

    
    
    package main

    import "fmt"

    func GetData() (int, int) {
    return 100, 200
    }

    func main() {
    a, _ := GetData()
    _, b := GetData()

    fmt.Println(a, b)

    }


    // 代码输出如下:
    100 200
    加油,你们是最棒的!
  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    动态库与静态库
    多线程程序中fork导致的一些问题
    合理的使用size_t可以提高程序的可移植性和代码的可读性,让你的程序更高效。
    linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”
    阅读腾讯编程规范的笔记
    2、vector的实现
    linux下C++对线程的封装
    1、空间配置器
    SQL Server三种表连接原理
  • 原文地址:https://www.cnblogs.com/Wshile/p/12614430.html
Copyright © 2011-2022 走看看