go踩坑杂记

初学go,踩的一些坑

可能里面也会有一些问题,欢迎一起讨论
感觉没必要记笔记软件里,毕竟后续熟练就好了,索性丢在这里,单纯记录一下


  make方法 : 作用是分配内存地址,(一直很疑惑,什么时候才需要使用到它...)
  . 当我们通过var 定义一些引用类型的变量时(如 map、指针、切片),定义后该变量的初始值为nil,这个时候该变量是没有确定的内存地址的
  . 后续我们直接操作该变量参数值的时候,就会报错  类似assignment to entry in nil map  或   invalid memory address or nil pointer dereference错误比较多
    因为牵扯到内存和指针,所以编译的时候没问题,一运行就报错
  . 所以var之后,我们就需要通过make,给该变量分配内存地址,
  . 在项目代码中,目前也看到很多人 直接用 := 来定义变量,可以省略var和make的步骤,看各自的代码习惯吧

注意点
  . 切片的append方法。在var定义后,即使不使用make,也能用append操作切片数据,因为append在底层就会给切片分配内存地址
 
   作用域
    1. 这是我自己碰到的一个问题...
        . 当我们需要在代码中定义一个全局变量a,并会在某些函数中使用到变量a的时候,慎用  :=  !!!
        . 在函数中使用 a:=...  会定义一个函数局部变量,和全局变量a是两码事,= 是赋值  := 是定义  不要搞混了
  稍微复杂的变量
  .  OclSubhook和OclSubhookSetting都是自定义结构体类型
       //先看OclSubhooks{},             初始化OclSubhooks类型值
       //再看&OclSubhooks{} 。           取OclSubhooks类型值的内存地址
       AccountSubhooksStruct := &OclSubhooks{}          
       //先看*OclSubhookSetting,        这是OclSubhookSetting的指针类型
       //再看[]*OclSubhookSetting,      这是OclSubhookSetting指针类型的切片
       //最后[]*OclSubhookSetting{}      这是OclSubhookSetting指针类型的切片的初始化值
       SubhookSettingItem := []*OclSubhookSetting{}   
  注意 *的用法  老是搞混
   1.   *放在类型前面,代表这种类型的 内存地址
   2.   *放在变量(特指指针变量)前面,代表指针变量所指向的内存地址中的值

  var a int = 10      定义一个数值类型的变量为10
  var p *int             定义一个变量p  类型为指针
  p = &a                 给p赋值,a是变量不是内存地址,所以要在a前面加个&,代表指向了a的内存地址
  *p  = 20               *p代表p这个指针所指向的内存地址中的值,重新赋值,等效于 a=20
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容