• golang 基础知识6


    1.如果map的一个属性是strct,要修改这个strct的属性值得方法:

    type S struct {
      name string
    }

    func main() {

      m := map[string]*S{"x": &S{"one"}}        
      m["x"].name = "two"
      fmt.Println(m["x"])

    }

    补充一下 * &的知识:

    解释

    理论

    &符号的意思是对变量取地址,如:变量a的地址是&a 
    *符号的意思是对指针取值,如:*&a,就是a变量所在地址的值,当然也就是a的值了

    简单的解释

    *和 & 可以互相抵消,同时注意,*&可以抵消掉,但&*是不可以抵消的 
    a*&a是一样的,都是a的值,值为1 (因为*&互相抵消掉了) 
    同理,a*&*&*&*&a是一样的,都是1 (因为4个*&互相抵消掉了)

    展开

    因为有 
    var b *int = &a 
    所以 
    a*&a*b是一样的,都是a的值,值为1 (把b当做&a看)

    再次展开

    因为有 
    var c **int = &b 
    所以 
    **c**&b是一样的,把&约去后 
    会发现**c*b是一样的 (从这里也不难看出,*cb也是一样的) 
    又因为上面得到的*&a*b是一样的 
    所以 
    **c*&a是一样的,再次把
    &约去后 
    **ca是一样的,都是1

    不信你试试?

    公布结果

    运行的结果内的地址值(0xc200开头的)可能会因不同机器运行而不同,你懂的

    $ go run main.go 
    a     =     1
    &a     =     0xc200000018
    *&a     =     1
    b     =     0xc200000018
    &b     =     0xc200000020
    *&b     =     0xc200000018
    *b     =     1
    c     =     0xc200000020
    *c     =     0xc200000018
    &c     =     0xc200000028
    *&c     =     0xc200000020
    **c     =     1
    ***&*&*&*&c     =     1
    x     =     1

    两个符号抵消顺序

    *&可以在任何时间抵消掉,但&*不可以被抵消的,因为顺序不对

    fmt.Println("*&a	=	",*&a)  //成功抵消掉,打印出1,即a的值
    fmt.Println("&*a	=	",&*a)  //无法抵消,会报错
  • 相关阅读:
    ES6新特性
    CSS + HTML 鼠标在图片上悬停时的显示文字,移走时文字消失
    APICloud closeToWin和closeWin的使用
    基于vue-cli配置移动端自适应
    Cookies,localStorage,sessionStorage,Web SQL Database(客户端)会话存储学习
    select标签默认选择选项
    MySQL数据库的配置
    jsp定义 ,JSON对象
    eclipse配置
    VS2017 C++编译时出现 "the windows sdk version for 8.1 was not found"解决办法(亲测有效)
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/8268178.html
Copyright © 2020-2023  润新知