zoukankan      html  css  js  c++  java
  • Golang笔记

    1.func

    先看一看func 的基本构成元素

    func  (p myType )  funcName ( a, b int , c string ) ( r , s int ) {
        return
    }
    

      

    其中:
    关键字———func // 这个是定义函数的关键字
    函数拥有者—(p myType) // 这个是此函数的拥有者,下面解释(此项可省略)
    方法名———funcName // 这个是定义函数的名字
    入参———— a,b int,b string // 这个是定义函数的入参
    返回值——— r,s int // 这个是定义函数的返回值,golang可以返回多个值
    函数体——— { }

    重点说说这个函数拥有者(p myType),这个是相较于C/C++比较特殊的地方。
    特定类型定义函数,即为类型对象定义方法
    在Go中通过给函数标明所属类型,来给该类型定义方法,上面的 (p myType) 即表示给myType声明了一个方法, p myType 不是必须的。如果没有,则纯粹是一个函数。


    链接:https://www.jianshu.com/p/9aefa9ddecb9

     

    2.golang 里面指针符号的*和&

    package main
    
    import "fmt"
    
    func main() {
        var a int = 1
        var b *int = &a
        var c **int = &b
        var x int = *b
        fmt.Println("a = ",a)
        fmt.Println("&a = ",&a)
        fmt.Println("*&a = ",*&a)
        fmt.Println("b = ",b)
        fmt.Println("&b = ",&b)
        fmt.Println("*&b = ",*&b)
        fmt.Println("*b = ",*b)
        fmt.Println("c = ",c)
        fmt.Println("*c = ",*c)
        fmt.Println("&c = ",&c)
        fmt.Println("*&c = ",*&c)
        fmt.Println("**c = ",**c)
        fmt.Println("***&*&*&*&c = ",***&*&*&*&*&c)
        fmt.Println("x = ",x)
    }
    

      

    解释

    理论

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

    简单的解释

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

    展开

    因为有
    var b *int = &a //--------------------

    (可以理解为订阅一个变量时加上了*,表示这个变量是一个指针,例如var b *int,此时b就是个指针;*用在变量定义时表示这个变量是个指针,变量赋值时*a,如果a时指针,表示取a指针的值)
    所以
    a和*&a和*b是一样的,都是a的值,值为1 (把b当做&a看) 

    再次展开

    因为有
    var c **int = &b
    所以
    **c和**&b是一样的,把&约去后
    会发现**c和*b是一样的 (从这里也不难看出,c和b也是一样的)聽

    又因为上面得到的&a和b是一样的 所以**c和*&a是一样的,再次把*&约去后**c和a是一样的,都是1

    不信你试试?

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

     变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:

    • 对变量进行取地址操作使用&操作符,可以获得这个变量的指针变量。
    • 指针变量的值是指针地址。
    • 对指针变量进行取值操作使用*操作符,可以获得指针变量指向的原变量的值。

    3.实例化结构体

      // 结构体类型

      type Struct struct {

      }

      //实例化结构体

      s := new(Struct) 或者 s:= &Struct

  • 相关阅读:
    用SSH指令批量修改文件夹 文件权限和拥有者
    magento转移服务器和magento建立多站点总结
    ssh 命令
    magento缓存系列详解:clean cache
    如何配置magento免运费商品方法
    Magento后台订单显示产品图片的修改方法
    如何在magento后台增加一个自定义订单状态
    Magento路径函数getBaseUrl使用方法
    图解HTTPS
    php 数组 添加元素、删除元素
  • 原文地址:https://www.cnblogs.com/bbllw/p/12346019.html
Copyright © 2011-2022 走看看