重学go语言(day3)切片、map、结构体、接口

1.切片(slice)

切片也是go语言中重点要学习的,面试也会问到它的扩容,数据变化
来看看以下代码片段看你是否理解切片
// An highlighted block
	arr := [5]int{1, 2, 3, 4, 5}
	a1 := arr[:3]
	a2 := append(a1, 10, 100)
	a3 := append(a1, 20, 200, 2000)
	fmt.Println(arr, len(arr), cap(arr)) // [1 2 3 10 100] 5 5
	fmt.Println(a1, len(a1), cap(a1)) // [1 2 3] 3 5
	fmt.Println(a2, len(a2), cap(a2)) // [1 2 3 10 100] 5 5
	fmt.Println(a3, len(a3), cap(a3)) // [1 2 3 20 200 2000] 6 10

2.map

	go语言的map也是我们重点需要学习的,像其它语言的java hashmap , js map
	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
}

func printInfo(i Info) {
	fmt.Println(i.getInfo())
}
func main() {
	user := User{
		Name: "user",
		Age:  11,
	}
	printInfo(user)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值