func main() { var str string = "This is an example of a string" fmt.Printf("T/F? Does the string \"%s\" have prefix %s? ", str, "Th") fmt.Printf("%t\n", strings.HasPrefix(str, "Th")) }
var week time.Duration funcmain() { t := time.Now() fmt.Println(t) // e.g. Wed Dec 21 09:52:14 +0100 RST 2011 fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year()) // 21.12.2011 t = time.Now().UTC() fmt.Println(t) // Wed Dec 21 08:52:14 +0000 UTC 2011 fmt.Println(time.Now()) // Wed Dec 21 09:52:14 +0100 RST 2011 // calculating times: week = 60 * 60 * 24 * 7 * 1e9// must be in nanosec week_from_now := t.Add(time.Duration(week)) fmt.Println(week_from_now) // Wed Dec 28 08:52:14 +0000 UTC 2011 // formatting times: fmt.Println(t.Format(time.RFC822)) // 21 Dec 11 0852 UTC fmt.Println(t.Format(time.ANSIC)) // Wed Dec 21 08:56:34 2011 // The time must be 2006-01-02 15:04:05 fmt.Println(t.Format("02 Jan 2006 15:04")) // 21 Dec 2011 08:52 s := t.Format("20060102") fmt.Println(t, "=>", s) // Wed Dec 21 08:52:14 +0000 UTC 2011 => 20111221 }
带多个返回值的函数错误测试
value, err := pack1.Function1(param1) if err != nil { fmt.Printf("An error occured in pack1.Function1 with parameter %v", param1) return err } // 未发生错误,继续执行:
switch结构
switch i { case0: // 空分支,只有当 i == 0 时才会进入分支 case1: f() // 当 i == 0 时函数不会被调用 }
switch i { case0: fallthrough case1: f() // 当 i == 0 时函数也会被调用 }
new() 和 make() 均是用于分配内存:new() 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和管道)。它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针。它也可以被用于基本类型:v := new(int)。make(T) 返回类型 T 的初始化之后的值,因此它比 new() 进行更多的工作。new() 是一个函数,不要忘记它的括号。
copy()、append()
用于复制和连接切片
panic()、recover()
两者均用于错误处理机制
print()、println()
底层打印函数,在部署环境中建议使用 fmt 包
complex()、real ()、imag()
用于创建和操作复数
回调
go的回调例子:
package main
import ( "fmt" )
funcmain() { callback(1, Add) }
funcAdd(a, b int) { fmt.Printf("The sum of %d and %d is: %d\n", a, b, a+b) }
funccallback(y int, f func(int, int)) { f(y, 2) // this becomes Add(1, 2) }
输出是:
The sum of 1 and 2 is: 3
匿名函数
package main
import"fmt"
funcmain() { f() } funcf() { for i := 0; i < 4; i++ { g := func(i int) { fmt.Printf("%d ", i) } g(i) fmt.Printf(" - g is of type %T and has value %v\n", g, g) } }