只声明, var gMap map[string] string
声明初始化
package main
import "fmt"
func main() {
var m = make(map[string]string)
m["name"] = "Wyc"
fmt.Println(m)
}
package main
import (
"fmt"
)
func main() {
var gMap map[string]string
m2 := map[string]string{"k": "v"}
fmt.Println(gMap)
fmt.Println(m2["k"])
// 增加
m2["python"] = "Wyc"
fmt.Println(m2)
// 删除
delete(m2, "python")
fmt.Println(m2)
// 改
m2["k"] = "HAHA"
fmt.Println(m2)
// 查 单变量
selectMapKey := m2["l"]
// 双变量
_, Bl := m2["k"]
fmt.Println(selectMapKey)
if Bl {
fmt.Println("存在")
}else{
fmt.Println("不存在")
}
}
/*
结果
map[]
v
map[k:v python:Wyc]
map[k:v]
map[k:HAHA]
存在
*/
package main
import "fmt"
func main() {
m2 := map[string]string{"name": "Wyc", "age": "23", "sex": "男"}
fmt.Println(m2)
for k, d := range m2{
fmt.Printf("key: %v, value: %v\n", k, d)
}
}
/*
结果
key: name, value: Wyc
key: age, value: 23
key: sex, value: 男
*/
package main
import "fmt"
func main() {
doubleM := make(map[string]map[string]string)
v1 := make(map[string]string)
v1["name"] = "Wyc"
doubleM["v1"] = v1
fmt.Println(doubleM)
}
fatal error: concurrent map read and map write
package main
import "time"
func main() {
c := make(map[int]int)
// goruntine 写
go func() {
for i:=0 ; i < 1000; i++{
c[i] = i
}
}()
// goruntine读
go func() {
for i:=0; i < 1000; i++{
_ = c[i]
}
}()
time.Sleep(30 * time.Minute)
}
运行匿名goruntine函数
package main
import (
"log"
"sync"
"time"
)
// 互斥锁
var HcMutex sync.Mutex
func runMutex(id int) {
log.Printf("[任务ID:%d]【尝试获取锁】", id)
HcMutex.Lock()
log.Printf("[任务ID:%d]【获取到了锁】", id)
time.Sleep(6 * time.Second)
HcMutex.Unlock()
log.Printf("[任务ID:%d]【工作完成 释放锁】", id)
}
func sendText() {
go runMutex(1)
go runMutex(2)
go runMutex(3)
go runMutex(4)
}
func main() {
sendText()
time.Sleep(6 * time.Minute)
}
/*
2023/02/25 17:52:18 [任务ID:2]【尝试获取锁】
2023/02/25 17:52:18 [任务ID:1]【尝试获取锁】
2023/02/25 17:52:18 [任务ID:4]【尝试获取锁】
2023/02/25 17:52:18 [任务ID:3]【尝试获取锁】
2023/02/25 17:52:18 [任务ID:2]【获取到了锁】
2023/02/25 17:52:24 [任务ID:2]【工作完成 释放锁】
2023/02/25 17:52:24 [任务ID:1]【获取到了锁】
2023/02/25 17:52:30 [任务ID:1]【工作完成 释放锁】
2023/02/25 17:52:30 [任务ID:4]【获取到了锁】
2023/02/25 17:52:36 [任务ID:4]【工作完成 释放锁】
2023/02/25 17:52:36 [任务ID:3]【获取到了锁】
2023/02/25 17:52:42 [任务ID:3]【工作完成 释放锁】
*/
package main
import (
"log"
"sync"
"time"
)
var LockObj sync.RWMutex
func Readlock(id int) {
log.Printf("读任务id: %d, [进入写方法尝试获取读写锁]", id)
LockObj.RLock()
log.Printf("读任务id: %d, [获取到了读锁-开始干活休眠10s]", id)
time.Sleep(10 * time.Second)
LockObj.RUnlock()
log.Printf("读任务id: %d, [读任务完成-释放]", id)
}
func WriteLock(id int){
log.Printf("写任务id: %d, [进入写方法尝试获取读写锁]", id)
LockObj.Lock()
log.Printf("写任务id: %d, [获取到了写任务-开始干活休眠10s]", id)
time.Sleep(10 * time.Second)
LockObj.Unlock()
log.Printf("写任务id: %d, [写任务完成-释放]", id)
}
func read() {
for i := 0; i < 10; i++ {
go Readlock(i)
}
}
func write() {
for i := 0; i < 10; i++ {
go WriteLock(i)
}
}
// 先启动写锁
func writeFirst() {
go WriteLock(1)
time.Sleep(1 * time.Second)
go Readlock(1)
go Readlock(2)
go Readlock(3)
go Readlock(4)
go Readlock(5)
}
func readFirst() {
go Readlock(1)
go Readlock(2)
go Readlock(3)
go Readlock(4)
go Readlock(5)
time.Sleep(1 * time.Second)
go WriteLock(1)
}
func main() {
log.Println("进入程序")
writeFirst()
time.Sleep(1 * time.Hour)
}