当前位置: 首页 > news >正文

【Go】Go语言基础内容

变量声明:

  1. 变量声明:在Go中,变量必须先声明然后再使用。声明变量使用 var 关键字,后面跟着变量名和类型,如下所示:

    var age int
    

    这行代码声明了一个名为 age 的整数变量。

  2. 变量初始化:您可以在声明时为变量分配初始值,也可以省略类型,让Go自动推断类型:

    var name string = "John"
    var age = 30 // 类型自动推断为int
    
  3. 短变量声明:对于局部变量,可以使用 := 运算符来进行短变量声明。这种方式不需要显式指定类型:

    name := "John"
    

    Go会自动推断 name 的类型为字符串。

  4. 常量声明:常量使用 const 关键字来声明,一旦声明,它们的值不能更改:

    const pi = 3.14
    

    常量的值在编译时确定,并且必须是常量表达式。

条件和循环:

  1. if语句:Go中的 if 语句用于执行条件语句。它可以与一个可选的 else 语句一起使用:

    if age >= 18 {fmt.Println("You are an adult")
    } else {fmt.Println("You are not an adult")
    }
    
  2. switch语句:Go的 switch 语句非常灵活,可以用于多个条件,而且不需要使用 break 关键字:

    switch day {
    case "Monday":fmt.Println("It's Monday!")
    case "Tuesday":fmt.Println("It's Tuesday!")
    default:fmt.Println("It's another day of the week")
    }
    
  3. for循环:Go的 for 循环有三种基本用法:

    • 基本的 for 循环:

      for i := 0; i < 5; i++ {fmt.Println(i)
      }
      
    • for 循环作为 while 使用:

      sum := 0
      for sum < 10 {sum += 1
      }
      
    • for 循环迭代集合(如切片或映射):

      numbers := []int{1, 2, 3, 4, 5}
      for index, value := range numbers {fmt.Printf("Index: %d, Value: %d\n", index, value)
      }
      
  4. break和continue:在循环中,您可以使用 break 关键字来立即退出循环,而 continue 关键字用于跳到下一次循环迭代。

当涉及到Go语言的函数、结构体和接口时,以下是详细的解释:

函数:

在Go语言中,函数是一段可重用的代码块,用于执行特定任务或操作。函数有以下特性:

  • 定义函数: 使用 func 关键字来定义函数。函数包含函数名、参数列表和返回值列表。

    func add(a, b int) int {return a + b
    }
    
  • 参数和返回值: 函数可以接受参数,并且可以有一个或多个返回值。在上面的示例中,add 函数接受两个整数参数,并返回一个整数。

  • 函数调用: 要调用函数,只需使用函数名和所需的参数列表。

    result := add(5, 3)
    
  • 多返回值: Go支持多返回值的函数,这意味着一个函数可以返回多个值。

    func divide(a, b int) (int, error) {if b == 0 {return 0, errors.New("division by zero")}return a / b, nil
    }
    
  • 匿名函数: 在Go中,您还可以创建匿名函数,这是没有函数名的函数,通常用于在函数内部定义和使用。

    func main() {add := func(a, b int) int {return a + b}result := add(2, 3)fmt.Println(result)
    }
    

结构体:

Go语言中的结构体是一种用户自定义的复合数据类型,用于组合多个字段来表示一个数据结构。结构体有以下特性:

  • 定义结构体: 使用 type 关键字来定义结构体。结构体的字段通常使用大写字母开头,表示它们是导出的(可以在其他包中访问)。

    type Person struct {FirstName stringLastName  stringAge       int
    }
    
  • 创建结构体实例: 使用结构体类型创建实例,然后初始化字段。

    person := Person{FirstName: "John",LastName:  "Doe",Age:       30,
    }
    
  • 访问结构体字段: 使用.运算符来访问结构体字段的值。

    fmt.Println(person.FirstName) // 输出 "John"
    
  • 匿名结构体: 您还可以创建匿名结构体,用于临时存储数据。

    person := struct {FirstName stringLastName  string
    }{FirstName: "John",LastName:  "Doe",
    }
    
  • 嵌套结构体: 结构体可以嵌套在其他结构体内,以构建更复杂的数据结构。

接口:

