Javaer 5分钟入门 Golang

文章目录

  • 前言
  • 一个 go 文件长啥样?
  • Go 语言的变量
    • 变量类型
    • 变量声明
  • Go 语言的函数&方法
  • Go 语言没有的概念
    • 访问修饰符
    • 面向对象模型
    • 异常处理机制
  • Go 语言高效简洁的并发编程
  • 总结

前言

这两年主流的编程语言 Golang,想必大家或多或少都接触过。云原生领域的许多组件都基于Go开发的,例如Docker,Kubernetes,etcd,还有很多大厂的新业务都转向了Go。

所以,对于程序员而言,掌握Go语言就显得尤为重要,尤其是Java程序员(懂得都懂)。希望通过本文的介绍,Java开发者可以快速入门Go语言。

一个 go 文件长啥样?

最简单的Hello,World:

跟 java 文件不同,go文件中的包名(package)跟文件路径没有关系,即便文件所在的路径是aa/bb/cc,包名也可以是xx但是 main 函数必须在 main 包

func 是声明函数的关键字,main函数就类似Java的main方法,程序的执行入口,写法有点像js。

导入包有两种方式

导入单个包
import "fmt"
导入多个包
import (  "fmt"  "os"  
)  

Go 语言的变量

入门一个编程语言,个人认为先要了解基本的变量类型和变量的定义,其他的运算符、控制流语句都大差不差。

变量类型

Go 语言变量类型可以分为两大类:基本类型和派生类型。

类型变量类型描述
基本类型布尔型 (bool)逻辑值,true 或 false
整数型
int88位有符号整数
int1616位有符号整数
int3232位有符号整数
int6464位有符号整数
uint8 (别名 byte)8位无符号整数,通常用于表示ASCII字符
uint1616位无符号整数
uint3232位无符号整数
uint6464位无符号整数
rune (别名 int32)用于表示Unicode码点
浮点型
float3232位IEEE 754浮点数
float6464位IEEE 754浮点数
complex6432 位实数和虚数
complex12864 位实数和虚数
字符串型 (string)文本数据
派生类型数组固定数量的同一类型的元素
切片动态大小的、灵活的、可变的数组,类似Java中的List
映射 (Map)无序的键值对集合
结构体 (Struct)用户定义的类型,包含多个字段,类似Java中的类
指针 (*T)存储一个变量的内存地址
通道 (Chan)用于在goroutines之间进行通信
函数 (func)可执行的代码块
接口 (Interface)定义对象的一组方法集

其中Struct可以理解为Java中的一个类,定义一些成员变量,而且仅限变量。

指针是Java中没有的类型,Go 语言中的指针可以直接对变量所在的内存进行访问和操作。这就意味着,如果一个函数接收的参数是指针类型,就会像Java的引用传递一样。如下示例

通道是用于协程之间通信的,后面有代码示例。

变量声明

和Java相比,Go 语言中声明变量时,变量名称在变量类型的前面,如下:

var num int = 1 

Go 语言声明变量有两种方式:

  • 显式声明:使用 var 关键字,并根据实际情况指定变量类型。如:
var num int = 1 
var num = 1  //编译器会根据初始化值推断变量的类型
var num int //声明变量不初始化,必须要指定变量类型
  • 类型推断:使用:=操作符,编译器会自动推断出变量类型(体现出简洁的特性)。如:
num:=1

如果声明了一个变量但没有使用它,编译器会报一个错误,提示该变量是多余的。这是 Go 语言的一个特性。

Go 语言的函数&方法

Go 语言中的函数和方法,都是用 func 关键字定义的,但是使用场景不同。两者定义如下:

函数是独立定义的代码块,不依赖任何类型。格式如下:

但是 Go 语言不支持同名但参数列表不同的函数,也就是重载。

方法是定义在某个类型的函数,通常是结构体,所以声明方法时需要关联结构体。格式如下:

结构体中只能声明变量,不能声明函数。所以给一个结构体定义一个函数,就需要通过这种方式。例如 Java 中的 getter 方法在 Go 语言中这样声明:

函数和方法的区别就是调用对象不同,函数不属于任何类型,方法属于某个类型

Go 语言没有的概念

  • 没有修饰符,比如 private、public。
  • 没有类、封装、继承、多态等面向对象概念。
  • 没有异常,比如 try…catch…。

虽然没有这些概念,但是可以通过其他方式呈现。

访问修饰符

