Golang学习笔记-基础知识

包和文件名

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函数之后才可能被执行到。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页