接口是Go语言中的一种抽象类型,它定义了一组方法的签名,但没有具体的实现。接口有以下特性:

  • 定义接口: 使用 type 关键字定义接口。

    type Writer interface {Write([]byte) (int, error)
    }
    
  • 实现接口: 任何类型只要实现了接口中定义的所有方法,都被认为是实现了该接口。Go使用隐式接口实现。

  • 接口类型变量: 可以创建接口类型的变量,并将任何实现了该接口的值分配给这些变量。

    var w Writer
    w = os.Stdout
    
  • 多接口实现: 一个类型可以同时实现多个接口。

  • 空接口: 空接口 interface{} 不包含任何方法,因此可以表示任何类型的值。

    var emptyInterface interface{}
    emptyInterface = 42
    emptyInterface = "Hello"
    
  • 类型断言: 使用类型断言来检查接口类型变量的底层类型和获取其值。

    value, ok := emptyInterface.(int)
    if ok {fmt.Println("It's an integer:", value)
    }
    

本期好书推荐《精通Go语言》


下单链接:https://item.jd.com/13543938.html

在这里插入图片描述

相关文章:

【Go】Go语言基础内容

变量声明&#xff1a; 变量声明&#xff1a;在Go中&#xff0c;变量必须先声明然后再使用。声明变量使用 var 关键字&#xff0c;后面跟着变量名和类型&#xff0c;如下所示&#xff1a; var age int这行代码声明了一个名为 age 的整数变量。 变量初始化&#xff1a;您可以在声…...

HP-UNIX 系统安全基线 安全加固操作

目录 账号管理、认证授权 账号 ELK-HP-UX-01-01-01 ELK -HP-UX-01-01-02 ELK -HP-UX-01-01-03 ​​​​​​​ ELK-HP-UX-01-01-04 ​​​​​​​ELK-HP-UX-01-01-05 ​​​​​​​口令 ELK-HP-UX-01-02-01 ​​​​​​​ ELK-HP-UX-01-02-02 ​​​​​​​ ELK-HP…...

第九天:信息打点-CDN绕过篇amp;漏洞回链amp;接口探针amp;全网扫描amp;反向邮件

信息打点-CDN绕过篇 cdn绕过文章&#xff1a;https://www.cnblogs.com/qiudabai/p/9763739.html 一、CDN-知识点 1、常见访问过程 1、没有CDN情况下传统访问&#xff1a;用户访问域名-解析服务器IP–>访问目标主机 2.普通CDN&#xff1a;用户访问域名–>CDN节点–>…...

【利用二手车数据进行可视化分析】

利用二手车数据进行可视化分析 查看原始数据去除重复数据需求分析1.统计全国总共有多少量二手车&#xff0c;用KPI图进行展示2.统计安徽总共有多少量二手车&#xff0c;用KPI图进行展示3.统计合肥总共有多少量二手车&#xff0c;用KPI图进行展示4.取最贵的10辆二手车信息&#…...

快速测试 3节点的redis sentinel集群宕机2个节点以后是否仍能正常使用

有同事问我&#xff0c;三个redis sentinel节点&#xff0c;宕机两个节点以后&#xff0c;是否还能够正常的通过redis sentinel正常访问redis的数据。我想了想&#xff0c;理论上是可以的&#xff0c;但是我没试过&#xff0c;今天有时间就测试了一下。搭建环境和测试代码的过程…...

echarts词云图echarts-wordcloud使用方法

1、echarts5.0以下的版本使用 echarts-wordcloud 1.0 的词云 1. 安装 wordCloud 1.0 依赖包npm install echarts-wordcloud12. man.js 注入import echarts-wordcloud 2、echarts5.0及以上的下载 echarts-wordcloud 2.0 版本 注意&#xff1a;npm install echarts-wordcloud …...

二叉树的OJ练习(二)

通过前序遍历数组构建二叉树 题目&#xff1a;通过前序遍历的数组&#xff08;ABD##E#H##CF##G##&#xff09;构建二叉树 TreeNode* TreeCreat(char* a,int* pi) {if(a[*pi] #){(*pi);return NULL; }TreeNode* root (TreeNode*)malloc(sizeof(TreeNode));if(root NULL){p…...

uni-app 微信小程序之自定义navigationBar顶部导航栏

