Go语言——范围(Range)//集合(Map)//递归函数//类型转换

集合(Map)

Map 是一种无序键值对的集合

map的初始化定义如下

var map变量名 map [key的数据类型] value的数据类型


import "fmt"

func main() {
    var countryCapitalMap map[string]string /*创建集合 */
    countryCapitalMap = make(map[string]string)

    countryCapitalMap [ "France" ] = "巴黎"
    countryCapitalMap [ "Italy" ] = "罗马"
    countryCapitalMap [ "Japan" ] = "东京"
    countryCapitalMap [ "India " ] = "新德里"

范围(Range)

关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素

现在让我们用range来遍历 map中的元素,并对它进行一些删除的操作

  • 承接上部分代码
import "fmt"

func main() {
    var countryCapitalMap map[string]string /*创建集合 */
    countryCapitalMap = make(map[string]string)

    countryCapitalMap [ "France" ] = "巴黎"
    countryCapitalMap [ "Italy" ] = "罗马"
    countryCapitalMap [ "Japan" ] = "东京"
    countryCapitalMap [ "India " ] = "新德里"
     
     for country := range countryCapitalMap {
        fmt.Println(country, "首都是", countryCapitalMap [country])
    }//在这部操作我们遍历了map的元素
  • 运行结果:

France 首都是 巴黎
Italy 首都是 罗马
Japan 首都是 东京
India 首都是 新德里

for country := range countryCapitalMap

这句代码中 range 读取的范围是 countryCapitalMapw的范围,也就遍历了countryCapitalMapw的所有元素,而country作为当前读取的元素变量名

接下来我们进行删除操作

package main
import "fmt"

func main() {
	var countryCapitalMap map[string]string /*创建集合 */
	countryCapitalMap = make(map[string]string)

	/* map插入key - value对,各个国家对应的首都 */
	countryCapitalMap [ "France" ] = "巴黎"
	countryCapitalMap [ "Italy" ] = "罗马"
	countryCapitalMap [ "Japan" ] = "东京"
	countryCapitalMap [ "India " ] = "新德里"

	/*使用键输出地图值 */
	for country := range countryCapitalMap {
		fmt.Println(country, "首都是", countryCapitalMap [country])
	}
	delete(countryCapitalMap,"France")
	capital, ok := countryCapitalMap [ "France" ] /*如果确定是真实的,则存在,否则不存在 */
	/*fmt.Println(capital) */
	/*fmt.Println(ok) */
	if (ok) {
		fmt.Println("France 的首都是", capital)
	} else {
		fmt.Println("France 的首都不存在")
	}
}

当我们执行delete语句后,运行结果为

France 首都是 巴黎
Italy 首都是 罗马
Japan 首都是 东京
India  首都是 新德里
France 的首都不存在

而当我们注释掉delet语句后 执行结果为

France 首都是 巴黎
Italy 首都是 罗马
Japan 首都是 东京
India  首都是 新德里
France 的首都是 巴黎

递归函数

递归函数可以提高代码运行效率,解决很多的数学问题,对于算法 的研究很有帮助,所以在很多语言中递归函数都是比较重要的

  • 递归,就是在运行的过程中调用自己。
  • 使用递归时需要设置退出条件,否则递归将陷入无限循环中

阶乘的实现

package main

import "fmt"

func fac(n uint64)(s uint64){
	if(n>0) {
		s = n*fac(n-1)
	return s}
	return 1
}


func main() {
	i := 15
	fmt.Printf("%d的阶乘为%d",i,fac(uint64(i)))
}

运行结果:

15的阶乘为1307674368000

斐波那契数列

package main

import "fmt"

func main() {
	for i:= 0; i<=5;i++{
		fmt.Printf("%d\t",fibonachi(i))
	}
}

func fibonachi(n int) int{
	if(n<2) {
		return n
	}
	return fibonachi(n-2)+fibonachi(n-1)
}

运行结果:

0 1 1 2 3 5

类型转换

类型转换用于将一种数据类型的变量转换为另外一种类型的变量,在有些场景下,强制类型转换非常的好用!

类型转换的实现方式很简单

type_name(expression)

其中type_name为要转换为的数据类型,expression为表达式(值)

序号类型和描述
uint8无符号 8 位整型 (0 到 255)
uint16无符号 16 位整型 (0 到 65535)
uint32无符号 32 位整型 (0 到 4294967295)
uint64无符号 64 位整型 (0 到 18446744073709551615)
int8有符号 8 位整型 (-128 到 127)
int16有符号 16 位整型 (-32768 到 32767)
int32有符号 32 位整型 (-2147483648 到 2147483647)
int64有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
byte与uint8相似
rune类似 int32
uint32 或 64 位
int与 uint 一样大小
uintptr无符号整型,用于存放一个指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之墨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值