Go 语言中没有直接提供类似 Java 中的访问修饰符(public、private、protected)来控制成员的可见性,但是可以通过命名规定实现类似的效果

如果一个标识符(变量、函数、类型等)的首字母是大写的,那么对其他包是可见的。如果首字母是小写的,那么它就只能在内部访问

例如下面的示例中,ExportedVariable 可以被外部的包进行访问,而unexportedVariable 就不可以。

面向对象模型

Go 语言中没有直接提供类似 Java 中的类和继承面向对象编程模型,但它可以通过一种更简洁和直接的方式实现封装、继承和多态这些概念

下面是一个简单的示例,通过结构体、接口和方法实现面向对象。

在结构体Rectangle嵌入BaseShape,就相当于继承,也可以是ORM中的一对一关系。

给Rectangle定义的Area方法就相当于封装。

而Go 语言中的接口实现,不像结构体和方法那样有显式的关联。结构体和接口的关系是这样的:如果某个结构体实现了接口中定义的所有方法,那么它就被认为实现了该接口,例如上面示例中的Area() 。

异常处理机制

Go 语言中没有 Java 中的异常处理机制,也就是try...catch...,而是以返回值的方式将错误返回给调用方,如下面的示例:

Go 语言高效简洁的并发编程

Go 语言的并发编程是它的一大特色,和 Java 并发线程不同的是,Go 采用轻量级的协程(Goroutine)实现并发程序,协程之间的通信通过通道机制实现。下面是一个简单的示例

相比 Java 复杂的并发编程,Go 语言显得特别的简单。

总结

基于 Go 语言编写的代码整体看上去是非常简洁的,而且语法规则和关键字相对较少,对于小白来说也比较容易上手。

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

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

相关文章

使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

前言 RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 特点 成熟,稳定消息持久化灵活的消息路由高性能,高可用性,可扩展性高支…

【PYTHON】多进程运行示例含共享数据

运行结果 Python多进程调用示例 import multiprocessing import time import os import sys# 注册多个函数用于不同进程分别调用 def testcase0():time.sleep(1)return "case0_"get_time()def testcase1(timestamp):return "case1_"timestampdef testcase…

Python | TypeError: ‘float’ object is not subscriptable

