Golang学习笔记

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

练习:


本文保留所有权力,转载请联系作者。

go  google 

也可以看看