JAVA 转 Golang——速通 Golang 基础

文章目录

  • 1. 前言:
  • 2. go的下载与配置
  • 3. Golang 目录结构
  • 4. Golang 的基础语法
    • 4.1. 变量声明
    • 4.2. 输入输出
    • 4.3. 条件控制
    • 4.4. 数组和切片
    • 4.5. 映射表

1. 前言:

在这里插入图片描述

根据鼠鼠的实习投递经历,由于越来越多中大型公司都使用 Golang,在现在这个越来越内卷的后端就业环境下,学习一下 Golang 拓宽技术栈面是必须的,下面就跟着鼠鼠进行一些基础知识点的比较和学习吧。

2. go的下载与配置

配置思路与 JAVA 别无二致,这里我只写选择 x64 windows的最新版本(1.22.3 稳定版),我选择的是 zip 版的,需要自己配置环境变量的。
在这里插入图片描述

  1. 解压到一个目录里
    在这里插入图片描述
  2. 我喜欢把变量添加到用户变量里,把 安装的go目录的bin路径添加到系统变量即可。
    在这里插入图片描述
  3. 安装成功
    在这里插入图片描述

3. Golang 目录结构

Golang 主要有两种目录结构,Go mod模式(),Go PATH()模式

  1. Go Modules 是 Go 1.11 版本引入的一种新的包管理方式,旨在解决依赖管理和版本控制的问题。
  2. GOPATH 模式是旧版本 Go 中使用的一种包管理方式,它要求你将所有的 Go 项目都放在一个统一的工作空间(即 GOPATH)下

简单理解就是简单项目吧源代码放一起,通过路径引用依赖,复杂代码项目,通过mod文件管理依赖,类似与 Java 的 Maven。

在这里插入图片描述
main 方法作为 go 源代码执行的入口。通常在 package main 包下

在这里插入图片描述

go 语言编译不同于JAVA 编译成 JVM 字节码,而是将源代码编译成平台可识别的二进制码,因此体积更小,不需要其他环境支持

  1. go run = 编译 + 执行(需要 Go 环境支持)
  2. go build = 编译 (需要go 环境支持)
  3. 二进制码不需要go 环境支持,直接就可以运行,不过会丧失跨平台特性

在这里插入图片描述

4. Golang 的基础语法

go 的语法思路是基于c 语言的,但是加了很多语法糖,有着很多 JAVA 成熟语言的特性,也简化了 JAVA 的繁琐,思路和一众语言差不多。

😄 虽然 Golang 不排斥面向 var name:int = 1
对象,但是由于 Go 不像 JAVA 一样 结构体和方法一样有强关联,不建议面向对象编程

4.1. 变量声明

go的基本数据类型主要有

基本类型

  1. 布尔型 (bool):
  • 只能是 truefalse
var isActive bool = true
  1. 整型:
  • 不同大小和符号的整型(如 int8, int16, int32, int64, uint8, uint16, uint32, uint64)。
  • intuint 类型的大小依赖于执行程序的操作系统(32位或64位)。
  var age int = 30 var uAge uint = 30
  1. 浮点型:
  • float32, float64
  var temperature float64 = 36.6
  1. 复数类型:
  • complex64, complex128
  var complexNumber complex128 = complex(5, 7)
  1. 字符串 (string):
  • UTF-8 字符序列。
  var name string = "John Doe"
  1. 字节 (byte) 和符文 (rune):
  • byteuint8 的别名,用于处理原始数据。
  • runeint32 的别名,表示一个 Unicode 码点。
var b byte = 'a' var r rune = '你'
  1. go 的类型推断语法糖
func main() {// 使用 := 声明并初始化变量,编译器会根据初始化表达式的类型推断变量类型name := "Alice"age := 30height := 175.5// 输出变量值fmt.Println("Name:", name)fmt.Println("Age:", age)fmt.Println("Height:", height)
}
  1. go 的变量交换语法糖
package mainimport "fmt"func main() {a := 'a'b := 'b'a, b = b, afmt.Println(a, b)}

😄 妈妈再也不用担心不会写冒泡排序了!
在这里插入图片描述

4.2. 输入输出

go 的输入输出在逻辑和感觉上比 JAVA 更为统一

Java 的 常用的Scanner 和 System.out.println()给人一种很割裂的感觉。

go 通过 fmt 包的函数进行操作

package mainimport "fmt"func main() {var name stringvar age intfmt.Println("Enter your name and age:")fmt.Scanln(&name, &age)fmt.Printf("Hello, %s! You are %d years old.\n", name, age)
}

4.3. 条件控制

go的条件控制和 Java 类似 , 更自由一些,常用的 if 举例:

if condition1 {// 如果条件1为真,则执行这里的代码块
} else if condition2 {// 如果条件1为假且条件2为真,则执行这里的代码块
} else {// 如果以上条件都不满足,则执行这里的代码块
}if x := 5; x > 0 {fmt.Println("x is positive")
} else {fmt.Println("x is non-positive")
}

