Golang基础语法介绍 (1)| 青训营

94 阅读2分钟

1. 变量

1.1 变量的声明

  • 局部变量的声明

    // 方法一:声明一个变量 默认的值是0 var a int

    // 方法二:声明一个变量,初始化一个值 var b int = 100

    // 方法三:在初始化的时候,可以省去数据类型,通过值自动匹配当前变量的数据类型 var c =100

    // 方法四:(常用方法)省去var关键字,直接自动匹配 e := 100

  • 全局变量的声明

  • 方法四不支持全局

  • 多变量的声明

    // 单行写法 var xx, yy int = 100 var kk, ll = 100, "abc"

    // 多行写法 var ( vv int = 100 tt bool = true
    )

2. 常量与iota

2.1 常量

// 单行声明
const a int = 10
// 多行声明
const (
    a = 10
    b = 20    
)

2.2 iota

// 与const配合 来定义枚举类型
const (
    // 可以在const() 添加一个关键字 iota
    BEIJING = 10*iota    // iota = 0
    SHANGHAI             // iota = 1
    SHENZHEN             // iota = 2   
)

3. 函数

3.1 多值返回

// 返回多个返回值,匿名的
func foo2(a string, b int)(int, int) {
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)

    return 666, 777
}

// 返回多个返回值,有形参名称的
func foo3(a string, b int)(r1 int, r2 int) {
    fmt.Println("---- foo3 ----")
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)

    // r1 r2 属于foo3的形参,初始化默认的值0
    // r1 r2 作用域空间 是foo3 整个函数体{}空间
    
    // 给有名称的返回值变量赋值
    r1 = 1000
    r2 = 2000
    
    return 
}

func foo4(a string, b int)(r1, r2 int) {
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)

    // 给有名称的返回值变量赋值
    r1 = 1000
    r2 = 2000

    return 
}

3.2 init函数与import包

import包: 

import用于在Go程序中引入其他包(package)。在Go中,代码是组织在包中的,每个文件都属于一个包。通过import语句,你可以让当前包访问其他包中的代码。import语句应该出现在文件的顶部。

例如,假设你想要使用fmt包中的Println函数,你可以这样导入它:

package main

import "fmt"

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

init函数: 

init函数是Go语言中一个特殊的函数,用于在程序启动时执行初始化操作。每个包可以定义一个或多个init函数,它们会在包被导入时自动调用。init函数没有参数和返回值,也不能手动调用。

init函数的调用顺序是从导入的包的依赖关系决定的,首先是被直接引入的包的init函数,然后是依赖的包的init函数。如果一个包被多次引入,它的init函数只会执行一次。

下面是一个示例,展示了两个包的init函数的调用顺序:

package main

import (
    "fmt"
    "mypackage"
)

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

func main() {
    fmt.Println("Main package main")
    mypackage.ShowMessage()
}


package mypackage

import "fmt"

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

func ShowMessage() {
    fmt.Println("Hello from my package")
}

当执行上述代码时,mypackage包的init函数会在main包的init函数之前调用。输出将会是:

My package init
Main package init
Main package main
Hello from my package