概述
gloang的特性
- 极简的部署方式,依赖极少;可以直接编译成机器码。
- 静态类型的语言
- 语言层面支持并发
- 强大的标准库
- 面向对象
- 跨平台
缺点
- 包管理不好,大部分包都在GitHub上面
- 所有的Exception都用Error来处理
基础语法
Hello World
入口文件的package必须是main,与文件名无关。
- golang中的分号是可选的,建议不加
- 不允许声明不使用的变量,引用不使用的包
- 方法体的花括号强制要求和方法名在同一行
1 2 3 4 5 6 7
| package main
import "fmt"
func main() { fmt.Println("Hello, World") }
|
变量的声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // 方法一:默认值是0 var age int
// 方法二:赋初始值 var age int = 18
// 方法三:类型推断 var age = 100;
// 查看变量类型 fmt.Printf("age type is %T", age)
// 方法四:省略var关键字 age := 18
|
- 方法四不能用于全局变量的声明,只能在方法体内部使用
- 可以在一行声明多个变量
常量的声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const age int = 18
// 在枚举中使用iota,iota每行都会加1(相当于游标) const ( CAT = 10 * iota DOG )
func main() { fmt.Printf("刚满%d岁\n", age) fmt.Printf("猫猫刚满%d岁\n", CAT) fmt.Printf("狗狗刚满%d岁\n", DOG) }
|
函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| func func0(name string) string { return name }
func func1() (string, int) { return "equator", 18 }
func func2() (name string, age int) { name = "jetty" age = 20 return }
func main() { fmt.Println("hi", func0("equator"))
name, age := func1() fmt.Println(name, "刚满", age, "岁")
n, a := func2() fmt.Println(n, "刚满", a, "岁") }
|
模块化
- 每个文件实际上有个init方法,可以做一些初始化操作
- 包的导入
1 2 3 4 5
| import { "project/folder1/lib1" _ "project/folder1/lib2" // 匿名导入,仅执行init方法 . "project/folder1/lib2" // 全局导入 }
|