golang介绍,特点,项目结构,基本变量类型与声明介绍(数组,切片,映射),控制流语句介绍(条件,循环,switch case)

目录

golang

介绍

面向并发

面向组合 

特点

项目结构

图示

入口文件 main.go

基本变量类型与声明

介绍

声明变量

常量 

字符串(string)

字符串格式化

空接口类型 

数组

切片

创建对象

追加元素

复制切片

map(映射)

创建对象

使用

多重赋值

控制流语句

if else

循环

switch case语句


golang

介绍

Go(也叫 Golang)是由 Google 开发的开源编程语言,设计目标是简洁、效率和高并发

  • 自从 2009 年发布以来,Go 迅速发展,特别是在云计算、微服务、容器化(如 Docker 和 Kubernetes)等领域得到了广泛应用
  • Go 语言是一门面向并发面向组合的语言

面向并发

Go 的并发模型通过 goroutine 和 channel 来实现轻量级的并发

  • goroutine:Go 通过轻量级的线程——goroutine,支持并发编程,允许程序同时执行多个任务。Goroutines 的创建和切换成本非常低,比传统线程更高效
  • channel:Go 通过 channel 实现 goroutine 之间的通信,确保数据在并发环境中的安全传递。Go 使用 通信顺序进程(CSP)模型,通过管道(channel)将数据从一个 goroutine 传递到另一个

面向组合 

Go 语言的设计偏向 组合 而非 继承

  • 这使得 Go 在实现面向对象编程时,避免了传统oop中的类继承层次 (虽然它有一些支持面向对象编程的特性,但它并不遵循经典的面向对象范式)
  • 提供了结构体(struct)和接口(interface)来实现对象行为

特点

高性能高并发

  • 内置对高并发的支持,不需要寻找经过高性能优化的第三方库
  • 只需要应用标准库或基于标准库开发的第三方库即可

语法类似c语言,但是简化版,非常简洁

  • 去除了许多其他编程语言中常见的复杂特性

标准库功能丰富

  • 涵盖了从网络、加密到并发等多个方面的功能

工具链完善

  • 内置了单元测试框架

静态编译

  • 不需要附加其他东西,部署方便快捷

快速编译

  • 能快速构建并测试代码

跨平台

  • 开发和部署的过程非常简单

垃圾回收机制

  • 不需要考虑内存分配释放,类似java

项目结构

图示

入口文件 main.go

package main

  • 包声明
  • 每个 Go 程序都需要一个main包

import (" "...)

  • 导入语句
  • 这里的import语句导入了两个标准库:fmt,os

func main() { }

  • 主函数,程序的入口点

基本变量类型与声明

介绍

声明变量

var 变量名 = value

  • 自动根据值类型推导变量类型

或是显式写出类型:

  • var 变量名 类型 = value
  • 变量名 := 类型(value)

常量 

将声明变量时的var -> const

字符串(string)

go的内置类型

  • 字符串包 -- strings

可以对字符串直接使用运算符(优先级和c/c++类似)

  • 比如: +拼接

字符串格式化

Go 语言使用 fmt 包进行字符串格式化,可以根据需求灵活地控制输出格式

  • 可以使用%v代表任意类型的变量,而不需要区分数字/字符串...的区别
  • %+v 得到详细结构:
  • %#v 得到进一步详细的结构:
  • %T 打印变量的类型:

浮点数表示和c/c++相同

  • %f 标准浮点数格式
  • 且可以限制小数位数,比如%2f

空接口类型 

数组

var 数组名 [元素个数]元素类型

  • 支持多维数组
  • 使用上也没有变化,依然是[ ]

切片

可变长度的数组

创建对象

切片字面量创建切片:

  • slice := []元素类型{值1, 值2 ...}
  • 也可以是个空切片 -- emptySlice := make([]int, 0)

使用make创建切片:

  • make([]元素类型, 初始长度(必须指定), capacity)

从数组/其他切片中切割创建切片:

  • slice := arr[起始索引:结束索引]  (前闭后开区间)
追加元素

可以使用append()追加元素,根据需要动态扩展切片的容量

  • 一次可添加多个元素
  • 注意,append必须要赋值回原对象
