1 | func functionname(parametername1 type, parametername2 type) returntype { |
1 | func functionname(parametername1, parametername2 type) returntype { |
1 | func functionname(para1 type1, para2 type2) (returntype1, returntype2, ...) { |
area, perimeter
:1 | func rectProps(length, width float64) (area, perimeter float64) { |
_
在 Go 中被用作空白符,可以用作表示任何类型的任何值。1 | area, _ := rectProps(10.8, 5.6) // 返回值周长被丢弃 |
package packagename
指定了某一源文件属于一个包,它应该放在每一个源文件的第一行。
main
包和自定义包目录结构(属于某一个包的源文件,都应该放置于一个单独命名的文件夹里,且应该用包名命名文件夹名):
1 | src |
导入自定义包:import packagepath
,必须指定自定义包 packagename
相对于工作区 src
文件夹的相对路径,如:import "geometry/rectangle"
。
导出名字:在 Go 中,任何 以大写字母开头的变量或者函数都是被导出的名字,其它包只能访问被导出的函数和变量(即,如果想在包外访问一个函数,它应该首首字母大写。也就是说,小写字母开头的变量或函数类似于 C 语言中被 static 修饰的变量或函数)。
init
函数:所有包都可以包含一个 init
函数,init
函数不应该有任何返回值类型和参数。
包的初始化顺序:1)首先初始化 被导入的 包;2)然后初始化 包级别(package level)的变量 ;3)紧接着 调用 init
函数,按照编译器解析它们的顺序进行调用。
如果一个包导入了另一个包,会先初始化 被导入的 包。
尽管一个包可能会被导入多次,但是它们 只会被初始化一次。
空白标识符导入包中的使用:导入了包,却不在代码中使用它,这在 Go 中是非法的,会抛出 xxx.go:6: imported and not used: packagename_yyy
。
为了避免这种程序错误,通常会在函数外调用其中的一个函数,并将返回值赋给 _
变量,把这一操作称为「错误屏蔽器」。
同时,有时我们并不想使用导入的包中的任一函数或变量,只是 为了确保它进行初始化,这种情况可以使用空白标识符 _
,如 import _ "geometry/rectangle"
。这样在不调用包中的函数或变量时,也不会报错。
if
状态下仅有一条语句,也必须加 { }
1 | if condition { |
if
还有另外一种形式,它包含一个 statement
可选语句部分,该组件在条件判断之前运行,语法为:if statement; condition { }
,其中 statement
的作用域仅在 if-else
范围内。1 | func main() { // num 的范围仅限于 if else 代码块 |
else
必须键入在 }
后面,不能另取一行键入,因为 Go 语言默认在每条语句结束时插入一个分号,但 if else
是一个整体。for
,没有 while
和 do while
循环。1 | for initialisation; condition; post { |
for
循环的三个组成部分,即初始化、条件和 post 都是可选的(可有可无),如下示例都可以(分号也是可以省略的)。1 | for ; i <= 10; { |
break
为跳出循环,continue
为不执行后续语句,进入下一次循环。switch
是一个条件语句,它可以被认为是替代多个 if else
子句的常用方式,case
不允许出现重复项。1 | func main() { |
先声明变量再使用:switch varname := xxx; varname {...}
,此时的 varname
变量的作用域仅限于当前 switch
内。
无表达式的 switch
:在 switch 语句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个 switch 语句 等同于 switch true,并且 每个 case 表达式都被认定为有效,相应的代码块也会被执行。
fallthrough 关键字:fallthrough
语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中,而不会跳出 switch。
1 | func main() { |
学习链接:https://studygolang.com/subject/2,感谢如此优秀的教程!