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
uint 32 或 64 位
int 与 uint 一样大小
uintptr 无符号整型,用于存放一个指针

你可能感兴趣的:(golang)