数据类型之字典和布尔类型

1. 字典

Go 中的字典和 Java 中的 HashMap 类似,为 key-value 结构,其 key 不能重复,且要能哈希,即为不可变对象(除了字典、切片、函数等外,其他类型基本都可以)

在声明时需要单独指定 key-value 的数据类型,语法格式为:map[KEY_TYPE]VALUE_TYPE

1.1 字典声明

package main

import "fmt"

func main() {
	// 方法一
	var scores map[string]int = map[string]int{"english": 80, "chinese": 90}

	// 方法二
	info := map[string]int{"rose": 18, "lila": 19}

	// 方法三
	phone := make(map[string]int)
	phone["iPhone"] = 8000
	phone["xiaomi"] = 9000

	fmt.Println(scores)	// map[chinese:90 english:80]
	fmt.Println(info)	// map[lila:19 rose:18]
	fmt.Println(phone)	// map[iPhone:8000 xiaomi:9000]
}

对于声明未初始化的字典,并不能直接赋值,其初始值为 nil,需要用 make() 函数初始化,才能赋值:

// 声明一个字段,未初始化,不能直接赋值,它的零值为 nil
var aa map[string]int

// 判断是否为 nil
if aa == nil {
    // 先用 make() 函数初始化
    aa = make(map[string]int)
}

// 再赋值
aa["score"] = 99
aa["age"] = 18
fmt.Println(aa)	// map[age:18 score:99]

1.2 字典操作

// 添加/更新元素,若 key 存在则直接更新
aa["score"] = 99

// 获取,key 不存在也不会存在,会返回 value 的零值
aa["score"]

// 删除,key 不存在也不会报错,delete 静默处理
delete(aa, "score")

判断 key 是否存在

判断 key 是否存在,可以用以下方式,第二个值返回 key 是否存在(存在为 true,否则为 false):

info := map[string]int{"rose": 18, "lila": 19}
	age, ok := info["john"]
	if ok {
		fmt.Printf("key: john 存在,其年龄为:%d", age)
	} else {
		fmt.Printf("key: john 不存在,其年龄为:%d", age)	// key: john 不存在,其年龄为:0
	}

1.3 字典循环

package main

import "fmt"

func main() {
	info := map[string]int{"rose": 18, "lila": 19}

	for name, age := range info {
		fmt.Printf("name:%s,age:%d\n", name, age)
	}

	// 只获取 key,不用占位符
	for key := range info{
		fmt.Println(key)
	}

	// 只获取 value,要用占位符
	for _, value := range info{
		fmt.Println(value)
	}
}

2. 布尔类型

Go 中布尔类型只有两种值:true、false,不像 Python 可以用 1、0 等表示,两者也不相等,不过也支持短路运算:

import "fmt"

var age int = 15
var gender string = "male"

func main()  {
    //  && 两边的表达式都会执行
    fmt.Println( age > 18 && gender == "male")  // false

    // gender == "male" 并不会执行
    fmt.Println( age < 18 || gender == "male")  // true
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风老魔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值