-
包声明
package packageName
注意:包名和文件名无关 一个文件夹内的代码必须为一个包名 否则编译报错
-
引入包
import ( "fmt" "./filepath" )
import 为() 一个包换一行 可以是文件夹路径
-
函数
func FunctionNane(a,b int) int { return a + b } func function_name( [parameter list] ) [return_types] { //函数体 }
说明:
-
func:函数由 func 开始声明
-
function_name:函数名称,函数名和参数列表一起构成了函数签名。
-
parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
-
return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
-
函数体:函数定义的代码集合。
-
-
函数可以返回多个值
注意:错误语法格式
func main() { // 错误,{ 不能在单独的行上 fmt.Println("Hello, World!") }
-
变量
声明变量的一般形式是使用 var 关键字:var identifier type
示例:
var a int var b bool var str string 你也可以改写成这种形式: //全局变量的声明一般这样写 var ( a int b bool str string )
:= 的含义
// = 使用必须使用先var声明例如: var a a=100 //或 var b = 100 //或 var c int = 100 // := 是声明并赋值,并且系统自动推断类型,不需要var关键字 d := 200 /* 定义三个变量,它们分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 然后Go会根据其相应值的类型来帮你初始化它们 */ // var vname1, vname2, vname3 = v1, v2, v3 var number1, number2, number3 = 1, 2, 3 /* 定义三个变量,它们分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 编译器会根据初始化的值自动推导出相应的类型 */ // vname1, vname2, vname3 := v1, v2, v3 number1, number2, number3 := 1, 2, 3
注意:不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用 var 方式来定义全局变量。
-
语句 & 表达式
-
注释
//单行注释 /* 多行注释 */
-
程序入口
一个项目一个 main 包和 func main(){} 方法 为入口
-
main 启动
Go 语言的包与文件夹是一一对应的,它具有以下几点特性:
- 一个目录下的同级文件属于同一个包。
- 包名可以与其目录名不同。
- main 包是 Go 语言程序的入口包,一个 Go 语言程序必须有且仅有一个 main 包。
- 如果一个程序没有 main 包,那么编译时将会出错,无法生成可执行文件。
-
main 包下有多个文件时,执行 go run 和 go build 可能报错 找不到函数
linux 下 执行
go run *.go
windows 下 执行报错
需要执行
go run ./
等同于 linuxgo run *.go
-
go 语言的类型
golang 中分为值类型和引用类型(C 语言的指针)
值类型分别有:int 系列、float 系列、bool、string、数组和结构体
引用类型有:指针、slice 切片、管道 channel、接口 interface、map、函数等
值类型的特点是:变量直接存储值,内存通常在栈中分配
引用类型的特点是:变量存储的是一个地址,这个地址对应的空间里才是真正存储的值,内存通常在堆中分配