golang语言中map的初始化及使用
source link: https://studygolang.com/articles/2379?fr=sidebar
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
golang语言中map的初始化及使用
YanJiangbo · 2015-02-13 15:00:02 · 212832 次点击 · 预计阅读时间 1 分钟 · 不到1分钟之前 开始浏览// 先声明map var m1 map[string]string // 再使用make函数创建一个非nil的map,nil map不能赋值 m1 = make(map[string]string) // 最后给已声明的map赋值 m1["a"] = "aa" m1["b"] = "bb" // 直接创建 m2 := make(map[string]string) // 然后赋值 m2["a"] = "aa" m2["b"] = "bb" // 初始化 + 赋值一体化 m3 := map[string]string{ "a": "aa", "b": "bb", } // ========================================== // 查找键值是否存在 if v, ok := m1["a"]; ok { fmt.Println(v) } else { fmt.Println("Key Not Found") } // 遍历map for k, v := range m1 { fmt.Println(k, v) }
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459
bbuc · #1 · 5年之前
为什么我初始化map[string]带名称的struct结构体{string:结构体构造}的时候出异常呢。很不懂
bbuc · #2 · 5年之前
知道为什么了不在一行的时候最后一个要加,
peterchain · #3 · 5年之前
package main
import (
"fmt"
"user"
)
type Person struct {
ID string
Name string
Address string
}
func main() {
userDB := make(map[string](*user.User)) //注意写法
//初始化,注意对数组的初始化
u := new(user.User)
u.SetAge(12)
u.SetName("张三")
u.SetSex("男")
u.SetPhone("15902783102")
userDB["u1"] = u
v, ok := userDB["u1"] //获取map值 key为'u1'
if !ok {
fmt.Println(" 没有找到信息")
return
}
//打印出全部值 和各个分值
fmt.Println(v.String())
fmt.Printf("userDB[u1] = \n {name=%v \n age=%v \n sex=%v \n phone=%v \n}", v.GetName(), v.GetAge(), v.GetSex(), v.GetPhone())
personDB := make(map[string]Person)
var person = Person{"12346", "Xym", "bbb"}
personDB["p1"] = person
p, ok := personDB["p1"] //获取map值 key为'u1'
if !ok {
fmt.Println(" 没有找到信息")
return
}
//打印出全部值 和各个分值
fmt.Printf(" \n personDB[p1] = \n {ID=%v \n Name=%v \n address=%v \n}", p.ID, p.Name, p.Address)
// 先声明map
//var a map[string]string
//a["b"] = "c" //这样会报错的,要先初始化内存
//a = make(map[string]string)
//a["b"] = "c" //这样才不会错
var m1 map[string]string
// 再使用make函数创建一个非nil的map,nil map不能赋值
m1 = make(map[string]string)
// 最后给已声明的map赋值
m1["a"] = "aa"
m1["b"] = "bb"
m1["c"] = "cc"
m1["d"] = "dd"
fmt.Println("\n", m1) //输出元素的顺序是随机的,go语言中map是无序的
// 直接创建
m2 := make(map[string]string)
m2["a"] = "aa"
m2["b"] = "bb"
fmt.Println("\n", m2)
// 初始化 + 赋值一体化 注意最后一个元素后面也需要带上逗号的
m3 := map[string]string{
"a": "aa",
"b": "bb",
"c": "cc",
"xx": "xx",
"d": "dd", //注意最后一个元素后面也需要带上逗号的
}
fmt.Println("\n", m3)
//删除一个key对应的元素 map的删除操作
fmt.Println("删除之前", m3)
delete(m3, "a")
fmt.Println("删除之后", m3)
//map的遍历
fmt.Println("\n 遍历输出map")
for k, v := range m3 {
fmt.Printf("key=%v,val=%v \n", k, v) //无序的输出
}
}
peterchain · #4 · 5年之前
package user
import (
"strconv"
)
type User struct {
name string
age int
sex string
phone string
}
func (s *User) SetName(name string) {
s.name = name
}
func (s *User) GetName() string {
return s.name
}
func (s *User) SetAge(age int) {
s.age = age
}
func (s *User) GetAge() int {
return s.age
}
func (s *User) String() string {
return "name is " + s.name + ",age is " + strconv.Itoa(s.age) + " ,sex=" + s.sex + " ,phone=" + s.phone
}
func (s *User) SetSex(sex string) {
s.sex = sex
}
func (s *User) GetSex() string {
return s.sex
}
func (s *User) SetPhone(phone string) {
s.phone = phone
}
func (s *User) GetPhone() string {
return s.phone
}
func (User) Print() string {
return "print"
}
freezer-glp · #5 · 3年之前
userDB := make(map[string](*user.User)) //注意写法
personDB := make(map[string]Person)
@peterchain 为什么这两处,第一处user.User要用指针,第二处Person又不用指针了?
jasonzhang123 · #6 · 3年之前
我从一个新人的角度想想,估计是User中实现了很多函数,指定了接受者是(s *User),所以前者使用了指针,而后面的Persion就是个struct,没必要再用指针了,偷了点懒,哈哈
Schr0dingerCat · #7 · 3年之前
@peterchain @freezer-glp 有个问题,personDB := make(map[string]Person) 这个情况下,使用 personDB["p"].Name = "aaa" 这样赋值 会出现错误
jigetage · #8 · 2年之前
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK