Map(汇合)

Map 是一种无序的键值对的汇合。Map 最重要的一点是通过 key 来疾速检索数据,key 相似于索引,指向数据的值。
Map 是一种汇合,所以咱们能够像迭代数组和切片那样迭代它。不过,Map 是无序的,咱们无奈决定它的返回程序,这是因为 Map 是应用 hash 表来实现的。

申明变量,默认 map 是 nil

var hash map[int]int

应用 make 函数

hash:=make(map[int]int)

实例:

country:=make(map[string]string)country["China"] = "中国"country["Japan"] = "日本"fmt.Println(country) //map[China:中国 Japan:日本]

delete

country:=make(map[string]string)country["China"] = "中国"country["Japan"] = "日本"delete(country,"Japan")fmt.Println(country) //map[China:中国

递归函数

递归,就是在运行的过程中调用本人。

实例1:阶乘

var i int =5fmt.Println(factorial(i)) //120func factorial(n int)int{    if n>0{        return  n*factorial(n-1)    }    return 1}

实例2:生成斐波那契数列

var i int = 5fmt.Println(fibonacci(i)) //5func fibonacci(n int)int{    if n<2{        return n    }    return fibonacci(n-1)+fibonacci(n-2)}
var user Usersuser = new(User)user.call()user = new(Vip)user.call()type Users interface {    call()}type User struct {}type Vip struct {}func (vip,Vip) call() {    fmt.Println("Vip User")}func (user User) call() {    fmt.Println("User")}

错误处理

Go 语言通过内置的谬误接口提供了非常简单的错误处理机制。

result, err:= Sqrt(-1)if err != nil {   fmt.Println(err)}

定义报错接口

type error interface {    Error() string}func Sqrt(f float64) (float64, error) {    if f < 0 {        return 0, errors.New("不能为正数")    }    return error}

GOlang练习题

1.四个数进行排列组合。

有 1、2、3、4 这四个数字,能组成多少个互不雷同且无反复数字的三位数?都是多少?

func threeTotal()int{    ret:=0    for i:=1;i<5;i++{        for k:=1;k<5;k++{            for j:=1;j<5;j++{                if i!=k && k!=j && j!=i{                    ret++                    fmt.Println("组成的组合有i=",i,",k=",k,",j=",j)                }            }        }    }    return ret}threeTotal() //24// 组成的组合有i= 1 ,k= 2 ,j= 3// 组成的组合有i= 1 ,k= 2 ,j= 4// 组成的组合有i= 1 ,k= 3 ,j= 2// 组成的组合有i= 1 ,k= 3 ,j= 4// 组成的组合有i= 1 ,k= 4 ,j= 2// 组成的组合有i= 1 ,k= 4 ,j= 3// 组成的组合有i= 2 ,k= 1 ,j= 3// 组成的组合有i= 2 ,k= 1 ,j= 4// 组成的组合有i= 2 ,k= 3 ,j= 1// 组成的组合有i= 2 ,k= 3 ,j= 4// 组成的组合有i= 2 ,k= 4 ,j= 1// 组成的组合有i= 2 ,k= 4 ,j= 3// 组成的组合有i= 3 ,k= 1 ,j= 2// 组成的组合有i= 3 ,k= 1 ,j= 4// 组成的组合有i= 3 ,k= 2 ,j= 1// 组成的组合有i= 3 ,k= 2 ,j= 4// 组成的组合有i= 3 ,k= 4 ,j= 1// 组成的组合有i= 3 ,k= 4 ,j= 2// 组成的组合有i= 4 ,k= 1 ,j= 2// 组成的组合有i= 4 ,k= 1 ,j= 3// 组成的组合有i= 4 ,k= 2 ,j= 1// 组成的组合有i= 4 ,k= 2 ,j= 3// 组成的组合有i= 4 ,k= 3 ,j= 1// 组成的组合有i= 4 ,k= 3 ,j= 2

