初学go的那些坑

本文介绍了初学者在学习Go语言时可能遇到的关于包管理的问题,包括包的基本使用、可见性规则、main包间的访问限制、包内嵌套与循环引用,以及初始化顺序。特别强调了包循环引用会导致动态编译失败,提醒开发者避免此类错误。
摘要由CSDN通过智能技术生成

版权声明:本文为博主原创文章,博客地址:
https://blog.csdn.net/zxy_666/article/details/80390843,未经博主允许不得转载。

前言

初学go时,总是在不经意间邂逅各种坑。那些坑说大不大,但总能耗费你不少精力陪它。今天,给大家分享:那些年我们追过的go坑。

包package

package是go管理代码的重要工具。

下面主要针对在GoLand(go的一款开发工具)实践中的说明

package基本使用

  • 项目中的每个文件夹都是一个package。package下可以嵌套package。但每个.go文件的package以其所在的当前文件夹为准。

  • 在GoLand中新建文件夹时,在该层目录下新建的.go文件,其package默认为当前文件夹名(大小写一致)。当.go文件创建后,再去修改文件夹名时,需要注意其下的.go文件中的package是否自动修改。

  • ==同一层目录下的.go文件,package必须一致==,否则编译出错。

同层目录不包括嵌套目录

如下所示:
a1.go和a2.go属于dir A这一级目录下,其package必须一致。
b1.go和b2.go属于dir B这一级目录。

projectName
    src
        dir A
             dir B
                b1.go
                 b2.go
        a1.go
        a2.go

例如,文件夹world下的所有.go文件,package必须一致,package可以随便起,不一定与文件夹名一样。

image

包(package)可见性

在了解可见性之前,我们先了解一个概念:可导出的。
在go语言中,变量或函数名的首字母大写时,其就是可导出的,小写时则是不可导出的。

  • 函数和变量的可访问性是以包做隔离的。
包          函数或变量      可访问性

同一个包    可/不可导出的     都能访问
其他的包    可导出的          可访问
其他的包    不可导出的        不能访问

同一个包内,均可访问导出/不可导出的变量或函数。无论变量是全局变量还是struct的成员变量,无论函数是全局函数还是隶属于某个struct的成员函数。

这里的“全局”指的是不通过“对象.变量或函数”,而是直接通过package.变量或函数即可访问的变量或函数。
· 全局变量在同一个包内,直接访问,包外通过package.变量访问,函数亦然。当然struct对象也是一种特殊的全局数据结构,遵循这个规则。
· 对象成员变量或函数,必须通过“对象实例.变量或函数”访问。

例如:

//项目结构
project
    src
        dir A
            a1.go
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值