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{//文件打开错误,输出错误信息 errfmt.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.mzph.cn/news/620092.shtml

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

相关文章

Java多线程:初识多线程!左手画方,右手画圆

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、线程与进程二、创建线程方法1、继承Thread类2、实现Runnable接口3、两者区别4、举个栗子5、简洁写法Ⅰ、Thread匿名内部类写…

DNS 正/反向解析 主从复制 分离解析

一 DNS概念它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网 每一台 DNS 服务器都只负责管理一个有限范围 根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本 一级域名&#xff…

【已解决】C语言实现多线程的同步与异步

说真的写了这篇博文时,才知道c语言本身不支持多线程,而是一些windowsapi让c语言拥有多线程的能力,那下面内容就以打开对话框为例,展现如何实现多线程的同步与异步。 文章目录 问题起源c语言多线程同步方案c语言多线程异步方案总结…

Typora使用及Markdow学习笔记1

编程如画,我是panda! 最近有在学习Markdown,所以这次分享一下我的Markdown学习笔记 目录 前言 一、标题 二、段落 1.换行 2.分割线 三、文字显示 1.字体 2.上下标 四、列表 1.无序列表 2.有序列表 3.任务列表 五、区块 六、代…

【Linux运维】LVM和RAID学习及实践

LVM和RAID学习及实践 背景LVM简介新加硬盘的操作RAID-磁盘阵列应用场景RAID0RAID1其他结构RAID制作RAID 小结 背景 某台服务器的磁盘管理需要自己动手处理,找了一些资料也踩了一些坑,在这里记录一下,先介绍一下LVM和RAID这两个东西。在计算机…

【天龙八部】攻略day6

关键字: 灵武、寻宝要求、雁门 1】灵武选择 西凉枫林,锦带,短匕 白溪湖,明镜,双刺 竹海,玉钩,锁甲 2】楼兰寻宝需求 等级80级,40级前6本心法 3】雁门奖励 简单35*4元佑碎金 普…

慕尼黑工业大学最新提出!单目实时密集建图的混合隐式场方法

作者:小柠檬 | 来源:3DCV 在公众号「3DCV」后台,回复「原论文」可获取论文pdf 我们提出了一种新颖的方法,它将基于深度学习的密集SLAM与神经隐式场相结合,实时生成密集地图,而无需像以前的方法那样依赖RGB-…

数据库练习题

素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varchar(10) NO…

java大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统源码包含技术文档

主要功能:学生可注册登录,预约自己宿舍楼栋的共享厨房和评价,也可以使用该楼栋的洗衣房,查看洗衣机吹风机的使用情况和报修,还可以进入该楼栋自习室打卡和评价。管理员可管理所有的学生和宿管,分配宿舍&…

10年果粉拯救老掉牙Mac心得(没错我是标题党)

连续两周了,当我不能用Mac,或者说当我闲置了近10年隔三差五的用Mac时,成功发现我的AppleID已经无法登录了。事情是这样的,当我踌躇满志地准备改一篇稿子(潜在的稿费啊亲!)时,发现Pages竟然没有W…

用Kimi chat识别并整理图片里面的文字

Kimi chat是有OCR功能的,可以识别图片中的文字。 下面这张图片是一本书的注释,里面提到有不少图书,利用Kimi chat就可以轻松完成提取其中图书书名的任务。 先拿一张图片来做实验。Kimichat的回复: 在您提供的文件内容中&#xf…

LLM大模型显存计算

一、目录 模型参数单位内存计算案例显卡算力推理显存计算训练显存计算huggface 官网计算 模型推理/训练 需要的显存大模型输入长度与显存的关系大模型推理 多线程与显存的关系 参考:https://blog.csdn.net/Johntill/article/details/132629075 二、实现 模型参数…

【RV1126 学习】SDK/ U-Boot/kernel/rootfs 编译学习

文章目录 RV1126芯片介绍rv1126 模块代码目录相关说明 SDK 包下的脚本使用build.sh 脚本使用envsetup.sh 脚本使用mkfirmware.sh 脚本使用rkflash.sh 脚本使用 U-Boot 编译和配置uboot 的配置修改编译操作 kernel 的修改编译rootfs 编译和配置buildroot 配置busybox 配置 固件打…

爬虫之牛刀小试(四):爬取B站番剧的简介

今天爬取的是b站。 如何爬取b站中的番剧呢? 首先我们来到番剧索引中,随便点开一部动漫,检查代码。 每个作品对应一个链接: https://www.bilibili.com/bangumi/play/ss…(ss后面的数字称为ss号) 发现关于动漫的信息…

【SAP ABAP】数据赋值

1. 赋值 语法格式 f2 f1. 表示将变量f1的值赋值给变量f2 输出结果如下: 扩展补充(带偏移量的赋值) 输出结果如下: 将lv_a从偏移2位开始的位置,取长度为3的内容345赋值给 lv_b,赋值覆盖lv_b从偏移4位开始的位置且长度为3的内容…

法线变换矩阵的推导

背景 在冯氏光照模型中,其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间,我们需要将法向量转换到世界空间,然后在世界空间中让法向量和光线做运算。这里便有一个问题,如何将法线…

线程安全--互斥锁

文章目录 一.线程安全问题读取无效(脏)数据丢失更新线程安全的保证--操作的原子性 二.互斥锁及其实现原理互斥锁的实现原理pthread线程库提供的锁操作 三.死锁问题 一.线程安全问题 当多个线程并发地对同一个共享资源进行修改操作时,可能会引发数据读写错误(比如读取无效(脏)数…

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测效果一览基…

数据安全保障的具体措施有哪些

随着信息化时代的到来,数据已经成为企业和社会发展的重要资产。然而,数据安全问题也日益突出,如何保障数据的安全性、完整性和可用性成为了亟待解决的问题。以下将详细探讨数据安全保障的各个方面,以期为企业和社会提供更好的数据…

飞桨分子动力学模拟-论文复现第六期:复现TorchMD

飞桨分子动力学模拟-论文复现第六期:复现TorchMD Paddle for MD 飞桨分子动力学模拟科学计算 复现论文-TorchMD: A deep learning framework for molecular simulations 本项目可在AIStudio一键运行:飞桨分子动力学模拟PaddleMD-复现TorchMD 【论文复…