-
语言特色
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群的系统编程语言。
对于高性能分布式系统领域而言,Go 语言比大多数其它语言有着更高的开发效率,它提供了海量并行的支持。
Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。
Go 语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
-
学习随笔
编译执行
Go 语言源文件的扩展是 .go
要执行 Go 语言代码可以使用 go run 命令。
go run xxxxxx.go
要生成二进制文件可以使用 go build 命令
go build xxxxxx.go
基础语法
需要注意" { "不能单独放在一行,所以以下代码在运行时会产生错误:
package main
import "fmt"
func main()
{ // 错误,{ 不能在单独的行上
fmt.Println("Hello, World!")
}
cap 和 len 的区别
对于make slice而言,有两个概念需要搞清楚:长度跟容量。
- 容量表示底层数组的大小,长度是你可以使用的大小。
- 容量的用处在哪?在与当你用 append扩展长度时,如果新的长度小于容量,不会更换底层数组,否则,go 会新申请一个底层数组,拷贝这边的值过去,把原来的数组丢掉。也就是说,容量的用途是:在数据拷贝和内存申请的消耗与内存占用之间提供一个权衡。
- 而长度,则是为了帮助你限制切片可用成员的数量,提供边界查询的。所以用 make 申请好空间后,需要注意不要越界(越 len)
switch, Type Switch和fallthrough
switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。
Type Switch:
switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
Type Switch 语法格式如下:
switch x.(type){
case type:
statement(s);
case type:
statement(s);
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s);
}
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。
实例:
package main
import "fmt"
func main() {
switch {
case false:
fmt.Println("1、case 条件语句为 false")
fallthrough
case true:
fmt.Println("2、case 条件语句为 true")
fallthrough
case false:
fmt.Println("3、case 条件语句为 false")
fallthrough
case true:
fmt.Println("4、case 条件语句为 true")
case false:
fmt.Println("5、case 条件语句为 false")
fallthrough
default:
fmt.Println("6、默认 case")
}
}
以上代码执行结果为:
2、case 条件语句为 true
3、case 条件语句为 false
4、case 条件语句为 true