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)
}
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()
}