Go 知多少?

在这里插入图片描述

作为一名已接触过其他语言的开发,再去学习一门新语言可比之前轻松不少,

语言之间存在很多相似点,但是新语言也有自己的不同点,通常我会先了解它与其他语言常遇到的不同点有哪些,

使自己先能够上手编写基础程序,然后学会能够上手运用语言的各类常见框架,最后再理解新语言更深层的差异。

Go 知多少?

  1. 启动文件是 main 包,main 函数应该存在 main 包中
  2. 基本调用单位是包,包内共享所有源文件的变量、常量、函数和其他类型,不同包之间函数调用通过包名访问(前提是导入包名,禁止直接或者间接的循环导包)
  3. 变量、函数等首字母大写可以将其导出供外部访问,首字母小写则表示不对外暴露;同样的 internal 包表示私有包
  4. 占位符 _,可用于各种赋值操作
  5. 不存在隐式类型转换
  6. 代码块之间变量的作用域是相互独立的
  7. 条件控制标签 label 的使用通常和 goto、break、continue 一起使用,goto A、break A、continue A,会跳转到标签为 A 的代码块
  8. 循环控制 for index,value := range iterable {}
  9. 数值 0 和非 0 不能替代为 bool 类型
  10. 整型渠道 chan int,字典 map[key-type]value-type,数组 []type
  11. nil 不等于其他语言中的 null,nil 不属于任何类型,它只是部分类型的默认值(go 希望错误可控,通常错误信息通过函数、方法返回,你可以认为 != nil 表示存在错误,函数调用等返回错误,需要错误处理)
//典型的异常判断
file,err := os.Open("a.txt")
if err != nil{
	//文件打开错误,输出错误信息 err
	fmt.Println("文件打包失败:",err)
} else {
	//文件读取成功
}

//如何创建一个错误
err := errors.New("打开失败!")
//支持格式化参数
err := fmt.Errorf("%d 号文件打开失败!"10)
  1. 常量表示使用 const,只能是基本类型,也可以这样使用 const( Name=“lf” Age = 18 Sex = “male”)
  2. 变量表示使用 var,var var-name type;编译器自动推断变量类型 var-name:= “lf”
  3. 数组是定长的数据结构,切片是不定长,当容量不够时自动扩容;数组切割是 arr[start:end] 左闭右开(包含左边的索引值,不包含右边的索引值)
  4. 切片:没有指定固定长度的数组?推荐使用 make 创建空切片,切片的使用和数组类似,切片的容量是可变的,容量大小是根据切片的长度自动调整的
  5. 字符串本质是一个不可变的只读字节数组,对字符串的操作和切片一致,所以对于字符串可以描述的数据类型有:string、byte、rune;
  6. 字符串表示除了使用双引号,还有反引号(反引号不需处理转义字符)
  7. 结构体标签,常见在 json 解析:type Student struct {
    Name string json:"name"
    }
  8. 函数是可以有多个返回值,func GetStudentInfo(id int)(name string, number int){};如果 return 没有指定返回的变量,那么紧跟 return 语句的那个值就是返回值
  9. 延时调用 defer,表示在函数返回前执行(用法类似 java try 块的 finally?),往往和匿名函数一起使用
  10. 方法的定义(请与函数区别开),方法:只有自定义来才拥有
///函数
func GetName()string{
	return "lf"
}


///方法
//自定义类型
type IntArrType []int

//方法声明
func (it IntArrType)GetNumber(index int)int{
	//it 可以看作是自定义类型本身(Java 中的 this?)
	return it[index]
}

//使用
var numbers IntArrType
numbers = []int{11,22,33,44}
var num = numbers.GetNumber(0)
  1. 空接口:type Any interface {},所有类型都是空接口的实现,Any 接口可以保存任何值(Java 的 Object?)

var who Any
who = “lf”
who = 18

  1. 匿名空接口:interface{},作为函数参数时表示可以接受任意类型的值func Who(anything interface{}),后续可以直接使用 Any
  2. 基本接口:一组方法的集合,定义的方法可以不写参数名称、返回值名称(可以只写类型)
  3. 通用接口:包含类型集的接口(啥是类型集合:集合可不可以理解成切片、数组?类型指的是基本类型?类型集——一个切片,元素是基本类型的数组) [int,string,int32]
  4. 范型:大致意思可以理解为 Java 里面的范型
