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 " ] = "新德里"
关键字用于 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 | 无符号整型,用于存放一个指针 |