package main //package是必须写的, package内大写字母开头的函数是直接可以被外部引用的 // import ( "fmt" //格式化库 "time" //时间库 ) var c chan string var ci chan string var t int64 func main() { //array, slice a1 := []int{1, 2, 3, 4, 5, 6} // c语言: int[] a1 = {1,2,3,4,5}; fmt.Println(a1) //[1 2 3 4 5 6] a2 := make([]int, len(a1)) //make是动态分配 fmt.Println(a2) //[0 0 0 0 0 0] //var a3 [len(a1)]int //array 方式声明不能使用表达式 len(a1) const size = 5 var a3 [size]int //只能为常量 fmt.Println(a3) //[0 0 0 0 0] a4 := a1[2:4] //从序号2到4的值创建 fmt.Println(a4) //[3 4 5] a5 := a4[:4] //后四个 fmt.Println(a5) //[3 4 5 6] a1[4] = 100 fmt.Println(a5) //[3 4 100 6] a2-a5依然指向a1, 所以,这里a5[4]为100 //类似C 语言的指针,可以使用new 分配空间并赋值, 或者指向另外一个同类型的值 i := 9 var p *int //声明 p = new(int) //分配 *p = 11 fmt.Println(*p) fmt.Println(p) p = &i //指向i fmt.Println(*p) *p = 10 fmt.Println(*p) //map monthdays := map[string]int{ "Jan": 31, "Feb": 28, "Mar": 31, "Apr": 30, "May": 31, "Jun": 30, "Jul": 31, "Aug": 31, "Sep": 30, "Oct": 31, "Nov": 30, "Dec": 31, } monthdays["Feb"] = 29 for k, v := range monthdays { fmt.Println(k, v) } var p2 *[]int = new([]int) *p2 = make([]int, 3) //自定义类型 h := Hero("seven", 100) fmt.Println(h.name) fmt.Println(*h) //函数数组 var xs = map[int]func() int{ 1: func() int { return 10 }, 2: func() int { return 20 }, 3: func() int { return 30 }, } var arr [10]int arr[1] = 22 for k, v := range xs { fmt.Println(k) fmt.Println(v()) } //异步 t = time.Now().UnixNano() fmt.Println(t) c = make(chan string) ci = make(chan string) var sql_result string var read_file_result string go ready_read_file("read file", 5) go ready_sql("sql", 2) fmt.Println("I'm waiting, but not too long") read_file_result = <-ci sql_result = <-c fmt.Println("sql_result:" + sql_result) fmt.Println("read_file_result:" + read_file_result) t = time.Now().UnixNano() fmt.Println(t) } type hero struct { name string hp int } func Hero(name string, hp int) *hero { h := new(hero) if name != "" && hp > 0 { *h = hero{name, hp} return h } return h } func ready_sql(w string, sec int) string { time.Sleep(time.Duration(sec) * time.Second) t = time.Now().UnixNano() fmt.Println(t) fmt.Println(w, "{SQL}}!") c <- w return w } func ready_read_file(w string, sec int) string { time.Sleep(time.Duration(sec) * time.Second) t = time.Now().UnixNano() fmt.Println(t) fmt.Println(w, "{FILE}}!") ci <- w return w }
浙公网安备 33010602011771号