golang……wenku…..
这次的学习笔记博文写的很简洁, 很喜欢这种简洁.
:=是声明符号, 左边必须是一个新声明的变量- 声明变量:
var b string = "abc", 顺序有所不同, 变量类型在变量后面. - iota 特殊常量, 在const 关键字出现时将被重置为 0. const 中每新增一行常量声明将使 iota 计数一次.
$返回变量存储地址,*指针变量- select 语句: select 是go 中一个控制结构, 类似于用于通信的 switch 语句, 每个 case 必须是一个通信操作, 要么是发送要么是接受, select 随机执行一个可运行的 case, 如果没有 case 可运行, 他将阻塞, 所以应当有一个默认的子句是可运行的.
- 无限循环语句
for true{ ... } - golang 中, 左花括弧不可单独为一行, 右花括弧可以单独为一行.
- for 循环的 range 格式:
for key, value := range oldMap{ newMap[key]=value } - 函数:
func max(num1, num2 int) int { ... return result }- go 语言可返回多个值
- 传递类型 有 值传递 和 引用传递
- 引用传递函数声明:
func swap (x *int , y * int ){ } - 引用传递函数调用:
swap(&a, &b)
- go 语言的匿名函数可作为闭包
数据结构…..
- 数组: 声明:
var balance =[5]float32 { 1000.0, 2.0, 3.4, 7.0, 50.0 }不设数组大小, 则
var balance =[...]float32 { ... } - 指向指针的指针. 一个指针变量存放的 又是另一个指针变量的地址,
var ptr ** int(指向指针的 指针变量为整型) - go 空指针的值为
nil - Go 语言结构体
type Books struct { title string author string subject string book_id int } func main() { // 创建一个新的结构体 fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407}) }- 访问结构体成员, 使用点号
.操作符:Book1.title = "Go 语言"越来越觉得, 这个golang的教程像CPP..指针什么的, 指针的指针什么的.
- 访问结构体成员, 使用点号
- 切片(Slice)
golang 数组的长度不可改变, 而切片(动态数组)的长度是不固定的.
func main() { //声明一个切片, int为类型, 3为初始长度, 5为最大长度 var numbers = make([]int,3,5) printSlice(numbers) } func printSlice(x []int){ //len()返回切片长度, cap()返回切片最长可达到的长度 fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) }- 输出:
len=3 cap=5 slice=[0 0 0] - 输出切片:
printSlice(numbers) - 向切片中添加元素:
numbers = append(numbers, 2,3,4) printSlice(numbers) - 拷贝 numbers 的内容到 numbers1
copy(numbers1,numbers)
- 输出:
-
golang 空白符
_ - Map(集合)
- key-value 对
- 实例:
//两种创建集合的方式 var countryCapitalMap map[string]string /*创建集合 */ countryCapitalMap = make(map[string]string) /* map插入key - value对,各个国家对应的首都 */ countryCapitalMap [ "France" ] = "Paris" countryCapitalMap [ "Italy" ] = "罗马" countryCapitalMap [ "Japan" ] = "东京" countryCapitalMap [ "India " ] = "新德里" /*使用键输出地图值 */ for country := range countryCapitalMap { fmt.Println(country, "首都是", countryCapitalMap [country]) } - delete() 函数用于删除集合的元素
菜鸟教程 golang 竟然还讲递归… cpp
- 语言类型转换
整型转换成浮点型
float32(sum) - 语言接口
package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone struct { } func (nokiaPhone NokiaPhone) call() { fmt.Println("I am Nokia, I can call you!") } type IPhone struct { } func (iPhone IPhone) call() { fmt.Println("I am iPhone, I can call you!") } func main() { var phone Phone phone = new(NokiaPhone) phone.call() phone = new(IPhone) phone.call() }输出:
I am Nokia, I can call you! I am iPhone, I can call you!- 我们定义了一个接口Phone,接口里面有一个方法call()。
- Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
- 错误处理
没看, 因为觉得目前用不到, 以后如果有需要再看.
- go 并发
func main() { //say()为前面代码定义的函数. 两个say()函数会同时进行--并发 go say("world") say("hello") }- 通道(channel)
ch <- v // 把 v 发送到通道 ch v := <-ch // 从 ch 接收数据 // 并把值赋给 v声明通道:
ch := make(chan int)个人理解: 所谓通道就是 先把多个数据放进通道里, 再在输出时输出, 有点类似于栈
- 通道缓冲区
通道可以设置缓冲区,通过 make 的第二个参数指定缓冲区大小:
ch := make(chan int, 100) - Go 遍历通道与关闭通道
关闭:
close(c)Go 通过 range 关键字来实现遍历读取到的数据:
for i := range c { fmt.Println(i) }
- 通道(channel)