go语言学习笔记3-golang代码的组成

1、代码的组成

package main

import "fmt"

func main() {
    /*输出"Hello World!"*/
	fmt.Println("hello, world")
}

第 1 行 package main 定义了包名。必须在源文件中非注释的第 1 行指明这个文件属于哪个包,例如 package main。package main 表示一个可独立执行的程序,每个Go语言应用程序都需要包含一个名为 main 的包,并且该包中包含一个名为 main() 的函数(该函数是Go语言可执行程序的执行起点,既不能带参数,也不能定义返回值)。

第 2 行 import "fmt" 中 import 语句用于导入该程序所依赖的包。由于本示例程序中用到了 Println() 函数,而该函数属于 fmt 包,所以需要导入 fmt 包,fmt 包实现了格式化 I/O(输入/输出)。

第 3 行 func main() 是程序入口。所有Go语言函数都是以关键字 func 开头的,每一个可执行程序都必须包含一个 main() 函数,这个 main() 函数通常是程序启动后第一个执行的函数,如果有 init() 函数则会先执行 init() 函数。

第 4 行 /*...*/ 是程序的注释,也可以用//来进行单行注释,在程序执行时,注释的部分将被程序忽略,不会执行。

第 5 行 fmt.Println(...) 用来将字符串输出到控制台,并在最后自动增加一个换行字符 \n。使用 fmt.Print("Hello, World!\n") 也会得到相同的结果。

除此之外,还有以下几点值得注意:

  • 只有 package 名称为 main 的包可以包含 main() 函数;
  • 一个可执行程序有且仅有一个 main 包;
  • 通过 import 关键字来导入其他非 main 包;
  • 可以通过 import 关键字导入单个包,也可以同时导入多个包。

 2、包

包是结构化代码的一种方式,对外表现为包含一个或多个.go文件的目录,每个.go 文件都属于且仅属于一个包,一个应用程序可以包含不同的包。

属于同一个包的源文件必须全部被一起编译,一个包即是编译时的一个单元,因此根据惯例,每个目录都只包含一个包。

如果对一个包进行更改或重新编译,所有引用了这个包的客户端程序都必须全部重新编译。

 

3、函数

func function_name( [parameter list] ) [return_types] {
   函数体
}
  • func:函数由 func 开始声明
  • function_name:函数名称,参数列表和返回值类型构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • 函数体:函数定义的代码集合。

实例

package main

import "fmt"

/* 定义函数swap,功能是实现两个参数的互换,有两个参数x和y,两个返回值的类型都是string类型 */
func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("var1", "var2")
   fmt.Println(a, b)
}

main() 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。main() 函数既没有参数,也没有返回类型。

在程序开始执行并完成初始化后,第一个调用(程序的入口点)的函数是 main.main()

函数里的代码(函数体)使用大括号 {} 括起来。

左大括号 { 必须与方法的声明放在同一行,这是编译器的强制规定,否则你在使用 gofmt 时就会出现错误

Go 语言虽然看起来不使用分号作为语句的结束,但实际上这一过程是由编译器自动完成,因此才会引发像上面这样的错误

 

对于大括号 {} 的使用规则在任何时候都是相同的(如:if 语句等)。

因此符合规范的函数一般写成如下的形式:

func functionName(parameter_list) (return_value_list) {
   …
}

4、 注释

单行注释://

多行注释:也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

5、 类型

变量(或常量)包含数据,这些数据可以有不同的数据类型,简称类型。使用 var 声明的变量的值会自动初始化为该类型的零值。类型定义了某个变量的值的集合与可对其进行操作的集合。

类型可以是基本类型,如:intfloatboolstring;结构化的(复合的),如:structarray、切片 (slice)、map、通道 (channel);只描述类型的行为的,如:interface

结构化的类型没有真正的值,它使用 nil 作为默认值。值得注意的是,Go 语言中不存在类型继承。

每个值都必须在经过编译后属于某个类型(编译器必须能够推断出所有值的类型),因为 Go 语言是一种静态类型语言。

你可能感兴趣的:(学习,服务器,golang,后端)