文章目录 1. 实现效果2. App.vue3. pages.json 配置自定义4. 顶部导航栏 使用 微信小程序自定义 navigationBar 顶部导航栏&#xff0c;兼容适配所有机型 1. 实现效果 2. App.vue 在App.vue 中&#xff0c;设置获取的 StatusBar&#xff0c;CustomBar 高度&#xff08;实现适配…...

前端入门:HTML初级指南,网页的简单实现!

代码部分&#xff1a; <!DOCTYPE html> <!-- 上方为DOCTYPE声明&#xff0c;指定文档类型为HTML --> <html lang"en"> <!-- html标签为整个页面的根元素 --> <head> <!-- title标签用于定义文档标题 --> <title>初始HT…...

低多边形3D建模石头材质纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…...

【华为OD题库-081】最长的元音子串长度-Java

题目 题目描述: 定义当一个字符串只有元音字母一(a,e,i,o,u,A,E,l,O,U)组成&#xff0c; 称为元音字符串&#xff0c;现给定一个字符串&#xff0c;请找出其中最长的元音字符串&#xff0c;并返回其长度&#xff0c;如果找不到请返回0&#xff0c; 字符串中任意一个连续字符组成…...

第9节:Vue3 指令

如何在UniApp中使用Vue3的指令&#xff1a; <template> <view> <!-- 使用指令 --> <text v-show"isVisible" click"toggleVisibility">点击隐藏/显示</text> <button v-on:click"incrementCount">点击…...

B028-JDBC基础

目录 什么是JDBCJDBC引入持久化JDBC规范 使用JDBC完成CRUDJDBC创建表JDBC CRUD和优化 DAO层的实现 什么是JDBC JDBC引入 Java代码操作数据库的唯一技术&#xff1a;-- JDBC ( java database connection ) 持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设…...

ngixn 准备

确认yum可用&#xff0c;确认防火墙&#xff0c;确认SELinux 一项安装 yum -y install gcc make automake pcre-devel zlib zlib-devel openssl openssl-devel参数&#xff1a; gcc&#xff1a;编译依赖gcc环境 pcre&#xff1a;PCRE(Perl Compatible Regular Expressions)是一…...

生活小记录

上个月项目总算上线了&#xff0c;节奏也慢慢调整正常。发现自己好久没有记录生活点滴了&#xff0c;正好写写。其实&#xff0c;最近这段日子发生的事情还是挺多的。 流感 媳妇11.24得流感&#xff0c;这件事情特别好笑&#xff0c;大晚上她和我妹妹想喝酒试试&#xff0c;结…...

Diary22-全网最全的CSS3.0讲解

CSS学习 1.认识CSS 1.1什么是CSS CSS&#xff1a;Cascading Style Sheet——层叠级联样式表 CSS&#xff1a;表现&#xff08;美化网页&#xff09; 字体&#xff1b;颜色&#xff1b;边距&#xff1b;高度&#xff1b;宽度&#xff1b;背景图片&#xff1b;网页定位&…...

LAMP和分离式LNMP部署

目录 一.什么是LAMP&#xff1f; 二.安装LAMP 先安装apache&#xff0c;httpd网页服务&#xff1a; 接着安装mysql&#xff1a; 安装php&#xff1a; 创建论坛&#xff1a; 三.安装分布式LNMP&#xff1a; 先安装nginx&#xff1a; 到另一台主机安装php&#xff1a; …...

基于Java房屋租赁管理系统

基于Java房屋租赁管理系统 功能需求 1、房源信息管理&#xff1a;系统需要能够记录和管理所有房源的详细信息&#xff0c;包括房屋地址、房屋面积、租金、付款方式、房屋类型等。管理员应该可以添加、编辑和删除房源信息。 2、租户信息管理&#xff1a;系统需要能够记录和管…...

windows安装protoc、protoc-gen-go、protoc-gen-go-grpc

文章目录 一、 protoc二、protoc-gen-go三、protoc-gen-go-grpc 一、 protoc 1&#xff0c;下载&#xff1a;https://github.com/google/protobuf/releases 下载对应的protoc&#xff0c;注意选择windows 2&#xff0c;下好之后解压就行&#xff0c;然后把bin目录加入到环境…...

macOS 获取文件夹大小

macOS 获取文件夹大小 获取文件夹大小的扩展如下&#xff1a; extension URL {var fileSize: Int? { // in bytesdo {let val try self.resourceValues(forKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey])return val.totalFileAllocatedSize ?? val.fileAll…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...