Python | TypeError: ‘float’ object is not subscriptable 在Python编程中,遇到“TypeError: ‘float’ object is not subscriptable”这一错误通常意味着你尝试对浮点数(float)使用了下标访问(如数组或列表那样的访问方式&a…

Mindspore框架循环神经网络RNN模型实现情感分类|(四)损失函数与优化器

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量 Mindspore框架循环神经网络RNN模型实现…

探索 Blockly:自定义积木实例

3.实例 3.1.基础块 无输入 , 无输出 3.1.1.json var textOneJson {"type": "sql_test_text_one","message0": " one ","colour": 30,"tooltip": 无输入 , 无输出 };javascriptGenerator.forBlock[sql_test_te…

数据结构:二叉树(堆)的顺序存储

文章目录 1. 树1.1 树的概念和结构1.2 树的相关术语 2. 二叉树2.1 二叉树的概念和结构2.2 二叉树的特点2.3 特殊的二叉树2.3.1 满二叉树2.3.2 完全二叉树 2.4 二叉树的性质 3. 实现顺序结构二叉树3.1 堆的概念和结构3.2 初始化3.3 销毁3.4 插入数据3.5 向上调整算法3.6 删除数据…

【二叉树】—— 算法题

一、单值二叉树 题目要求:判断二叉树是不是单值二叉树(就是所以节点的值都相等)。 思路: 利用二叉树的递归思想,判断每一个节点值与其左右子节点的值是否相等,如果遇到空节点,就返回true&#…

醒醒,别睡了...讲《数据分析pandas库》了—/—<7>

一、 1、处理缺失值 1.1 认识缺失值 系统默认的缺失值 None 和 np. nan datapd.Series([3,4,np.nan,1,5,None]) dfpd.DataFrame([[1,2,None],[4,np.nan,6],[5,6,7]]) 1.2 缺失值查看 直接调用info() 方法就会返回每一列的缺失情况。 dfpd.DataFrame([[1,2,np.nan],[4,np.n…

在Linux中,MySQL备份与恢复

随着自动化办公与电子商务的不断发展,企业对于信息系统的依赖性越来越高,而数据库在信息系统中担任着非常重要的角色。尤其一些对数据可靠性要求非常高的行业,如银行、证券、电信等,如果发生意外宕机或数据丢失,其损失是非常严重的…

[ACTF2020 新生赛]Upload1

打开靶机,发现什么都没有 查看源码发现有个表单,不过高度为0,所以被隐藏了,我们直接找打css文件,清空(也可以设置原始高度) 然后提交木马脚本,直接提交PHP不通过 修改为phtml&#x…

Java | Leetcode Java题解之第299题猜数字游戏

题目&#xff1a; 题解&#xff1a; class Solution {public String getHint(String secret, String guess) {int bulls 0;int[] cntS new int[10];int[] cntG new int[10];for (int i 0; i < secret.length(); i) {if (secret.charAt(i) guess.charAt(i)) {bulls;} e…

初学Mybatis之多对一查询 association 和一对多查询 collection

XML 映射器 多对一&#xff1a;关联&#xff08;association&#xff09; 一对多&#xff1a;集合&#xff08;collection&#xff09; mysql 创建教师、学生表&#xff0c;插入数据 create table teacher(id int(10) primary key,name varchar(30) default null ) engineI…

OpenSource - Ip2region 离线IP地址定位库和IP定位数据管理框架

文章目录 Ip2region 是什么Ip2region 特性1、IP 数据管理框架2、数据去重和压缩3、极速查询响应 xdb 数据查询xdb 数据生成xdb 数据更新手动编辑更新检测自动更新 相关备注1、并发查询必读2、技术资源分享 Release Ip2region 是什么 https://github.com/lionsoul2014/ip2regio…

【C++】使用哈希表封装unordered_map与unordered_set

文章目录 1. unordered系列关联式容器1.1 unordered_set1.2 unordered_map 2. unordered_set/map的封装2.1 基本接口2.2 迭代器2.2.1 迭代器的结构2.2.2 set迭代器的封装2.2.3 map迭代器的封装 3.完整代码3.1HashTable3.2unordered_set3.3unordered_map 1. unordered系列关联式…

Windows Redis启动方式及保持服务运行方法

1. Redis启动方法 1. cmd进入redis文件夹下&#xff0c;输入&#xff1a;redis-server.exe redis.windows.conf&#xff0c;出现如下界面启动成功。但此cmd窗口要一直保持打开状态&#xff0c;一旦关闭redis也就关闭了。要想cmd关闭&#xff0c;但redis处于打开状态&#xff…

医疗器械上市欧美,需要什么样的网络安全相关申报文件?

医疗器械在欧美上市时&#xff0c;需要提交的网络安全相关申报文件主要包括以下几个方面&#xff0c;这些要求基于欧美地区的法律法规和监管机构的指导文件。 一、美国FDA要求 1. 网络安全管理计划 内容&#xff1a;制造商需要提交一份网络安全管理计划&#xff0c;该计划应包含…

【人工智能】人工智能概论(一):人工智能基本概概念、学派、发展历程与新一代人工智能

文章目录 1. 人工智能的基本概念与定义2. 人工智能的主要学派及主旨思想2.1. 符号主义学派&#xff1a;AI源自数学逻辑2.2. 连接主义学派&#xff1a;AI源自仿生学2.3. 行为主义学派&#xff1a;AI源自控制论 3. 人工智能的起源及发展历程4. 驱动新一代人工智能快速发展的因素 …

【C语言】C语言期末突击/考研--导学篇

前言 我将把C语言的知识要点&#xff0c;学习收获以文章形式发表&#xff0c;由于我目前也还是一个菜鸟&#xff0c;难以避免错误和存在观点片面的部分&#xff0c;非常感谢读者指正&#xff01;希望能在这里与大家共同进步&#xff0c;早日成为大牛&#xff01;进入大厂&…

本地使用Git同步、配合Gitee同步至仓库并下拉到本地(亲手调试,全能跑通)

这几天在公司&#xff0c;同事都在使用Gitee上传项目&#xff0c;进行同步&#xff0c;我也进行了简单学习了解了一下版本控制软件Git&#xff0c;挺不错的&#xff0c;故写个笔记记录一下。 本篇博文主要涉及的内容&#xff1a; 1&#xff0c;本地写代码&#xff0c;通过Git同…

初阶数据结构1 算法复杂度

1.数据结构概念 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所以我们要学各式各样的数据结构&#xff0c; 如&#xff1a;线性表、树、图、哈…