var data map[string]string
fmt.Println(data ==nil)// 申明未赋值结果为true
data1 :=make(map[string]string)
fmt.Println(data1 ==nil)// 结果为false
m :=map[string]string{"A":"1","B":"2","C":"3",}for k, v :=range m {
fmt.Println(k, v).// map的遍历是无序的}
通过 v, ok := m["A"] 可以判断map是否有当前key,若没有当前key取当前类型的默认值
3.结构体
type User struct{
Name string// 首字母大写可以被其它包引用}func(u User) setName (name string){}//值接收者和指针接收者区别改原数据func(u *User) setName (name string){}
user := User{ Name:"test"}
user.setName("")
4.接口
1. 可以作为数据类型表示 类似typescript的any
data := make([]interface{}, 0)
data = append(data, 1, "2", true)
fmt.Println(data)
接口也可以类型断言
var a interface{} = 1 // r, ok := a.(int)
switch a.(type) {
case string:
fmt.Println(a)
case int:
fmt.Println(a)
}
2. 接口可以定义方法类型其它语言那样实现接口解耦合、扩展,go通过结构体来实现接口
type Info interface{getInfo()string}type User struct{
Name string
Age int}func(u User)getInfo()string{return u.Name
}funcprintInfo(i Info){
fmt.Println(i.getInfo())}funcmain(){
user := User{
Name:"user",
Age:11,}printInfo(user)}