Go 知多少?

news2024/9/22 13:31:51

在这里插入图片描述

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

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

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

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.coloradmin.cn/o/1381295.html

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

相关文章

【LabVIEW FPGA入门】LabVIEW FPGA实现I2S解码器

该示例演示了如何使用 LabVIEW FPGA 解码 IS 信号。该代码可用于大多数支持高速数字输入的LabVIEW FPGA 目标(例如R 系列、CompactRIO)。IS 用于对系统和组件内的数字音频数据进行编码。例如,MP3 播放器或 DVD 播放器内部的数字音频通常使用 …

【b站咸虾米】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址:【新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 三、vue语法 继续回到官…

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

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

浅析三种Anaconda虚拟环境创建方式和第三方包的安装

目录 引言 一、Anaconda虚拟环境创建方式 1. 使用conda命令创建虚拟环境 2. 使用conda-forge创建虚拟环境 3. 使用Miniconda创建虚拟环境 二、第三方包的安装和管理 1. 使用 pip 安装包: 2. 使用 conda 安装包: 三、结论与建议 引言 在当今的数…

Ceph入门到精通-通过 CloudBerry Explorer 管理对象bucket

简介 CloudBerry Explorer 是一款可用于管理对象存储(Cloud Object Storage,COS)的客户端工具。通过 CloudBerry Explorer 可实现将 COS 挂载在 Windows 等操作系统上,方便用户访问、移动和管理 COS 文件。 支持系统 支持 Wind…

【ceph】在虚拟环境中需要给osd所在的虚拟盘扩容操作

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

力扣每日一练(24-1-13)

如果用列表生成式,可以满足输出的型式,但是不满足题意: nums[:] [i for i in nums if i ! val]return len(nums) 题意要求是: 你需要原地修改数组,并且只使用O(1)的额外空间。这意味着我们不能创建新的列表&#xff…

2024年 13款 Linux 最强视频播放器

Linux视频播放器选择多样,如榛名、MPlayer、VLC等,功能强大、支持多格式,满足各类用户需求 Linux有许多非常强大的播放器,与windows最强视频播放器相比,几乎丝毫不逊色! 一、榛名视频播放器 榛名视频播放…

Java副本的概念

在Java中,"副本"(copy)一词可以用于描述不同的概念,具体取决于上下文。以下是两个常见的用法: 对象的副本:在Java中,当你创建一个对象并将其赋值给另一个变量时,实际上是创…

遥感影像-语义分割数据集:高分卫星-云数据集详细介绍及训练样本处理流程

原始数据集详情 简介:该云数据集包括RGB三通道的高分辨率图像,包含高分一、高分二及宽幅数据集。 KeyValue卫星类型高分系列覆盖区域未知场景未知分辨率1m、2m、8m数量12000单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通道数三通道标签图…

Nightingale 夜莺监控系统 - 部署篇(1)

Author:rab 官方文档:https://flashcat.cloud/docs 目录 一、概述二、架构2.1 中心机房架构2.2 边缘下沉式混杂架构 三、环境四、部署4.1 中心机房架构部署4.1.1 MySQL4.1.2 Redis4.1.3 Prometheus4.1.4 n9e4.1.5 Categraf4.1.6 验证4.1.7 配置数据源 4…

突然又对 Go 感兴趣,GOPATH entry cannot start with shell metacharacter 错误

打发无聊时间,水文一篇~ 事情是这样的,因为我们上架的渠道包基本是定制化混淆出包, 混淆出包有一个关键点就是指定映射文件,映射文件的内容有一部分是使用外部工具在打包前按照一定规律随机生成包名、类名&#xff0c…

flutter使用get库管理路由,并设页面跳转动画和常见动画

get库还是非常强大的一个仓库,里面包含了非常常用的一些方法,比如路由管理,这是最常见和最常用的一个功能了,我们可以先配置一个路由对象,然后在里面配置路由列表,并且设置路由跳转方式。 第一种方式&…

vue3-计算属性

计算属性 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。 根据作者今年是否看过书展示不同信息 <script lang"ts" setup> import { ref, reactive } from "…

java实现局域网内视频投屏播放(五)视频搜索和投屏自动切换下一个

代码链接 这次对ui做了一些调整&#xff0c;整体分成了5个类别分别为 搜索设备播放任务已下载视频列表视频搜索下载任务列表 视频搜索 搜索 点击搜索后&#xff0c;会从执行所有VideoResolver实现类的search方法&#xff0c;将搜索到的结果汇总到一起&#xff0c;根据视频的…

设计模式⑤ :一致性

一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》&#xff08;【日】结城浩 著&#xff09;。该系列文章可随意转载。 …

node-sass@4.7.2 postinstall: `node scripts/build.js`

Can‘t find Python executable “D:\Python36\python.EXE“, you can set the PYTHON env variable.-CSDN博客 gyp ERR! build error gyp ERR! stack Error: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe failed with exit code: 1 gyp ERR! stack at Chil…

【DDR】基于Verilog的DDR控制器的简单实现(一)——初始化

在FPGA中&#xff0c;大规模数据的存储常常会用到DDR。为了方便用户使用&#xff0c;Xilinx提供了DDR MIG IP核&#xff0c;用户能够通过AXI接口进行DDR的读写访问&#xff0c;然而MIG内部自动实现了许多环节&#xff0c;不利于用户深入理解DDR的底层逻辑。 本文以美光(Micro…

使用emu8086实现——顺序程序设计

一、实验目的 1. 掌握顺序程序设计方法 2. 掌握汇编语言编程设计方法。 二、实验内容 1.用查表的方法将一位十六进制数转换成它相应的ASCII码。 代码及注释&#xff1a; Data segment ;定义数据段Tab db 30h,31h,32h,33h,34h,35,36h,37h,38h,39h ;定义一个Tab的字节型…

云卷云舒:AI for DB、DB for AI

云卷云舒&#xff1a;算力网络云原生&#xff08;下&#xff09;&#xff1a;云数据库发展的新篇章-CSDN博客https://blog.csdn.net/bishenghua/article/details/135050556 随着数据库和AI技术的分支同向演进&#xff0c;AI 和数据库间的关联越发紧密了。 大模型的演进发展&a…