复制切片

copy()用于从一个切片复制元素到另一个切片

  • 它不会改变原切片,但会返回实际复制的元素数量

直接复制:

索引复制:

  • 切片名(位置1:位置2) 前闭后开

省略位置参数:

  • 可以省略索引中的一些位置,代表从头取 / 取到尾 / 全部取

map(映射)

类似于其他语言中的哈希表或字典

  • 随机顺序存储,存储键值对
创建对象

字面量直接初始化:

  • mapVariable := map[key值类型]value类型{key1: value1, key2: value2, ...}

make创建:

  • make(map[key值类型]value类型, 初始容量(可省略))
使用

使用方法和c++中的map相同

  • 可以使用[ ]
  • delete()删除k-v对
多重赋值
  • 可以使用两个变量来接收value值 是否存在某key值(bool类型),可以检查一个键是否存在于映射中

控制流语句

if else

if else 语法基本不变

  • 只是不需要写if / else if后面的括号
  • 并且,if后面必须要加{ },而不能在只有一行语句的情况下写成同一行

循环

循环仅有for循环

  • 相当于其他循环被并入进去了
  • 语法并没有变化,只是和if else一样不需要加括号

无条件:

  • for {} 代表死循环

带条件:

  • for 循环条件 {}

带初始化和后处理:

  • 和c/c++语法一样,只是没有括号

同时,continue,break依然被使用

switch case语句

基本语法不变,只是:

  • switch后的变量不需要加( )
  • 每个case语句之间自动带有[添加break后]的效果 -- 它不会像c/c++一样如果不加break就一直执行下去,它只会执行其中一个分支

并且它还增加了功能

  • switch后可以不加变量,直接跳转到分支进行判断,可以代替多个if else嵌套体使用

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

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

相关文章

《白帽子讲 Web 安全》之移动 Web 安全

目录 摘要 一、WebView 简介 二、WebView 对外暴露 WebView 对外暴露的接口风险 三、通用型 XSS - Universal XSS 介绍 四、WebView 跨域访问 五、与本地代码交互 js 5.1接口暴露风险: 5.2漏洞利用: 5.3JavaScript 与 Native 代码通信 六、Chr…

算法日常刷题笔记(3)

为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第三篇笔记 笔记时间为2月24日到3月2日 第一天 设计有序流 设计有序流https://leetcode.cn/problems/design-an-ordered-stream/ 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数&#xff…

mysql5.7离线安装及问题解决

这次主要是讲解mysql5.7离线安装教程和一主一从数据库配置 1、去官网下载自己对应的mysql https://downloads.mysql.com/archives/community/2、查看需要安装mysql服务器的linux的类型 uname -a第二步看一下系统有没有安装mysql rpm -qa|grep -i mysql3、上传安装包 用远程…

JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码

本文项目编号 T 098 ,文末自助获取源码 \color{red}{T098,文末自助获取源码} T098,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

三数之和_算法

1.题目描述 首先我们分析下这道题目:假设给我们一个数组,让数组某三个不同下标的数相加最终得0,那么我就返回这三个数.但是如果返回的多个数组中的元素相同,那么我们还要删掉其中一个保留一个. 注意:这道题的重点是三个数的下标不能相等并且返回的数组中的元素也不能相等,通过…

关于Deepseek本地部署硬件环境检查教程

要在电脑上本地部署DeepSeek,需要关注以下硬件和软件配置: 硬件配置 CPU:至少4核CPU,推荐Intel i5/i7或AMD Ryzen 5/7系列处理器。内存:至少8GB DDR4内存,推荐16GB DDR4内存,对于大型模型建议…

一周一个Unity小游戏2D反弹球游戏 - 移动的弹板(鼠标版)

前言 本文将实现控制弹板移动,通过Unity的New Input System,可以支持鼠标移动弹板跟随移动,触控点击跟随移动,并且当弹板移动到边界时,弹板不会移动超过边界之外。 创建移动相关的InputAction 项目模版创建的时候默认会有一个InputAction类型的文件,名字为InputSystem_Ac…

250302-绿联NAS通过Docker配置SearXNG及适配Open-WebUI的yaml配置

