MENU

Go 学习笔记:数据类型

August 21, 2021 • Golang

数据类型

Golang 支持多种数据类型,包括布尔型,int, float(float32, float64),字符串类型,还有一系列的派生类型

Golang 没有long long和double类型,取而代之的是(int64 和 float64)
/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:15:49
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var intNum int
    var float32Num float32
    var float64Num float64
    var boolNum bool
    var str string

    fmt.Println(
        intNum,
        float32Num,
        float64Num,
        boolNum,
        str) // 声明后不使用会编译错误
}

变量声明

Golang有多种声明变量的方法,比如:

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:15:49
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var s string = "Hello world"
    fmt.Println(s)
}

当然,你也可以一次性申请多个变量:

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:21:55
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var s1, s2, s3, s4 string = "Hello", "world", "my", "dear"
    fmt.Println(s1, s2, s3, s4)
}

在书写上述代码的时候,你也可以通过Go根据值自动判断变量类型的特性,来简写上述代码

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:25:29
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var s1, s2, s3, s4 = "Hello", "world", "my", "dears"
    fmt.Println(s1, s2, s3, s4)
}

除了通过var来声明变量,我们还可以使用:=来声明变量,则上面的代码会变为

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:25:29
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    s1, s2, s3, s4 := "Hello", "world", "my", "dears" 
    // 如果左侧出现了已有的变量,则会报错
    fmt.Println(s1, s2, s3, s4)
}

值得注意的是,这种声明方法只能在函数体内使用

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:25:29
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

glb := 12 // 这样书写是错误的

func main() {
    fmt.Println(gbl)
}

一般我们再书写全局变量的时候,是这样写的

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:40:59
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

var (
    RED   string = "red"
    GREEN string = "green"
    BLUE  string = "blue"
)

func main() {
    fmt.Println(RED, GREEN, BLUE)
}

补充:在交换代码值的时候,可以参考Python的一些写法,而毋需再声明新的变量

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 16:32:54
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var s1, s2, s3, s4 = "Hello", "world", "my", "dears"
    s3, s4 = s4, s3 // 必须确保参与交换的变量数据类型相同
    fmt.Println(s1, s2, s3, s4)
}

值得注意的是,在golang中,string是不可修改的,因此尝试修改字符串内部的操作是被禁止的

package main

import "fmt"

func main() {
    str := "hello world"
    str[0] = "H" // cannot assign to str[0] (strings are immutable)
    fmt.Println(str)
}

这样的好处是,字符串类型的子字符串切片就不再需要花销额外的内存了

作者:NorthCity1984
出处:https://grimoire.cn/golang/go2.html
版权:本文《Go 学习笔记:数据类型》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

Last Modified: September 6, 2021