package main
import("fmt""strings")funcmain(){
userinfo :=make(map[string]string)
userinfo["name"]="zhangsan"
userinfo["age"]="20"
fmt.Println(userinfo)var userinfo2 =map[string]string{
"name":"wangwu","age":"30",}
fmt.Println(userinfo2)//map类型的切片
user :=make([]map[string]string,3,3)
fmt.Println(user[0])//map不初始化的值也是nilif user[0]==nil{
user[0]=make(map[string]string)
user[0]["name"]="dou"
user[0]["age"]="21"}if user[1]==nil{
user[1]=make(map[string]string)
user[1]["name"]="qi"
user[1]["age"]="22"}
fmt.Println(user)//值为切片的map
p :=make(map[string][]string)
p["hobby"]=[]string{
"eat","sleep",}
p["work"]=[]string{
"go","solidity",}
fmt.Println(p)//e.g. 统计一个句子中单词出现次数var str ="how do you do"
slice := strings.Split(str," ")
fmt.Println(slice)var Map =make(map[string]int)for_,v :=range slice{
Map[v]++}
fmt.Println(Map)}
3. func–part1
package main
import"fmt"import"sort"//标准形式funcsum(x int, y int)int{
return x + y
}//可变参数x是一个切片 若要和固定参数结合使用把固定参数放前面funcsumN(x ...int)int{
var sum intfor_, v :=range x {
sum += v
}return sum
}//多返回值funccal(x, y int)(int,int){
sum := x + y
sub := x - y
return sum, sub
}//封装函数实现切片的排序funcsortS(slice []int)[]int{
for i :=0; i <len(slice); i++{
for j := i +1; j <len(slice); j++{
if slice[i]> slice[j]{
temp := slice[i]
slice[i]= slice[j]
slice[j]= temp
}}}return slice
}//实现map对象按key排序funcsortMap(m map[string]string)string{
var sliceKey []stringfor k,_:=range m {
sliceKey =append(sliceKey, k)}
sort.Strings(sliceKey)var str stringfor_, v :=range sliceKey {
str += fmt.Sprintf("%v=>%v\t", v, m[v])}return str
}//自定义函数类型type calc func(int,int)intfuncadd(x, y int)int{
return x + y
}//函数作为参数funccalcPro(x, y int, op func(int,int)int)int{
returnop(x, y)}//函数作为返回值type calType func(int,int)intfuncdo(o string) calType {
switch o {
case"*":returnfunc(x, y int)int{
return x * y
}default:returnnil}}funcmain(){
sum :=sum(4,5)
fmt.Println(sum)
sumN :=sumN(1,2,3,4,5)
fmt.Println(sumN)
fmt.Println(sortS([]int{
2,6,3,9,4}))
m1 :=map[string]string{
"user":"hi","age":"20","gender":"man",}
fmt.Println(sortMap(m1))var c calc
c = add
d := add
fmt.Printf("%T %T\n", c, d)//main.calc func(int, int) int//匿名函数
j :=calcPro(3,4,func(i1, i2 int)int{
return i1 * i2
})
fmt.Println(j)
e :=do("*")
fmt.Println(e(9,9))}
3. func–part02
package main
import"fmt"//函数递归funcfn1(n int){
if n >0{
//fmt.Println(n) 10 9 8 7 ... 1
n--fn1(n)
fmt.Println(n)// 0 1 2 3 ... 9}}funcsum(n int)int{
if n >1{
return n +sum(n-1)}else{
return1}}/*
闭包:函数里嵌套一个函数 返回其中的函数
i是局部变量不污染全局 但会常驻内存
*/funcadder()func()int{
var i =10returnfunc()int{
return i+1}}//defer 延迟处理funcmain(){
fn1(10)
fmt.Println(sum(10))
fmt.Println(1)defer fmt.Println(2)defer fmt.Println(3)}