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的异常处理机制 异常处理是编程中的一个重要概念,用于处理程序运行过程中出现的错误或异常情况。Python提供了强大的异常处理机制,使得程序能够优雅地处理错误,而不是直接崩溃。 1. 异常处理的基本概念 在Python中,异常处…

【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…

数电票如何查验、管理?C#发票查验接口集成

数字化时代,一切事务都在逐渐向数字化转型,发票也不例外。现如今,数电票俨然成为了商业交易的新常态,不仅环保高效,还有助于简化财务管理流程。但任何事务都具有双面性,如何对数电票的真实性和有效性进行查…

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&#…

JavaScript的常见难点(一)

1. 异步编程 如何使用:使用回调函数、Promise、async/await 来处理异步操作。面试问题: 解释什么是 Promise,如何使用它。async 和 await 是什么?它们如何简化异步代码?面试问题的答案: Promise&#xff1…

linux异步操作接口

aiocb数据结构 需要头文件 #include <aiocb.h>结构定义为 struct aiocb {/* The order of these fields is implementation-dependent */int aio_fildes; /* File descriptor */off_t aio_offset; /* File offset */volatile void *ai…

醒醒,别睡了...讲《数据分析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…

后端面试题日常练-day12 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 Java中的重载&#xff08;Overload&#xff09;和重写&#xff08;Override&#xff09;有何区别&#xff1f; a) 重载是指在同一个类中可以有多个方法同名&#xff0c;但参数列表不同&#xff1b;重写…

SpringMVC异步处理的 5 种方式

SpringMVC异步处理的 5 种方式 Spring MVC 处理异步请求的主要原因是提高 Web 应用的性能和可扩展性&#xff0c;特别是在处理长时间运行的任务或需要等待外部资源&#xff08;如数据库查询、远程服务调用等&#xff09;时。以下是一些具体原因和优势&#xff1a; 优势 1. 资…

迁移FastDFS

迁移FastDFS 停止旧集群服务 [rootnode01 fastdfs]# systemctl stop fdfs_tracker [rootnode01 fastdfs]# systemctl stop fdfs_storage [rootnode01 fastdfs]# systemctl stop nginx把旧集群的配置文件复制到新的集群上&#xff0c;并修改对应的IP地址&#xff0c;路径可以保…

Activity A跳转Activity B,再按返回键,生命周期执行的顺序

开A A:onCreate ----> A:onStart ----> A:OnResume 此时startActivity B A.onPause &#xff0d;> B.onCreate &#xff0d;> B.onStart&#xff0d;> B.onResume---->A.onStop 也就是B可见了 A才会stop 这时候back按键&#xff1a; B.onPause —>A。reS…

在Linux中,MySQL备份与恢复

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

[ACTF2020 新生赛]Upload1

打开靶机&#xff0c;发现什么都没有 查看源码发现有个表单&#xff0c;不过高度为0&#xff0c;所以被隐藏了&#xff0c;我们直接找打css文件&#xff0c;清空&#xff08;也可以设置原始高度&#xff09; 然后提交木马脚本&#xff0c;直接提交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…

pandoc转换md到pdf遇到的问题

1. pandoc必须要用sudo才能运行这是我没有想到的 sudo pandoc ./results/output.md --pdf-enginexelatex -o ./results/output.pdf 2.pdflatex安装失败&#xff0c;只能安装wkhtmltopdf sudo apt-get install wkhtmltopdf sudo pandoc ./results/output.md --pdf-enginewk…