zoukankan      html  css  js  c++  java
  • golang基础

    1.1 golang中的init函数和main函数

      1、init函数和main函数

          1. golang里面有两个保留的函数:init函数(用于所有package)main函数(只能用于package main)。(这两个函数在定义时不能有任何的参数和返回值)

          2. 每个package中的init函数都是可选的,但package main就必须包含一个main函数。

          3. go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。

          4. 程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。

          5. 等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。

      2、调用过程

          

      3、在main package中调用add package中变量和方法

        1. 直接使用默认包名调用add中方法

    package main
    
    import (
        "LearGoProject/day1/example3/add"  // 下面可以直接使用package名字 add 调用变量和方法
        "fmt"
    )
    
    func main()  {
        add.Test()                // 调用add.go中的Test()方法就会修改Name、和Age的值
        fmt.Println(add.Name)     // 打印add中的变量Name :hello go
        fmt.Println(add.Age)      // 打印add中的变量Age  :100
    }
    example3mainmain.go
    package add
    
    var Name string = "hello world"   // 变量名为大写才不是私有的,可以在main.go中访问
    var Age int = 10
    
    func Test()  {
        Name = "hello go"
        Age = 100
    }
    example3addadd.go

        2. 通过包别名调用 addd package中变量和方法

    package main
    
    import (
        aa "LearGoProject/day1/example3/add"  // 将add这个文件取一个别名 aa 下面调用add.go中方法就是用aa
        "fmt"
    )
    
    func main()  {
        aa.Test()               // 通过package别名aa来调用add package中方法
        fmt.Println(aa.Name)     // 打印add中的变量Name :hello go
        fmt.Println(aa.Age)      // 打印add中的变量Age  :100
    }
    example3mainmain.go
    package add
    
    var Name string = "hello world"   // 变量名为大写才不是私有的,可以在main.go中访问
    var Age int = 10
    
    func Test()  {
        Name = "hello go"
        Age = 100
    }
    example3addadd.go

        3. 通过init方法自动调用

    package main
    
    import (
        aa "LearGoProject/day1/example3/add"  // 将add这个文件取一个别名 aa 下面调用add.go中方法就是用aa
        "fmt"
    )
    
    func main()  {
        //aa.Test()              // 这里add中修改变量的方法写在init中所以会自动调用
        fmt.Println(aa.Name)     // 打印add中的变量Name :hello go
        fmt.Println(aa.Age)      // 打印add中的变量Age  :100
    }
    example3mainmain.go
    package add
    
    var Name string = "hello world"   // 变量名为大写才不是私有的,可以在main.go中访问
    var Age int = 10
    
    // 每个源文件可以包含一个init函数,这个init函数自动被go运行的框架调用
    func init()  {
        Name = "hello go"
        Age = 100
    }
    example3addadd.go

    1.2 程序结构

       1、声明  

          1. Go语言主要有四种类型的声明:var(变量)、const(常量)、type(类型)和func(函数)。

          2. 在包一级声明语句声明的名字可在整个包对应的每个源文件中访问,而不是仅仅在其声明语句所在的源文件中访问

          3. 在函数内的声明只能在函数内访问。 

      2、变量

        1)var 变量名字 类型 = 表达式 

    package main
    import "fmt"
    
    var a int =  9
    var str string ="I Am String"
    
    func main() {
        fmt.Println(a)
        fmt.Println(str)
    }
    var关键字变量

        2)简短变量声明

            1. 请记住“:=”是一个变量声明语句,而“=‘是一个变量赋值操作。

            2. := 是声明并赋值,并且系统自动推断类型,不需要var关键字

    package main
    import "fmt"
    
    func main() {
        i := 100 // an int
        fmt.Println(i)
    }
    简短变量声明

      3、指针

        1)指针介绍

            1. 一个变量对应一个保存了变量对应类型值的内存空间,普通变量在声明语句创建时被绑定到一个变量名,比如叫x的变量

            2. 但是还有很多变量始终以表达式方式引入,例如x[i]或x.f变量。

            3. 一个指针的值是另一个变量的地址,一个指针对应变量在内存中的存储位置

            4. 并不是每一个值都会有一个内存地址,但是对于每一个变量必然有对应的内存地址。

            5. 通过指针,我们可以直接读或更新对应变量的值,而不需要知道该变量的名字(如果变量有名字的话)。

        2)指针举例

    package main
    import "fmt"
    
    func main() {
        x := 1             // 什么一个x变量
        p := &x            // &x表达式(取x变量的内存地址)将产生一个指向该整数变量的指针p
        fmt.Println(*p)    // "1"     *p 表达式对应p指针指向的变量的值
        *p = 2             // *p = 2 等价于 x = 2  表示更新指针所指向的变量的值。
        fmt.Println(x)     // "2"     此时再打印x已经是*p更新过的结果2
    }
    
    /*
    如果用“var x int”声明语句声明一个x变量,
    那么&x表达式(取x变量的内存地址)将产生一个指向该整数变量的指针
    指针对应的数据类型是 *int ,指针被称之为“指向int类型的指针”
    如果指针名字为p,那么可以说“p指针指向变量x”,或者说“p指针保存了x变量的内存地址”。
    同时 *p 表达式对应p指针指向的变量的值。
    一般 *p 表达式读取指针指向的变量的值,这里为int类型的值,同时因为 *p 对应一个变量
    所以该表达式也可以出现在赋值语句的左边,表示更新指针所指向的变量的值。
    */
    举例理解指针

      4、new函数

          1. 表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为 *T

          2. 用new创建变量和普通变量声明语句方式创建变量没有什么区别,除了不需要声明一个临时变量的名字外,我们还可以在表达式中使用new(T)

    func newInt() *int {
    return new(int)
    }
    
    func newInt() *int {
    var dummy int
    return &dummy
    }
    这两个newInt函数有着相同的行为
  • 相关阅读:
    德阳机场大巴
    “以前进行的程序安装创建了挂起的文件操作。运行程序之前,必须重新起动计算机。”的解决办法
    Web程序中网页间数据传递方法小结
    转向姚BLOG
    用ASP.NET在IIS中创建虚拟目录
    TreeView 点击Nodes属性出现“指定的转换无效”错误
    该页正在访问其控制范围之外的数据。这有些危险。是否继续?
    JS的Trim
    JS简明中文教程
    电子数据交换
  • 原文地址:https://www.cnblogs.com/jiaxinzhu/p/12598130.html
Copyright © 2011-2022 走看看