map的三种声明定义方式
声明map后,一定要make开辟空间,否则会报越界且不能使用
package main
import "fmt"
func main() {
// 第一种声明方式
// 声明myMap1是一种map类型 key是string value是string
var myMap1 map[string]string
// 判断一下map在未开辟空间之前是否为空
if myMap1 == nil {
fmt.Println("myMap1是一个空map")
}
// 通过make关键字来给map开辟空间
myMap1 = make(map[string]string, 10)
myMap1["one"] = "java";
myMap1["two"] = "c++";
myMap1["three"] = "go";
fmt.Println(myMap1)
// 第二种声明方式-常用方式
myMap2 := make(map[int]string)
myMap2[1] = "java"
myMap2[2] = "go"
myMap2[3] = "py"
fmt.Println(myMap2)
// 第三种声明方式
myMap3 := map[string]string{
"one":"php",
"two":"c++",
"three":"java",
}
fmt.Println(myMap3)
}
map的使用方式
package main
import "fmt"
// 打印map集合
func printMap(cityMap map[string]string) {
for key, value := range cityMap {
fmt.Print("key:", key)
fmt.Println(" value:", value)
}
}
// 更改map指定key的值
func changeMapValue(cityMap map[string]string) {
cityMap["Japan"] = "Tokyoooooo"
}
// 增加map
func addMapValue(cityMap map[string]string, key string, vale string) {
if len(key) > 0 && len(vale) > 0 {
cityMap[key] = vale
}
}
// 拷贝一个map
func copyMap(cityMap map[string]string) (map[string]string) {
newMap := make(map[string]string)
for key, value := range cityMap {
newMap[key] = value
}
return newMap
}
func main() {
// 定义一个map,开辟空间
cityMap := make(map[string]string)
// 给map添加数据
cityMap["China"] = "BeiJing"
cityMap["Japan"] = "Tokyo"
cityMap["USA"] = "NewYork"
printMap(cityMap)
fmt.Println("==========init===========")
// 删除
delete(cityMap, "USA")
printMap(cityMap)
fmt.Println("==========delete===========")
// 修改
changeMapValue(cityMap)
printMap(cityMap)
fmt.Println("==========update===========")
// 添加
addMapValue(cityMap, "张三", "zhangsan")
printMap(cityMap)
fmt.Println("==========add===========")
// 拷贝一个map
returnCopyMap := copyMap(cityMap)
printMap(returnCopyMap)
fmt.Println("=========copy============")
}
struct基本定义与使用
package main
import "fmt"
// 声明一种新的数据类型,是int的一个别名
type myint int
// 定义一个结构体
type Book struct {
title string
auth string
price int
}
// 传递一个book的副本,更改价格,打印不会生效,因为传递的是副本
func changeBook(book Book) {
// 传递副本
book.price = 55
}
// 传递一个book的指针,更改价格,打印会生效,因为传递的是地址
func changeBook2(book *Book) {
// 传递指针
book.price = 55
}
func main() {
/*
var a myint = 10
fmt.Println("a = ", a)
fmt.Printf("type of a = %T \n", a)
*/
var book Book
book.title = "GO入门到放弃"
book.auth = "自学"
book.price = 100
fmt.Printf("%v\n", book)
fmt.Println("==========init===========")
changeBook(book)
fmt.Printf("%v\n", book)
fmt.Println("==========副本update===========")
changeBook2(&book)
fmt.Printf("%v\n", book)
fmt.Println("==========指针update2===========")
}