【Go】四、包名、访问范围控制、标识符、运算符

文章目录

  • 1、_
  • 2、包名
  • 3、命名大小影响可访问范围
  • 4、运算符
  • 5、获取终端输入

1、_

  • 下划线"_"本身在Go中是一个特殊的标识符,称为空标识符
  • 用于忽略某个值

1)忽略导入的没使用的包

在这里插入图片描述

2)忽略某个返回值

在这里插入图片描述

2、包名

  • main包是程序的入口包,main函数所在包定义为main包

在这里插入图片描述

  • 不定义main包,就不能得到编译后的可执行文件
package abc//....略//编译:
go run:cannot run non-main package
  • 尽量保持package的名字和目录保持一致

在这里插入图片描述

  • 别和go的标准库冲突
//error
package fmt

3、命名大小影响可访问范围

利用首字母大写小写完成权限控制,对于变量名、函数名、常量名:

  • 若首字母大写,则可以被其他的包访问 ⇒ Java的public
  • 若首字母小写,则只能在本包中使用 ⇒ Java的private
package testvar stuNo int = 9527   //定义学号变量

以下访问其他包中小写字母开头的变量,访问不到:cannot refer to unexported name test.stuNo

package main
import ("fmt""gocode/project/test"
)func main(){fmt.Println(test.stuNo)	//访问不到
}

注意,导包时,包名是从$GOPATH/src/后开始计算的,因此需要配置一个环境变量

在这里插入图片描述

在这里插入图片描述

修改test包中的变量为大写命名:

package testvar StuNo int = 9527   //定义学号变量

可以成功访问了:

在这里插入图片描述

4、运算符

在这里插入图片描述

和Java相比:

  • ++,--只能在变量的后面,不能写在变量的前面 --a ++a 错误写法
  • 不支持三目运算符
  • 短路与&&、短路或|| 都和Java一样
  • 其他运算符 &、*用于指针变量,前者取变量地址,后者取指针变量(的值)所指向的变量的值
package main
import "fmt"
func main(){//+加号://1.正数 2.相加操作  3.字符串拼接var n1 int = +10fmt.Println(n1)var n2 int = 4 + 7fmt.Println(n2)var s1 string = "abc" + "def"fmt.Println(s1)// /除号:fmt.Println(10/3) //两个int类型数据运算,结果一定为整数类型fmt.Println(10.0/3)//浮点类型参与运算,结果为浮点类型// % 取模  等价公式: a%b=a-a/b*bfmt.Println(10%3) // 10%3= 10-10/3*3 = 1fmt.Println(-10%3)fmt.Println(10%-3)fmt.Println(-10%-3)//++自增操作:var a int = 10a++fmt.Println(a)a--fmt.Println(a)//++ 自增 加1操作,--自减,减1操作//go语言里,++,--操作非常简单,只能单独使用,不能参与到运算中去//go语言里,++,--只能在变量的后面,不能写在变量的前面 --a  ++a  错误写法
}

5、获取终端输入

方式一:fmt包的Scanln函数

注意:

  • 传入的是接收用户输入的变量的地址
  • 录入数据的时候,类型一定要匹配,因为底层会自动判定类型的,类型不匹配时,按类型的默认值处理
package main
import "fmt"
func main(){//实现功能:键盘录入学生的年龄,姓名,成绩,是否是VIPvar age intfmt.Println("请录入学生的年龄:")//传入age的地址的目的:在Scanln函数中,对地址中的值进行改变的时候,实际外面的age被影响了fmt.Scanln(&age)//录入数据的时候,类型一定要匹配,因为底层会自动判定类型的var name stringfmt.Println("请录入学生的姓名:")fmt.Scanln(&name)var score float32fmt.Println("请录入学生的成绩:")fmt.Scanln(&score)var isVIP boolfmt.Println("请录入学生是否为VIP:")fmt.Scanln(&isVIP)//将上述数据在控制台打印输出,%v原样输出我传入的变量的值fmt.Printf("学生的年龄为:%v,姓名为:%v,成绩为:%v,是否为VIP:%v",age,name,score,isVIP)
}

方式二:fmt包的Scanf函数

