Golang基础介绍
一.Golang语言发展背景
二.基本语法
内容索引
1. 数据类型
2. 变量定义
3. 控制结构
4. 函数function
5. 结构体struct
6. 面向对象
7. 接口interface
8. 恐慌panic和恢复recover
9. 并发goroutine和channel
10. Import和package
11. main,init,test
12. 指针和内存分配(new和make)
三.Web小实例
• Ken Thompson:1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)
Golang语言发展背景
• Rob Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,
得主。他与Dennis Ritchie是Unix的原创者。
并共创出广泛使用的UTF-8 字元编码。
• Robert Griesemer:曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。
Go被设计为21世纪的C语言,同时它吸收了很多现在编程语言的优点。
基于BSD完全开源,所以能免费的被任何人用于适合商业目的。
它不是传统意义上的面向对象语言(没有类的概念),但它有接口(interface),由此实现多态特性。
函数(Function)是它的基本构成单元(也可以叫着面向函数的程序设计语言)。
语言层面对并发的支持
在语言层面加入对并发的支持,而不是以库的形式提供
更高层次的并发抽象,而不是直接暴露OS的并发机制。
支持交叉编译,并采用编译的编码:UTF-8
类型安全和内存安全:在指针类型,但不允许对指针进行操作
具有内存垃圾回收机制
支持网络通信、并发控制、并行计算和分布式计算。
在语言层面实现对多处理器(或多核)进行编程
基本类型:
布尔:bool
字符串:string
整数:
数据类型
int 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)
int8(-128 -> 127)
int16(-32768 -> 32767)
int32(-2,147,483,648 -> 2,147,483,647)
int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
无符号整数:
uint
uint8(0 -> 255)
uint16(0 -> 65,535)
uint32(0 -> 4,294,967,295)
uint64(0 -> 18,446,744,073,709,551,615)
浮点型(IEEE-754 标准):
没有float
float32(+- 1e-45 -> +- 3.4 * 1e38)
float64(+- 5 1e-324 -> 107 1e308)
复数
complex64 (32 位实数和虚数)
complex128 (64 位实数和虚数)
(rune是int32的别称,byte是uint8的别称)
复合类型
数组:[ ]string, [ ] int
切片: slice
字典: map
通道: channel
空:nil
java中的类型
List
Map
变量定义
使用var关键字是Go最基本的定义变量方式,与java语言不同的是Go把变量类型放在变量名后面:
//定义一个名称为“variableName”,类型为"type"的变量
var variableName type
定义多个变量
//定义三个类型都是“type”的变量
var vname1, vname2, vname3 type
定义变量并初始化值
//初始化“variableName”的变量为“value”值,类型是“type”
var variableName type = value
同时初始化多个变量
/*
定义三个类型都是"type"的变量,并且分别初始化为相应的值
vname1为v1,vname2为v2,vname3为v3
*/
var vname1, vname2, vname3 type= v1, v2, v3
用= 声明
var a int
var b bool
a = 15
b = false
用:= 声明
a := 15
b := false
变量定义
a := [3]int{1, 2, 3} // 声明了一个长度为3的int数组
b := [10]int{1, 2, 3} // 声明了一个长度为10的int数组,其中前三个元素初始化为1、2、3,其它默认为0
c := [...]int{4, 5, 6} // 可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度
len 获取slice的长度
append 向slice里面追加一个或者多个元素
Array
Slice
Map
slice := []byte {'a', 'b', 'c', ‘d’}
// 声明一个数组
var array = [10]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
// 声明两个slice
var aSlice
// 演示一些简便操作
aSlice = array[:3] // 等价于aSlice = array[0:3] aSlice包含元素: a,b,c
aSlice = array[5:] // 等价于aSlice = array[5:10] aSlice包含元素: f,g,h,i,j
aSlice = array[:] // 等价于aSlice = array[0:10] 这样aSlice包含了全部的元素
// 声明一个key是字符串,值为int的字典,这种方式的声明需要在使用之前使用make初始化
var numbers map[string]int
// 另一种map的声明方式
numbers := make(map[string]int)
numbers["one"] = 1 //赋值
numbers["ten"] = 10 //赋值
numbers["three"] = 3
key:val的方式初始化值
delete删除map的元素
if
goto
控制结构
if integer == 3 {
fmt.Println("The integer is equal to 3")
} else if integer < 3 {
fmt.Println("The integer is less than 3")
} else {
fmt.Println("The integer is greater than 3")
}
// 计算获取值x,然后根据x返回的大小,判断是否大于10
if x := computedValue(); x > 10 {
fmt.Println("x is greater than 10")
} else {
fmt.Println("x is less than 10")
}
//这个地方如果这样调用就编译出错了,因为x是条件里面的变量
fmt.Println(x)
func myFunc() {
i := 0
Here: //这行的第一个词,以冒号结束作为标签
println(i)
i++
goto Here //跳转到Here去
}
for
sum := 0;
for index:=0; index < 10 ; index++ {
sum += index
}
fmt.Println("sum is equal to ", sum)
sum := 1
for sum < 10 {
sum += sum
}
for k,v:=range map {
fmt.Println("map's key:",k)
fmt.Println("map's val:",v)
}
控制结构
switch
i := 10
switch i {
case 1:
fmt.Println("i is equal to 1")
case 2, 3, 4:
fmt.Println("i is equal to 2, 3 or 4")
case 10:
fmt.Println("i is equal to 10")
default:
fmt.Println("All I know is that i is an integer")
}
switch默认相当于每个case最后带有break,
匹配成功后跳出整个switch;
可以使用fallthrough执行后面的case
integer := 6
switch integer {
case 4:
fmt.Println("The integer was <= 4")
fallthrough
case 5:
fmt.Println("The integer was <= 5")
fallthrough
case 6:
fmt.Println("The integer was <= 6")
fallthrough
case 7:
fmt.Println("The integer was <= 7")
fallthrough
case 8:
fmt.Println("The integer was <= 8")
fallthrough
default:
fmt.Println("default case")
}
输出
The integer was <= 6
The integer was <= 7
The integer was <= 8
default case