美文网首页
Golang学习笔记-基础知识

Golang学习笔记-基础知识

作者: 土豆吞噬者 | 来源:发表于2019-08-26 18:33 被阅读0次

    包和文件名

    Go源文件中非注释的第一行需要指明这个文件属于哪个包,每个 Go 应用程序都包含一个名为 main 的包,package main表示一个可独立执行的程序。要使用其它包的代码需要使用import引入包。

    文件和文件夹名称一律小写,文件名称由多个单词组成使用下划线分隔或者直接拼接,文件夹名称一般不使用下划线,包名尽量和文件所在文件夹名称保持一致,main包除外。

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        fmt.Println("Hello, World!")
    }
    
    

    标识符

    当标识符(包括常量、变量、类型、函数名、结构字段等等)以大写字母开头时,可以被外部包的代码所使用,而标识符如果以小写字母开头则只能在包内部使用。

    类型转换

    Go类型转换格式和Delphi一样:

    type_name(expression)
    
    func main() {
        value:=3.14
        intValue:=int(value)
        println(intValue)
    }
    
    

    指针

    Go指针和C指针差不多,只不过Go在声明指针类型时,*要放在类型的前面,例如:

    func main() {
        var value int=100
        var p *int=&value
        fmt.Printf("p=%x,*p=%d\n",p,*p)//p=c000058080,*p=100
    }
    
    

    Go语言中对象的地址可能发生变化,因此指针不能从其它非指针类型的值生成,当内存发送变化的时候,相关的指针会同步更新,但是非指针类型例如uintptr不会做同步更新。

    左大括号

    函数,if,switch等的左大括号不能单独放在一行,否则编译会报错。
    错误:

    func main() 
    {
        fmt.Println("Hello, World!")
    }
    

    正确:

    func main() {
        fmt.Println("Hello, World!")
    }
    

    行分隔符

    在 Go中,一行代表一个语句结束,每个语句不需要以分号结尾,如果要将多个语句写在同一行则需要分号区分,但不建议这么做。

    程序的初始化和执行

    Go语言程序的初始化和执行总是从main包的main函数开始的,如果main包导入了其它的包,则会按照某种顺序(一般可能是文件名或包路径名的字符串顺序)将它们包含进main包里。

    如果某个包被多次导入的话,在执行的时候只会导入一次。当一个包被导入时,如果它还导入了其它的包,则先将其它的包包含进来,然后创建和初始化这个包的常量和变量,再调用包里的init函数。

    如果一个包有多个init函数的话,调用顺序未定义(实现可能是以文件名的顺序调用),同一个文件内的多个init则是以出现的顺序依次调用(init不是普通函数,可以定义有多个,所以也不能被其它函数调用)。

    最后,当main包的所有包级常量、变量被创建和初始化完成,并且init函数被执行后,才会进入main包的main函数,程序开始正常执行。

    要注意的是,在main包的main函数执行之前所有代码都运行在同一个goroutine,也就是程序的主系统线程中。因此,如果某个init函数内部用go关键字启动了新的goroutine的话,新的goroutine只有在进入main.main函数之后才可能被执行到。

    相关文章

      网友评论

          本文标题:Golang学习笔记-基础知识

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