package main
import "fmt"
func main(){       var age int       var name string        var score float32    var isVIP bool       //方式2:Scanffmt.Println("请录入学生的年龄,姓名,成绩,是否是VIP,使用空格进行分隔")fmt.Scanf("%d %s %f %t",&age,&name,&score,&isVIP)//将上述数据在控制台打印输出:fmt.Printf("学生的年龄为:%v,姓名为:%v,成绩为:%v,是否为VIP:%v",age,name,score,isVIP)
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 HEAP CORRUPTION DETECTED:after Normal block 错误的原因及解析

目录 一、HEAP CORRUPTION DETECTED:after Normal block 出现的报错情况: 二、问题原因(重要): 三、举例 1.错误代码如下: 2.错误原因及分析(重要): 3.解决方法 ​编辑 4.正…

【Linux C | 多线程编程】线程的连接、分离,资源销毁情况

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-04-01 1…

SSM框架学习——MyBatis关联映射

MyBatis关联映射 为什么要关联映射 实际开发中,对数据库操作常常会涉及多张表,所以在OOP中就涉及对象与对象的关联关系。针对多表操作,MyBatis提供关联映射。 关联关系概述 一对一:A类中定义B类的属性b,B类中定义A…

MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记

以前微处理器(MPU)与微控制器(MCU)是截然不同的两种设备,MPU支持丰富的软件系统,如Linux和相关的软件堆栈,而MCU通常将专注于裸机和RTOS。近年来,随着MCU的性能越来越高,…

【Spring源码】WebSocket做推送动作的底层实例

一、前瞻 Ok,开始我们今天的对Spring的【模块阅读】。 那就挑Web里的WebSocket模块,先思考下本次阅读的阅读线索: WebSocket在Spring里起到什么作用这个模块采用了什么设计模式我们都知道WebSocket可以主动推送消息给用户,那做推…

halcon图像膨胀

1、原理: 使用结构元素在图像上移动,如果结构元素中有任意一个像素和图像上的非零像素重叠,则保留此时结构元素中心所在位置,并将其像素值设置为非零。 2、halcon代码 其中圆形结构元素可设置半径,矩形结构元素设置…

MySQL故障排查与生产环境优化

一、MySQL单实例常见故障 1.逻辑架构图 MySQL逻辑架构图客户端和连接服务核心服务功能存储引擎层数据存储层 2.故障一 故障现象 ERROR 2002 (HY000): Cant connect to local MySQL server through socket/data/mysql/mysql.sock(2) 问题分析 数据库未启动或者数据库端口…

Yolo 自制数据集dect训练改进

上一文请看 Yolo自制detect训练-CSDN博客 简介 如下图: 首先看一下每个图的含义 loss loss分为cls_loss, box_loss, obj_loss三部分。 cls_loss用于监督类别分类,计算锚框与对应的标定分类是否正确。 box_loss用于监督检测框的回归,预测框…

蓝桥杯真题:成绩统计

这题思路简单,但是输出结果的位置容易出错,题目要求四舍五入,所以要用Math.round()的方法

Python快速入门系列-7(Python Web开发与框架介绍)

第七章:Python Web开发与框架介绍 7.1 Flask与Django简介7.1.1 Flask框架Flask的特点Flask的安装一个简单的Flask应用示例7.1.2 Django框架Django的特点Django的安装一个简单的Django应用示例7.2 前后端交互与数据传输7.2.1 前后端交互7.2.2 数据传输格式7.2.3 示例:使用Flas…

解决GNU Radio+USRP实现OFDM收发在接收端存在误码问题

文章目录 前言一、OFDM 收发流程1、OFDM 收端流程2、OFDM 收端流程 二、问题所在1、find_trigger_signal 函数解读2、general_work 函数3、问题所在 三、修改源码四、运行结果1、频谱2、传输数据测试 五、调试小技巧六、资源自取 前言 在使用 GNU Radio 时使用官方例程搭建 GN…

git clone没有权限的解决方法

一般情况 git clone时没有权限,一般是因为在代码库平台上没有配置本地电脑的id_rsa.pub 只要配置上,一般就可以正常下载了。 非一般情况 但是也有即使配置了id_rsa.pub后,仍然无法clone代码的情况。如下 原因 这种情况是因为ssh客户端…

前端常用代码整理— js,jquery篇(3)

目录 1.判断是否是json字符串 2.获取当前网址 3.将文本复制到剪贴板 4.获取一个月的天数 5.展平数组 6.要修改getRandomItem函数以返回数组中的随机两个元素,可以尝试以下代码 1.判断是否是json字符串 const isJson str > {try {JSON.parse(str);return …

通过 Cookie、Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(一)

本篇博客对应“2.3 会话管理”小节 视频名称:会话管理 视频链接 什么是HTPP协议? HTTP,Hpyer Text Transfer Protocl:定义了浏览器怎样从(万维网客户进程)怎样向Web服务器(万维网服务器&#…

vue 文件下载

1.返回路径下载 注: 针对一些浏览器无法识别的文件格式(如pdf、xls、ppt)。可以直接在地址栏上输入URL即可触发浏览器的下载功能。 情况1 //地址栏输入文件URLwindow.location.href URLwindow.open(URL) 注:该方式将下载逻辑放在后端处理&#xff0c…

Mysql的高级语句3

目录 一、子查询 注意:子语句可以与主语句所查询的表相同,但是也可以是不同表。 1、select in 1.1 相同表查询 1.2 多表查询 2、not in 取反,就是将子查询结果,进行取反处理 3、insert into in 4、update…

IO练习题

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中 #include <myhead.h>//文件IO实现文件拷…

实现offsetof宏以及交换一个整数二进制奇偶位的宏

目录 1. offsetof宏2. 交换奇偶位 1. offsetof宏 我们想用宏来实现offsetof函数,首先要了解这个函数的用法。 1.1 offsetof函数的介绍及用法 &#xff08;1&#xff09;功能&#xff1a;用来计算结构体中一个成员在该结构体中的相对起始位置的偏移量&#xff0c;单位是字节。 …

ClamAV:Linux服务器杀毒扫描工具

Clam AntiVirus&#xff08;ClamAV&#xff09;是免费而且开放源代码的防毒软件&#xff0c;软件与病毒码的更新皆由社群免费发布。ClamAV在命令行下运行&#xff0c;它不将杀毒作为主要功能&#xff0c;默认只能查出系统内的病毒&#xff0c;但是无法清除。需要用户自行对病毒…

C语言之位段

1.位段的声明 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int 。 2.位段的成员名后边有一个冒号和一个数字。 比如&#xff1a; struct A {int _a:2;int _b:5;int _c:10;int _d:30; }; A 就是一个位段类型…