review-2

UNO. 彩色terminal (windows下用gitbash之类的玩意儿)

package main

import (
    "github.com/fatih/color"
    "fmt"
)

func main() {
    fmt.Println("This", color.RedString("warning"), "should be not negelected")

}

DOS. 指针的使用

package main

import (
    "fmt"
)

func doToIt(a *[]string){
    *a = append(*a, "hello")
}

func main() {
    var a []string // yes. there is one. 
    doToIt(&a)
    fmt.Printf("%+v\n", a)

    b := new([]string)

    *b = []string{"uno", "cinco", "ocho"}
    fmt.Printf("%p: %+v\n", b, *b)

}

TRES.array的复制

package main

import (
    "fmt"
)

func main() {
    a:=[]string{"uno","dos","tres"}
    //b := a[:]  // a and b are still refer to the samce slicei
    var b []string
    b = append(b, a...)

    a[1] = "cinco"
    fmt.Printf("%p: %+v\n", &a, a)
    fmt.Printf("%p: %+v\n", &b, b)


    fmt.Println()

    c := new([]string)
    *c = append(*c, b...)
    // change to b 
    b[2] = "seis"

    fmt.Printf("%p: %+v\n", &b, b)
    fmt.Printf("%p: %+v\n", c, *c)
}

CUATRO.就地修改

package main

import (
    "fmt"
)

func main() {
    a := []string{"uno", "dos", "tres"}
    for i, _ := range a {
        //v += ">"
        a[i] += ">"
    }
    fmt.Printf("%+v\n", a)
}

CINCO.range循环中删除map元素

package main

import (
    "fmt"
)

func main() {
    fmt.Println("happy")
    a := map[string]bool{
        "uno":  true,
        "dos":  false,
        "tres": true,
    }
    for k, v := range a {
        _ = v
        fmt.Printf("%v\n", a[k])
        delete(a, k)
    }

    fmt.Printf("%+v\n", a)

}

refer to
https://stackoverflow.com/questions/23229975/is-it-safe-to-remove-selected-keys-from-golang-map-within-a-range-loop

SEIS.range over

package main

import (
    "fmt"
)

func f() []string {
    fmt.Printf("multiple times??\n")
    //return nil
    return []string{"uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez"}
}

func main() {
    for _, v := range f() {
        fmt.Println(v)
    }
}

SIETE.深入理解引用值

package main

import (
    "fmt"
)

func f1(a []string) {
    for i, f := range a {
        a[i] = f + ":>>"
    }
}

func main() {
    a1 := []string{"uno", "dos", "tres"}
    f1(a1)
    fmt.Printf("%+v\n", a1)
}

OCHO.深入理解append

package main

import (
    "fmt"
)

func main() {
    //strs:=append(nil, "str")
    // good to go
    strs := append([]string(nil), "str")
    fmt.Printf("%+v\n", strs)

}

类型很重要

NUEVE.行内调用. (创造scope)

package main

import (
    "fmt"
)

func main() {
    fmt.Printf("%v\n", func() int {
        return 100
    }())
    fmt.Println("good to go")
}

DIEZ.函数对象

package main

import (
    "fmt"
)

type xstru struct {
    str string
}

func (x *xstru) doUpdate(s string) {
    x.str = s
}
func (x *xstru) printNow() {
    fmt.Printf("This is <%v>\n", x.str)
}

func f1(receiver func(string)) {
    receiver("fuck")
}

func main() {
    var me xstru
    f1(me.doUpdate)
    me.printNow()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值