Go语言学习(二)数据类型及运算

283次阅读
没有评论

共计 1871 个字符,预计需要花费 5 分钟才能阅读完成。

内容目录

Go的数据类型

 Go的数据类型及相关运算与大多数语言类似。拥有其它编程语言基础的读者,如:JavaScript,Java,C++等上手Go并不会很难,也不需要花大量的时间浪费在编程语言的共性上。

变量声明

 Go语言中声明变量的一般形式是使用var关键字:

var identifier type

 需要注意的是,Go和许多编程语言不同,它在声明变量时将变量的类型放在变量的名称之后。其原因如下:

  • 为了避免像C语言中那样含糊不清的声明形式,例如:int *a,b;。在这个例子中,只有a是指针,而b不是。如果需要让这两个变量都是指针,则需要将其分开来写。而在Go中,则可以很轻松地将它们都声明成指针类型
var a,b *int
  • 从左至右的声明方式,更容易理解。
var name string
var age int
var sex bool

 上述代码也可以合并起来:

var (
    name string
    age int
    sex bool
)

这种合并写法一般用于全局变量的声明。但无论全局还是局部,当一个变量被声明之后,该变量都会赋予对应类型的零值

 对于Go来说,它的编译器可以直接根据变量的值来判断该变量的数据类型,例如:

package main

import fm "fmt"

func main() {
    var (
        name = "Bob"
        age  = 19
        sex  = false
    )
    fm.Println(name) // Bob
    fm.Println(age) // 19
    fm.Print(sex) // false
}

 然而,Go的编译器有时候推断出来的类型并不是我们想要的类型,为了确保能够推断出我们想要的类型,还是需要显示声明数据类型:

var name string = "Bob"

案例

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var weight = 55
    fmt.Println(weight)
    fmt.Println(reflect.TypeOf(weight)) // int
    var height float32 = 175
    fmt.Println(height)
    fmt.Println(reflect.TypeOf(height)) // float32
}

 当你仅仅需要在函数内部声明变量时,可以使用:=语法:

name := "Bob"

 如果想要一次性声明不同种数据类型的变量:

    var name string
    var age int
    var sex bool
    name, age, sex = "Bob", 18, false

 若不声明,则应该使用:=来对多个变量赋予不同类型的值

name, age, sex := "Bob", 18, false

 对于交换ab两个数的值,我们也可以直接使用下述语法:

    a, b = b, a

 需要注意的是,Go中有一个特殊变量_。该变量是一个只写写量,也就意味着你只能写,不能读。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。因此,你可以使用这个只写变量_来抛弃一些不用的值。

init函数

 变量除了可以在全局声明中初始化,也可以在 init() 函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main() 函数高。执行下述程序:

package main

import "fmt"

func init() {
    fmt.Println("init.....")
}

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

 每个源文件可以包含多个 init() 函数,同一个源文件中的 init() 函数会按照从上到下的顺序执行,如果一个包有多个源文件包含 init() 函数的话,则官方鼓励但不保证以文件名的顺序调用。初始化总是以单线程并且按照包的依赖关系顺序执行。

数据类型

 Go的数据类型与其它语言,尤其是JavaScript的数据类型相似,这里不一一举例。后续会在更多的代码示例中看到。

 Go的数据类型有:字符串、数组、结构体、指针、接口等。

算术运算符

 和大多数语言一样,Go的算术运算包括:+-*/%

    a := 45
    b := 15
    c := a + b
    c := a - b
    c := a * b
    c := a / b
    c := a % b

逻辑运算符

 Go的逻辑运算和大多数语言一样,包括:==,!=,<,>,>=,<=,&&,||

    a := 10
    b := 15
    c := 10
    a == b //false
    b != c // true
    a == b && b != c // false
    a == c && a != b // true

位运算

 位运算只能用于整数类型的变量,且需当它们拥有等长位模式时。Go的位运算包括:&,|,^,&^,<<,>>

正文完
 
PG Thinker
版权声明:本站原创文章,由 PG Thinker 2023-09-15发表,共计1871字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
热评文章
Rust中所有权与借用规则概述

Rust中所有权与借用规则概述

在GC与手动管理内存之间,Rust选择了第三种:所有权机制...