Go 编程查看标准包函数方法: ctrl + . + h 或者: ctrl + . + g
基础知识
- 运行方式()
Golang提供了go run“解释”执行和go build编译执行两种运行方式,所谓的“解释”执行其实也是编译出了可执行文件后才执行的。
- Package管理()
Golang约定:我们可以用./或../相对路径来引自己的package;如果不是相对路径,那么go会去$GOPATH/src下查找。
- 格式化输出()
类似C、Java等语言,Golang的fmt包提供了格式化输出功能,而且像%d、%s等占位符和\t、\r、\n转义也几乎完全一致。但Golang的Println不支持格式化,只有Printf支持,所以我们经常会在后面加入\n换行。此外,Golang加入了%T打印值的类型,%v打印数组等集合的所有元素。
Go语言基本类型
- 值类型(基础类型)
- 0.rune // int32 的别名
1.bool,一个字节,值是true或者false,不可以用0或者1表示(java中boolean占用4个字节,而boolean作为数组出现时,每个boolean占用1个字节)
2.int/uint(带符号为与不带符号位的int类型):根据平台不同是32位或者64位
3.intx/uintx:x代表任意位数,例如:int3,代表占3bit的int类型
4.byte占用8位,一个字节,相当于uint8,不带符号位
5.floatx:由于没有double类型,所以float64就是double。float32小数精确到7位,float64小数精确到15位。
6.complex64/complex128:复数类型
7.uintptr:保存指针用的类型,也是随着平台改变而改变,因为指针的长度就是随平台而变。
8.其他类型值:array,struct,string
- 0.rune // int32 的别名
- 引用类型
- slice,map,chan
- 接口类型
- interface
- 函数类型
- func
- 值类型(基础类型)
变量和常量()
1.虽然Golang是静态类型语言,却用类似JavaScript中的var关键字声明变量。而且像同样是静态语言的Scala一样,支持类型自动推断。有一点很重要的不同是:如果明确指明变量类型的话,类型要放在变量名后面。这有点别扭吧?!后面会看到函数的入参和返回值的类型也要这样声明。
2.短变量声明
在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
注意: 函数外的每个语句都必须以关键字开始( var 、 func 等等), 因此 := 结构不能在函数外使用。- 类型转换
表达式 T(v) 将值 v 转换为类型 T.
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
//或者这样写
i := 42
f := float64(i)
u := uint(f)
7. 常量
常量的声明与变量类似,只不过是使用 const 关键字。
常量可以是字符、字符串、布尔值或数值。
常量不能用 := 语法声明。
const ( f = 12i )
func main(){
const ( a = 2 b = 3.12 c = true d = "sssss" )
fmt.Println(a, b, c, d, f)
}
8. 控制语句:
作为最基本的语法要素,Golang的各种控制语句也是特点鲜明。在对C继承发扬的同时,也有自己的想法融入其中;
* if/switch/for 的条件部分都没有圆括号(可以写),但必须有花括号。
* switch的case中不需要break(默认break);
* 如果case语句后,想继续下一个case语句执行,需加入fallthrogh
* 没有条件的 switch 同 switch true 一样。
* switch的case条件可以是多个值。
* Golang中没有while。
9. 分号和花括号()
注意: “分号和花括号 “
分号由词法分析器在扫描源代码过程自动插入的,分析器使用简单的规则:如果在一个新行前方的最后一个标记是一个标识符(包括像int和float64这样的单词)、一个基本的如数值这样的文字、或break continue fallthrough return ++ – ) }中的一个时,它就会自动插入分号。 分号的自动插入规则产生了“蝴蝶效应”:所有控制结构的左花括号不都能放在下一行。因为按照上面的规则,这样做会导致分析器在左花括号的前方插入一个分号,从而引起难以预料的结果。所以Golang中是不能随便换行的。
10. 函数;
* 1. func关键字。
* 2. 最大的不同就是“倒序”的类型声明。
* 3. 不需要函数原型,引用的函数可以后定义。这一点很好,不类似C语言里要么将“最底层抽象”的函数放在最前面定义,要么写一堆函数原型声明在最前面。
* 4. 函数的定义:
func 关键字 函数名(参数1..)(返回值1, 返回值2 ){
函数体
}
如:
func add(a int, b int)(ret int, err int){ return a+b, b }
* 5. 函数也是值,它们可以像其它值一样传递。函数值可以用作函数的参数或返回值。
func main() {
toSqrt := func(x, y float64)float64 { return math.Sqrt(x*x + y*y) }
fmt.Println(toSqrt(12, 5))
fmt.Println(autoSqrt(toSqrt))
fmt.Println(autoSqrt(math.Pow))
}
func autoSqrt(fn func(x, y float64) float64) float64 {
return fn(4, 3)
}
* 6. 函数的闭包
Go 函数可以是一个闭包。闭包是一个函数值,它引用了其函数体之外的变量。 该函数可以访问并赋予其引用的变量的值,换句话说,该函数被“绑定”在了这些变量上。
11. 集合()基本数据结构 slice, struct
* 1. Golang提供了数组和Map作为基本数据结构:
* 2. 数组中的元素会自动初始化,例