if 里可以进行变量声明

switch 也是常用的条件控制语句。

switch expr {case case1:statement1case case2:statement2default:default statement
}

4.4. 循环

go 的循环是我最喜欢的设计,尤其是在迭代的时候可以获取下标,要知道 Java 中使用迭代器迭代是无法获取下标的。

func main() {for i := 1; i <= 9; i++ {for j := 1; j <= 9; j++ {if i <= j {fmt.Printf("%d*%d = %2d  ", i, j, i*j)}}fmt.Println()}
}

这个可以配合可迭代对象使用,类似 Java 增强 for 循环,迭代器加强版,可以获取下标

func main() {sequence := "hello world"for index, value := range sequence {fmt.Println(index, value)}
}

4.4. 数组和切片

切片类似动态数组,由于 Java 中没用动态数组,一般使用 ArrayList 替代,但是数组和 List 使用方式不同,兼容性差,而切片使用方法和数组几乎相同,但是又可以自动扩容。

package mainimport "fmt"func main() {//数组声明var numbers [5]intnumbers = [5]int{1, 2, 3}numbers1 := new([5]int)numbers1[0] = 0//切片声明var slice []intslice1 := make([]int, 5, 5)fmt.Println(numbers[0], slice[0], slice1[0])
}

make函数接收三个参数:类型,长度,容量。举个例子解释一下长度与容量的区别,假设有一桶水,水并不是满的,桶的高度就是桶的容量,代表着总共能装多少高度的水,而桶中水的高度就是代表着长度,水的高度一定小于等于桶的高度,否则水就溢出来了。所以,切片的长度代表着切片中元素的个数,切片的容量代表着切片总共能装多少个元素,切片与数组最大的区别在于切片的容量会自动扩张

在这里插入图片描述

4.5. 映射表

go中的映射表和 Java 中的 hashMap 有点类似

mp := map[int]string{0: "a",1: "a",2: "a",3: "a",4: "a",
}mp := map[string]int{"a": 0,"b": 22,"c": 33,
}
//通过make 创建
mp := make(map[string]int, 8)mp := make(map[string][]int, 10)

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

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

相关文章

vue + SpringBoot + flowable 实现工作流审批功能 (流程图部署)

目录 搭建前端vue项目 vue init webpack project_name 初始化项目 导入 element-ui 框架 npm install element-ui -s 设置 element-ui 全局配置 编辑 main.js 文件 import ElementUI from "element-ui"; // ui框架导入 import element-ui/lib/theme-chal…

XMind文件和输出图片的完整路径,知道干嘛

抱歉&#xff0c;我理解错误了您的问题。以下是包含路径的Shell脚本代码&#xff1a; #!/bin/bash# 获取当前脚本所在目录 script_dir$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)# 创建 XMind 文件 xmind_content$(cat <<EOF <?xml…

文心大模型4.0创建智能体:资深研发专家一对一辅导

目录 前言 一、什么是文心智能体平台&#xff1f; 1、通过平台能做什么 2、平台的优势 3、智能体类型 二、如何访问和使用这个智能体&#xff1f; 1、零代码开发&#xff1a;一句话创建智能体 2、资深研发专家一对一辅导智能体介绍 总结 前言 在当今快节奏和高度竞争的…

vue和react的区别?

Vue和React在设计理念上的主要不同点如下&#xff1a; Vue&#xff1a; 渐进式框架&#xff1a;Vue的设计理念强调渐进式增强&#xff0c;这意味着它允许开发者根据项目需求逐步引入其功能。Vue可以很容易地集成到现有的项目中&#xff0c;或者作为基础框架用于构建复杂的单页应…

算法题 — 合并两个有序数组

合并两个有序数组 两个有数整数数组 nums1 和 nums2&#xff0c;将 nums2 合并到 nums1 中&#xff0c;使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。假设 nums1 的空间大小等于 m n&#xff0c;这样它就能有足够的空间保存来自 nums2 的元…

Sping源码(八)—registerBeanPostProcessors