//已用在函数上为例,T 可以理解为占位符,主要是类型约束着一块
func Append[类型约束](str1,str2 T)T{
}
  1. 静态强类型:静态表示变量类型在编译期间确定下来,之后不会发生变化;强类型指的是运行过程中严格进行类型检查
  2. 类型断言:和 Java 中的 instance 用法相似
var a = 1
val,is := a.(int);
if is{
	//a 属于 int 类型
}
  1. 类型判断:和 Java 中的 instance 用法相似
var a = 1
switch a.(type){
	case int:
	case float64:
	case string:
}
  1. 异常 panic:go 运行时异常
//调用 panic 终止运行
panic("文件打开失败!")

//在抛出 panic 之后你仍然想保持程序继续运行,可以执行恢复操作
//调用 recover 通常在函数延时调用中处理
recover()

//退出程序,通常在遇到严重错误时调用
os.Exit(1)
  1. 包管理 go mod:执行 go env或查看配置文件more .bash_profile检查确认配置 GO111MODULE是否开启(on/off/auto);通常我们没有梯子,也推荐配置包下载来源代理GOPROXY,避免因为网络问题阻碍编码进行。

到此为止吧~

算是进一步重新认识 Go,

剩下的并发、反射等在后续开发过程中逐个学习,

那么接下来可以实操项目了!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式匹配 int unint uint16 类型最大值最小值的类型范围

以int16来举例 答案 ^([1-6]\d(?<!6[6-9])\d(?<!65[6-9])\d(?<!655[4-9])\d(?<!6553[6-9])|0|10{4}|[1-9]\d{0,3})$解析 int16的范围是 0~65535 。我们把它分解为 0 1~9999 10000 ~ 65535 。前两组很简单如下 0[1-9]\d{0,3}正则表达式 否定式向后查看 (?…

【LeetCode】19. 删除链表的倒数第 N 个结点(中等)——代码随想录算法训练营Day04

题目链接&#xff1a;19. 删除链表的倒数第 N 个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&a…

第133期 为什么一些场景下Oracle很难被替换掉(20240113)

数据库管理133期 2024-01-13 第133期 为什么一些场景下Oracle很难被替换掉&#xff08;20240113&#xff09;1 数据量2 架构3 应用改造4 Exadata和融合数据库总结 第133期 为什么一些场景下Oracle很难被替换掉&#xff08;20240113&#xff09; 今天在薛首席的群里&#xff0c…

HCIP-1

一、网络类型&#xff1a; 点到点 BMA&#xff1a;广播型多路访问 – 在一个MA网络中同时存在广播&#xff08;洪泛&#xff09;机制 NBMA&#xff1a;非广播型多路访问—在一个MA网络中&#xff0c;没有洪泛机制 MA&#xff1a;多路访问 在一个网段内&#xff0c;存在的节…

day-08 构造限制重复的字符串

思路 首先统计每个字符的个数&#xff0c;然后从后向前按照题意添加字符 解题方法 从后向前添加字符&#xff1a;1.当前字符个数<repeatLimit,直接添加 2.当前字符个数>repeatLimit,添加repeatLimit个&#xff0c;然后插入一个下一级字符 时间复杂度:O(n) 空间复杂度:…

java中多线程

文章目录 多线程进程和线程进程线程 继承Thread类方式实现多线程设置线程名字的两个方式获取正在运行的线程线程调度模型和线程优先级设置两种调度模型优先级设置 线程控制sleepjoin守护线程 线程生命周期 多线程 进程和线程 进程 进程&#xff1a;是正在运行的程序 是系统进…

【算法每日一练]-dfs (保姆级教程 篇9) #俄罗斯方块 #ABC Puzzle #lnc的工资

目录 今日知识点&#xff1a; 二维图形的状态压缩&#xff0c;存下所有的合法状态然后暴力遍历 dfs的优化剪枝 二项式定理 俄罗斯方块 ABC Puzzle lnc的工资 俄罗斯方块 322D 题意&#xff1a;在4*4方格中分别给出3个俄罗斯方块&#xff0c;问是否可以经过旋转&#xf…

TOP刊竟一个月有结果,连中两篇,感觉投了就要!简直性价比天花板!

