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

目录

golang

介绍

面向并发

面向组合

特点

项目结构

图示

[入口文件 main.go](#入口文件 main.go)

基本变量类型与声明

介绍

声明变量

常量

字符串(string)

字符串格式化

空接口类型

数组

切片

创建对象

追加元素

复制切片

map(映射)

创建对象

使用

多重赋值

控制流语句

[if else](#if else)

循环

[switch case语句](#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嵌套体使用
相关推荐
风雨无阻fywz3 分钟前
java 类的实例化过程,其中的相关顺序 包括有继承的子类等复杂情况,静态成员变量的初始化顺序,这其中jvm在干什么
java·开发语言·jvm
画个大饼27 分钟前
Swift中Class和Struct的深度对比分析
开发语言·ios·swift
小羊Linux客栈3 小时前
Python小程序:上班该做点摸鱼的事情
开发语言·python·小程序·游戏程序
咛辉3 小时前
如何搭建spark yarn 模式的集群集群。
开发语言
CoderCodingNo4 小时前
【GESP】C++三级练习 luogu-B2118 验证子串
开发语言·c++
小彭努力中4 小时前
9.Three.js中 ArrayCamera 多视角相机详解+示例代码
开发语言·前端·javascript·vue.js·数码相机·ecmascript·webgl
学习中的码虫4 小时前
c#栈及其应用
开发语言·c#
bai_lan_ya5 小时前
C语言中结构体的字节对齐的应用
c语言·开发语言
小陈095 小时前
Java后端图形验证码的使用
java·开发语言·状态模式