A. 配置Docker中的代理 绿联NAS简单解决docker无法获取镜像-不用软路由 - 哔哩哔哩 B. 下载官网对应的镜像 群晖NAS用docker搭建SearXNG元搜索引擎_哔哩哔哩_bilibili C. 修改默认省略的参数,只配置Base_URL,删除其它默认的空缺项 searxng-docker/REA…

C++-第十九章:异常

目录 第一节:异常有哪些 第二节:异常相关关键字 2-1.抛出异常 2-2.捕获异常 2-3.异常的捕获规则 2-3-1.异常被最近的catch捕获 2-3-2.catch捕获的是异常的拷贝 2-3-3.异常为子类时,可以用父类引用接收 2-4.捕获任意异常 第三节&#xff1…

Redis详解(实战 + 面试)

目录 Redis 是单线程的!为什么 Redis-Key(操作redis的key命令) String 扩展字符串操作命令 数字增长命令 字符串范围range命令 设置过期时间命令 批量设置值 string设置对象,但最好使用hash来存储对象 组合命令getset,先get然后在set Hash hash命令: h…

‘ts-node‘ 不是内部或外部命令,也不是可运行的程序

新建一个test.ts文件 let message: string = Hello World; console.log(message);如果没有任何配置的前提下,会报错’ts-node’ 不是内部或外部命令,也不是可运行的程序。 此时需要安装一下ts-node。 npm install

(十 五)趣学设计模式 之 命令模式!

目录 一、 啥是命令模式?二、 为什么要用命令模式?三、 策略模式的实现方式四、 命令模式的优缺点五、 命令模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…

基于单片机的智能扫地机器人

1 电路设计 1.1 电源电路 本电源采用两块LM7805作为稳压电源,一块为控制电路和传感器电路供电,另一块单独为电机供电。分开供电这样做的好处,有利于减小干扰,提高系统稳定性。 LM7805是常用的三端稳压器件,顾名思义0…

【Redis学习】Redis Docker安装,自定义config文件(包括RDB\AOF setup)以及与Spring Boot项目集成

【本文内容】 第1章:通过Docker安装Redis,并自定义config文件以及mount data目录。第2章:介绍Redis持久化到磁盘,有4种方式:RDB / AOF / NONE / RDB AOF。第3章:使用Server自带的redis-cli工具连接。第4章…

【3天快速入门WPF】13-MVVM进阶

目录 1. 窗体设置2. 字体图标3. 控件模板4. 页面逻辑4.1. 不使用MVVM4.2. MVVM模式实现本篇我们开发一个基于MVVM的登录页面,用来回顾下之前学习的内容 登录页面如下: 窗体取消了默认的标题栏,调整为带阴影的圆角窗体,左侧放一张登录背景图,右边自绘了一个关闭按钮,文本框…

PHP实现登录和注册(附源码)

前言 本博客主要讲述利用php环境实现一个简单的前后端结合的用户登录和注册功能。phpstudy是PHP调试环境的集成包,该程序包集成了 ApachePHPMySQLphpMyAdmin 等多个工具,是很好用的调试环境的程序集成包。 目录 前言 1. 准备工作 1.1 工具 1.2 php…

Redis数据结构-List列表

1.List列表 列表类型适用于存储多个有序的字符串(这里的有序指的是强调数据排列顺序的重要,不是升序降序的意思),列表中的每个字符串称为元素(element),一个列表最多可以存储2^32-1个元素。在R…

Redis 实战篇 ——《黑马点评》(下)

《引言》 (下)篇将记录 Redis 实战篇 最后的一些学习内容,希望大家能够点赞、收藏支持一下 Thanks♪ (・ω・)ノ,谢谢大家。 传送门(上):Redis 实战篇 ——《黑马…

WordPress二次开发实现用户注册审核功能

WordPress默认直接注册登录了,不需要任何验证,如果被批量注册就麻烦了,所以添加一个审核功能比较好。 注册用户默认需要手动审核,审核以后才能登陆,开启审核,可以有效防止用户批量注册。 这儿讲解一下如何…

基于SpringBoot的“青少年心理健康教育网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“青少年心理健康教育网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 实体属性图 系统首页界…