序言 之前我们用大量的篇幅介绍过invokeBeanFactoryPostProcessors()方法的执行流程。 而invokeBeanFactoryPostProcessors的主要逻辑就是遍历执行实现了BeanDefinitionRegistryPostProcesso类(主要是针对BeanDefinition的操作)和BeanFactoryPostProcessor(主要针对BeanFacrot…

深入分析 Android Activity (五)

深入分析 Android Activity (五) 1. Activity 的进程和线程模型 在 Android 中&#xff0c;Activity 默认在主线程&#xff08;也称为 UI 线程&#xff09;中运行。理解进程和线程模型对于开发响应迅速且无阻塞的应用程序至关重要。 1.1 主线程与 UI 操作 所有 UI 操作必须…

干货 | 什么是单相感应电机控制器?一文带你看感应交流电机解决方案KP86202

单相感应电机控制器是一种用于控制单相感应电机运行的电子设备。单相感应电机是一种常见的电动机类型&#xff0c;广泛应用于家用电器、商业设备以及轻工制造等领域。 单相感应电机控制器通常包括电源模块、控制逻辑模块和功率输出模块。其主要功能是对单相感应电机进行启停、…

如何生成Github Badge徽章图标

如何生成徽章Badge 什么是徽章(Badge)生成小徽章shields网站开源项目的徽章lib版本徽章代码测试覆盖度开源协议Github workflow的徽章 开源代码实践效果py-enumjs-enumerate 什么是徽章(Badge) 在开源项目的README中&#xff0c;经常会见到一些徽章(Badge)小图标&#xff0c;如…

FastCopy

目录 背景: 简介&#xff1a; 原理: 下载地址: 工具的使用: 背景: 简介&#xff1a; FastCopy是一款速度非常快的拷贝软件&#xff0c;软件版本为5.7.1 Fastcopy是日本的最快的文件拷贝工具&#xff0c;磁盘间相互拷贝文件是司空见惯的事情&#xff0c;通常情况…

redis--redis Cluster

简介 解决了redis单机写入的瓶颈问题&#xff0c;即单机的redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素无中心架构的redis cluster机制&#xff0c;在无中心的redis集群当中&#xff0c;其每个节点保存当前节点数据和整个集群状态,每个节点都和其他所有节点连…

【MySQL精通之路】InnoDB-INFORMATION_SCHEMA库Metrics表

1.介绍 INNODB_METRICS表提供了有关INNODB性能和资源相关计数器的信息。 INNODB_METRICS表列如下所示。 有关列描述&#xff0c;请参阅“INFORMATION_SCHEMA库INNODB_METRICS表”。 【MySQL精通之路】INFORMATION_SCHEMA库-INNODB_METRICS表-CSDN博客 mysql> SELECT * FRO…

好书推荐|MATLAB科技绘图与数据分析

提升你的数据洞察力&#xff0c;用于精确绘图和分析的高级MATLAB技术 MATLAB科技绘图与数据分析——jd 本书内容 《MATLAB科技绘图与数据分析》结合作者多年的数据分析与科研绘图经验&#xff0c;详细讲解MATLAB在科技图表制作与数据分析中的使用方法与技巧。全书分为3部分&a…

C语言 数组——数组的定义和初始化

目录 为什么使用数组(Array)? 一维数组的定义 一维数组的初始化 一维数组元素的访问 一维数组元素的赋值 数组的逻辑存储结构 数组的物理存储结构 二维数组的定义和初始化 为什么使用数组(Array)? 一维数组的定义 一维 数组的定义 int a[10]; 定义一个有 10 个 int 型元素的…

云WAF在应对新型网络攻击中的作用是什么?

云WAF&#xff08;Web Application Firewall&#xff09;在应对新型网络攻击中扮演着至关重要的角色。以下是云WAF的主要作用&#xff1a; 实时防御与智能分析 云WAF能够实时监测并分析网络流量&#xff0c;一旦发现潜在攻击行为立即进行阻断&#xff0c;有效防止各类Web应用层…

构建传统企业信息化数字化智能化技术架构:挑战与机遇

随着数字化和智能化技术的快速发展&#xff0c;传统企业在信息化转型过程中面临着前所未有的机遇和挑战。如何构建适应企业需求的信息化数字化智能化技术架构&#xff0c;成为企业发展的关键之一。本文将探讨传统企业信息化数字化智能化技术架构的设计与实践。 一、数字化转型的…

【缺失的第一个正数】leetcode,python

真是越做越觉得自己所学尚浅&#xff0c;&#xff0c; 啊&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 直接上石山代码&#xff1a;&#xff08;过不了一点&#xff09;。。。。。 class Solution:def firstMissingPositive(self…

SpringBoot发送邮箱

一、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency> 二、添加配置 application.yml文件 将username修改为自己的邮箱&#xff0c;password修改为…

SQL——DDL之数据表的操作

基础 # 每一列都要指定对应的类型 # 字符串&#xff1a;varchar(N) # 整数&#xff1a;int # 小数&#xff1a;double # 年月日&#xff1a;date # 年月日时分秒&#xff1a;datetime# 创建表 create table if not exists db_bigdata.student(stuid varchar(10),stuname varch…

[集群聊天服务器]----(四)MySQL数据库模块

上一节我们对网络模块和业务模块进行了解耦[集群聊天服务器]----(三)ChatService模块&#xff0c;解耦网络模块和业务模块&#xff0c;封装了回调函数。在项目中需要使用mysql数据库进行存储用户重要数据&#xff0c;并进行增删改查操作。&#xff0c;所以这一节我们对mysql的封…