CEJ 期刊评说 网 友 辣 评 评说1&#xff1a;审稿很快&#xff0c;编辑应该就给审稿人20天审稿&#xff0c;投过两次都特别快&#xff01; 评说2&#xff1a;确实是性价比天花板&#xff0c;文章连续被老牌的一、二、三区期刊拒&#xff0c;多亏了 CEJ把我捞了起来&#xf…

IPv6组播技术--MLDv2

MPLDv1工作机制 IPv6组播网络中RouterA和RouterB连接主机网段,在主机网段上有HostA、HostB、HostC三个接收者。假设HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据。 查询器选举机制 当一个网段内有多台IPv6组播路由器时,由于它们都可以接收到…

mysql进阶 - 存储过程

目录 1. 用途&#xff1a; 2. 相关语法 2.1 创建 2.1.1 语法 2.1.2 示例 2.2 查看存储过程 2.3 调用 2.4 修改存储过程 2.5 删除存储过程 1. 用途&#xff1a; 存储过程广泛存在于一些遗留系统&#xff0c;可以减少代码的编写。而近些年&#xff0c;存储过程很少再用…

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing 中文名称: 角色-LLM&#xff1a;训练Agent用于角色扮演 文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158) 作者: Yunfan Shao, Linyang Li, Junqi Dai, Xipeng Qiu 机构: 复旦大学…

制作 Kali 可启动 USB 驱动器

Kali USB驱动器&#xff0c;轻松安全&#xff0c;获取最新镜像&#xff0c;开始强大的安全测试&#xff01; Kali 可启动 USB 驱动器的优点&#xff1a; 不会更改主机系统的硬盘驱动器或已安装的操作系统&#xff0c;并且要返回正常操作&#xff0c;您只需删除“Kali Live”U…

31 树的存储结构二

DIsplay() 递归显示 :图示 求树的高度时&#xff0c;递归的技巧 在递归的过程中&#xff1a;ret单独和任意一个子树的子高度比较&#xff0c;如果ret<max&#xff0c;retmax ------------- 注意&#xff1a;组织链表和子链表的【元素类型】都是TLNode* 链表都要先通过TLNod…

HTB-SAU

信息收集 # cat port.nmap # Nmap 7.94 scan initiated Thu Jan 11 19:26:51 2024 as: nmap -sS --min-rate 10000 -p- -oN port.nmap 10.10.11.224 Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (0.28s latency). Not shown: 65531 closed tcp ports (r…

pymssql 报错误解决办法:20002, severity 9

错误 解决办法 python3.6&#xff0c;安装pymssql低版本&#xff08;pymssql-2.1.5-cp36-cp36m-win32.whl&#xff09;

Feature Fusion for Online Mutual KD

paper&#xff1a;Feature Fusion for Online Mutual Knowledge Distillation official implementation&#xff1a;https://github.com/Jangho-Kim/FFL-pytorch 本文的创新点 本文提出了一个名为特征融合学习&#xff08;Feature Fusion Learning, FFL&#xff09;的框架&…

流量预测中文文献阅读(郭郭专用)

目录 基于流量预测的超密集网络资源分配策略研究_2023_高雪亮_内蒙古大学&#xff08;1&#xff09;内容总结&#xff08;2&#xff09;流量预测部分1、数据集2、结果对其中的一个网格的CDR进行预测RMSE和R2近邻数据和周期数据对RMSE的影响 &#xff08;3&#xff09;基于流量预…

点餐新体验:老板自研扫码点餐小程序的成果

为了提高餐厅的效率和顾客的用餐体验&#xff0c;餐饮店老板们纷纷开始探索新的技术手段。其中&#xff0c;扫码点餐小程序就是一种非常受欢迎的解决方案。 扫码点餐小程序是一种基于微信小程序开发的餐饮点餐系统&#xff0c;它通过扫描桌码或菜品二维码&#xff0c;实现快速点…

ElasticSearch概述+SpringBoot 集成 ES

ES概述 开源的、高扩展的、分布式全文检索引擎【站内搜索】 解决问题 1.搜索词是一个整体时&#xff0c;不能拆分&#xff08;mysql整体连续&#xff09; 2.效率会低&#xff0c;不会用到索引&#xff08;mysql索引失效&#xff09; 解决方式 进行数据的存储&#xff08;只存储…

【面试宝典】图解ARP协议、TCP协议、UDP协议

一、ARP协议 二、TCP协议 三、UDP协议 四、TCP和UDP的区别
最新文章