zoukankan      html  css  js  c++  java
  • 关于golang方法的一些小点

    本文在说什么

    1. 关于方法中的两个语法糖
    2. 一个设计规范

    语法糖

    在定义方法的时候,接收者可以是指针(*T),也可以是普通变量(T).而在调用的时候却可以不用在乎.

    type Info struct {
    	name string
    	age uint
    }
    
    func (i *Info)ChangeName(s string) {
    	i.name = s
    }
    
    func (i Info)say() {
    	fmt.Printf("%s yestoday %d yea's old", i.name, i.age)
    }
    
    func main() {
    	var i1 Info = Info{
    		name: "zhangsan",
    		age: 18,
    	}
    	i1.ChangeName("wangwu")
    	fmt.Println(i1)
    	var i2 *Info = &Info{
    		name: "liis",
    		age: 21,
    	}
    	i2.say()
    }
    

    i1.ChangeName("wangwu")使用非指针调用,不仅成功,如果运行程序你就会i1.name确实发生了变化.那是因为这句等价于&i1.ChangeName("wangwu")

    i2.say()也调用成功了,运行会发现也输出正确,这是因为其等价于(*i2).say()

    而这两个在本质上都是因为编译器优化后的语法糖的原因.

    一人指针,全家指针

    由于方法的接收者既可以是变量,也可以是指针,因此,容易出现混肴.所以在设计的时候有一个不成文的规定: 如果有一个方法的接收者是指针,那么其所有方法都需要是指针

    嵌套匿名结构体

    如果一个结构体(A)匿名嵌套了另一个结构体(B),那么A可以通过与匿名字段相同的方式调用B的方法,但是依旧要小心不要与A自己的方法冲突.

  • 相关阅读:
    day⑥:logging模块
    day⑥:shelve模块
    day⑥:xml模块
    day⑤:冒泡排序
    day⑤:模块
    day⑤:re深入
    day④:递归
    day④:迭代器
    day④:装饰器
    day③:函数式编程
  • 原文地址:https://www.cnblogs.com/ltozvxe/p/14883960.html
Copyright © 2011-2022 走看看