美文网首页
Go基础学习之包,变量和函数

Go基础学习之包,变量和函数

作者: nextliving | 来源:发表于2018-04-22 13:03 被阅读12次

    学习了一下Golang语言官网推荐的Go基础教程 - A Tour of Go,在此记录包,变量和方法部分的学习心得总结。

    基础数据类型

    Go中有以下基础数据类型:

    bool

    string

    int int8 int16 int32 int64

    uint uint8 uint16 uint32 uint64 uintptr

    byte // alias for uint8

    rune // alias for int32

    // represents a Unicode code point

    float32 float64

    complex64 complex128

    其中int,uint和uintptr类型在32位(bit)机器上通常是32个比特(32bits,即4Bytes),在64位机器上通常是64比特(64bits,即8Bytes)。

    可输出名称(Exported names)

    先贴一段选取自A tour of go的代码片段:

    
    package main
    
    import (
    
    "fmt"
    
    "math"
    
    )
    
    func main() {
    
    fmt.Println(math.pi)
    
    }
    
    

    每一个Go程序由包(package)组成,Go程序从名为main的包开始执行,package用于标示本文件所属的包。如以上代码中是package main,表示这段代码所属的包是main,正好是程序开始执行的包。

    import用于导入外部的包,以上代码中用括号(parenthesis)括起来并一次性导入所有外部包的方法是工厂方法,也是官方推荐的方法。当然也可以不用括号,一行一行导入,类似这样(不推荐):

    
    import "fmt"
    
    import "math"
    
    

    接下来要说到可输出名称,Go语言中以大写字母开头的名称是可输出的,也就是外部可以访问到的。比如执行以上代码就会出错:

    
    tmp/sandbox307383146/main.go:9: cannot refer to unexported name math.pi
    
    tmp/sandbox307383146/main.go:9: undefined: math.pi
    
    

    这是因为pi以小写字母p开头,外部无法访问。如果pi改成Pi,则错误消失。

    函数(Functions)

    还是先贴一段A tour of Go的代码:

    
    package main
    
    import "fmt"
    
    func add(x int, y int) int {
    
    return x + y
    
    }
    
    func main() {
    
    fmt.Println(add(42, 13))
    
    }
    
    

    函数可以没有参数,也可以有很多参数,以上代码中方法add有2个int型参数x,y,返回值是int型。和C语言解析(parse)声明(declaration)使用“顺时针/螺旋法则(Clockwise/Spiral Rule)”不同,Go使用从左到右的法则。所以,对于以上函数add,从左到右解析,即函数add传递参数int x和int y,并返回int。

    注意,Go函数可以返回多个值,以,分隔,比如下面这段代码中方法swap返回2个字符串:

    
    package main
    
    import "fmt"
    
    func swap(x, y string) (string, string) {
    
    return y, x
    
    }
    
    func main() {
    
    a, b := swap("hello", "world")
    
    fmt.Println(a, b)
    
    }
    
    

    如果仔细看swap的参数列表,会发现x后面没有数据类型string,这就是即将讨论的问题。

    变量(variable)

    go使用var声明变量:

    
    var x int
    
    var y int
    
    

    以上可以合并成一行:

    var x, y int

    如果只是声明变量而不赋值的话,Go会自动给变量赋值为零值,即

    0 for numeric types,

    false for the boolean type, and

    "" (the empty string) for strings.

    如果还要初始化的话,可以这样写:

    var x, y int = 1, 2

    在函数内部(不能是函数外部,或者说包的内部),可以使用:=直接给一个变量赋值而不必声明变量的类型(go有隐式类型推断):

    
    package main
    
    import "fmt"
    
    func main() {
    
    var i, j int = 1, 2
    
    k := 3
    
    c, python, java := true, false, "no!"
    
    fmt.Println(i, j, k, c, python, java)
    
    }
    
    

    不同类型变量间赋值操作时,必须使用显式类型转换。

    常量

    Go使用const关键字定义常量,定义在函数内或者函数外(包内)均可。注意,定义常量时不能使用:=

    
    package main
    
    import "fmt"
    
    const Pi = 3.14
    
    func main() {
    
    const World = "世界"
    
    fmt.Println("Hello", World)
    
    fmt.Println("Happy", Pi, "Day")
    
    const Truth = true
    
    fmt.Println("Go rules?", Truth)
    
    }
    
    

    参考

    相关文章

      网友评论

          本文标题:Go基础学习之包,变量和函数

          本文链接:https://www.haomeiwen.com/subject/lszqlftx.html