Golang的学习笔记。目前初步计划是学习 Go-tour
基础语法部分
数据类型
string中单独一个字符’char’,是’byte’,也就是’uint8’。
for
go中的for与while是相同的。
defer
defer 语句会延迟函数的执行直到上层函数返回。
延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。
package main import "fmt" func main() { defer fmt.Println("world") //defer fmt.Println("!") fmt.Println("hello") }
很有趣的一个特性,记录一下。
注释掉的内容会输出
hello ! world
延迟的函数调用被压入一个栈中。当函数返回时, 会按照后进先出的顺序调用被延迟的函数调用。
range
for 循环的 range 格式可以对 slice 或者 map 进行迭代循环。
当使用 for 循环遍历一个 slice 时,每次迭代 range 将返回两个值。 第一个是当前下标(序号),第二个是该下标所对应元素的一个拷贝。
slice
一个关于slice的练习 https://tour.go-zh.org/moretypes/15
灰度值?
map
map的练习 https://tour.go-zh.org/moretypes/20
解答:
!!!其中,make的用法需要尤为记忆。
方法
Go 没有类。然而,仍然可以在结构体类型上定义方法。
方法接收者 出现在 func 关键字和方法名之间的参数中。
package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }
func 后面紧跟(v *Vertx)
,可以看作类方法。
错误
https://tour.go-zh.org/methods/8
Reader
Reader
rot-Reader
Http处理
package main import ( "fmt" "log" "net/http" ) type Hello struct{} func (h Hello) ServeHTTP( w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello!") } func main() { var h Hello err := http.ListenAndServe("localhost:4000", h) if err != nil { log.Fatal(err) } }
练习:
Image
image在golang中的定义是:
package image type Image interface { ColorModel() color.Model Bounds() Rectangle At(x, y int) color.Color }
练习:
goroutine
练习:
本文保留所有权力,转载请联系作者。