2.企业发放的奖金依据利润提成的计算

企业发放的奖金依据利润提成。利润(I)低于或等于 10 万元时,奖金可提成 10%;利润高于 10 万元,低于 20 万元,低于 10 万元的局部按 10% 提成,高于 10 万元的局部,可提成 7.5%。20 万到 40 万之间时,高于 20 万元的局部,可提成 5%;40 万到 60 万之间时高于 40 万元的局部,可提成 3%;60 万到 100 万之间时,高于 60 万元的局部,可提成 1.5%,高于 100 万元时,超过 100 万元的局部按 1% 提成。从键盘输入当月利润 I,求应发放奖金总数?

func fundSum()float32 {    var I float32 = 0.0    var bonus float32 = 0.0    fmt.Print("输出利润:")    fmt.Scanf("%f\n", &I)    switch{    case I > 1000000:        bonus = (I - 1000000) * 0.01        I = 1000000        fallthrough    case I > 600000:        bonus += (I - 600000) * 0.015        I = 600000        fallthrough    case I > 400000:        bonus += (I - 400000) * 0.03        I = 400000        fallthrough    case I > 200000:        bonus += (I - 200000) * 0.05        I = 200000        fallthrough    case I > 100000:        bonus += (I - 100000) * 0.075        I = 100000        fallthrough    default:        bonus += I * 0.1    }    fmt.Printf("奖金总额为%f\n",bonus)    return bonus}fundSum()//输出利润:888222//奖金总额为37823.328125

3.计算齐全平方数

一个整数,它加上 100 后是一个齐全平方数,再加上 168 又是一个齐全平方数,请问该数是多少?

func perfectSqure()int{    i:=0    for {            x :=int(math.Sqrt(float64(i+100)))        y :=int(math.Sqrt(float64(i+100+168)))                if x*x ==(i+100) && y*y == (i+100+168){            fmt.Printf("该数是%d\n",i)            return i        }        i++    }}fmt.Println(perfectSqure())  //该数是21

4.数字从小到大排序

输出三个 整数 x,y,z,请把这三个数由小到大输入。

func threeCompare(){    var a,b,c int=0,0,0    fmt.Scanf("%d%d%d",&a,&b,&c)    if a>b {       a,b = b,a    }     if a>c{       a,c = c,a    }     if b>c{       b,c = c,b    }    fmt.Printf("%d<%d<%d",a,b,c)}threeCompare()//2123 23232 123//123<2123<23232

5.打印字母 C。

func printC(){    var a, b = 176, 219    fmt.Printf("%c%c%c%c%c%c%c%c \n", a, a, b, b, b, a, a,a)    fmt.Printf("%c%c%c%c%c%c%c%c \n", a, b, a, a, a, b, a,a)    fmt.Printf("%c%c%c%c%c%c%c%c \n", a, b, a, a, a, a, a,a)    fmt.Printf("%c%c%c%c%c%c%c%c \n", a, b, a, a, a, a, a,a)    fmt.Printf("%c%c%c%c%c%c%c%c \n", a, a, b, a, a, b, a,a)    fmt.Printf("%c%c%c%c%c%c%c%c \n", a, a, a, b, b, a, a,a)}printC()

6.找出数组中的侥幸数

在整数数组中,如果一个整数的呈现频次和它的数值大小相等,咱们就称这个整数为「侥幸数」。给你一个整数数组 arr,请你从中找出并返回一个侥幸数。

package mainimport "fmt"func main()  {    nums := []int{1,2,3,4}    ret:=find132pattern(nums)    fmt.Println(ret)}func findLucky(arr []int) int {   //定义哈希变量    hash:=make(map[int]int)     for _,j:=range arr{    //记录元素呈现的次数        hash[j]++    }    ret:=-1    for i,j:=range hash{        //找到最大次数和值相等的状况        if i==j && ret<i{            ret=i        }    }    return ret }