Go语言学习笔记:基础语法和类型

Go语言学习笔记:基础语法和类型

目录

  • Go语言学习笔记:基础语法和类型
    • 学习路线
    • 前言
    • 变量声明
    • 常量
    • 数据类型
      • 布尔型(Boolean)
      • 整型(Integer)
      • 浮点型(Floating point)
      • 复数型(Complex numbers)
      • 字符串(String)
    • 类型转换
    • 控制结构
      • if、else
      • for
      • switch
    • 数组
    • 切片
    • 映射
    • 结构体
    • 指针
    • 函数

学习路线

在这里插入图片描述

前言

Go语言是一种静态类型、编译型语言,它的语法受到了C语言的影响,但在简化代码书写和增强代码安全性方面做了很多改进。下面是Go语言基础语法和类型的详细学习指南。

变量声明

Go语言中你可以使用var关键字来声明变量,并可选择立即初始化变量。

var a int = 1
var b = 2 // 类型推断
c := 3 // 简短声明,只能在函数内部使用

常量

常量使用const关键字声明,且必须在编译时确定值。

const Pi = 3.14159

数据类型

Go语言提供了一系列的基本数据类型:

  • 布尔型(Boolean): bool,它的值是true或false。
  • 整型(Integer): 包括int、int8、int16、int32、int64以及它们的无符号版本uint、uint8、uint16、uint32、uint64和uintptr。
  • 浮点型(Floating point): float32和float64。
  • 复数型(Complex numbers): complex64和complex128,它们分别对应float32和float64两种浮点数精度。
  • 字符串(String): string,表示UTF-8字符序列。

布尔型(Boolean)

var isTrue bool = true
var isFalse bool = false
fmt.Println(isTrue)  // 输出:true
fmt.Println(isFalse) // 输出:false

整型(Integer)

var intVal int = 10
var int8Val int8 = 127
var int16Val int16 = 32767
var int32Val int32 = 2147483647
var int64Val int64 = 9223372036854775807
var uintVal uint = 10 // 无符号整型
fmt.Println(intVal, int8Val, int16Val, int32Val, int64Val, uintVal)

浮点型(Floating point)

var float32Val float32 = 3.1415926535 // 单精度浮点数
var float64Val float64 = 3.141592653589793 // 双精度浮点数
fmt.Printf("%.2f\n", float32Val) // 输出:3.14
fmt.Printf("%.2f\n", float64Val) // 输出:3.14

复数型(Complex numbers)

var complex64Val complex64 = 1 + 2i
var complex128Val complex128 = 1 + 2i
fmt.Println(complex64Val)  // 输出:(1+2i)
fmt.Println(complex128Val) // 输出:(1+2i)

字符串(String)

var str string = "Hello, World!"
fmt.Println(str) // 输出:Hello, World!

在Go语言中,字符串是不可变的,字符序列使用UTF-8编码表示。字符串可以包含任意的数据,包括byte值0,但是通常用来包含人类可读的文本。文本字符串通常被解释为采用UTF-8编码的Unicode码点(rune)序列。

类型转换

Go要求显式类型转换,语法为Type(v),将值v转换为Type类型。

i := 42
f := float64(i)
u := uint(f)

控制结构

Go语言中的控制结构包括if、else、for和switch

if、else

if i%2 == 0 {fmt.Println(i, "is even")
} else {fmt.Println(i, "is odd")
}

for

for i := 0; i < 10; i++ {fmt.Println(i)
}

switch

switch os := runtime.GOOS; os {
case "darwin":fmt.Println("OS X.")
default:fmt.Println("%s.", os)
}

数组

数组是具有固定大小且类型相同的元素序列。

var a [5]int // 声明一个包含5个整数的数组

切片

切片是对数组的抽象,它提供了更加灵活的、动态大小的视图。

s := make([]int, 0, 10) // 创建一个初始长度为0、容量为10的切片
s = append(s, 2)         // 向切片追加元素

映射

映射是键值对的无序集合。

m := make(map[string]int) // 创建一个空映射
m["key"] = 42            // 设置键值对

结构体

结构体是一种聚合数据类型,它用于将不同类型的数据组合在一起。

type Vertex struct {X, Y int
}var v = Vertex{1, 2} // 创建一个Vertex类型的结构体变量

指针

指针保存了值的内存地址。

var p *int
i := 42
p = &i // p指向i
*p = 21 // 通过指针p设置i的值

函数

函数可以有多个返回值,并支持命名返回值。

func swap(x, y string) (string, string) {return y, x
}

这些是Go语言的基础部分,学习时可以通过编写简单的程序来实践这些概念。Go的标准库中还有大量的包提供了额外的功能,比如文件操作、网络通信等等。随着对这些基础知识的熟练掌握,你可以开始探索这些高级话题,进一步提高你的Go编程能力。

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

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

相关文章

42 漏洞发现-操作系统之漏洞探针类型利用修复

目录 系统漏洞发现意义?漏洞类型危害情况?如何做好未卜先知?相关名词解释:漏洞扫描工具演示-Goby&#xff0c;Nmap&#xff0c;Nessus(操作)漏洞类型区分讲解-权限提升,远程执行等(思路)漏洞利用框架演示-Metasploit,Searchsploit等(操作)漏洞修复方案讲解说明-补丁,防护软件…

Android.mk和Android.bp的区别和转换详解

Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法&#xff1a;2、灵活性&#xff1a;3、版本兼容性&#xff1a;4、向后兼容性&#xff1a;5、编译区…

深度学习(5)---自注意力机制

文章目录 1. 输入与输出2. Self-attention2.1 介绍2.2 运作过程2.3 矩阵相乘理解运作过程 3. 位置编码4. Truncated Self-attention4.1 概述4.2 和CNN对比4.3 和RNN对比 1. 输入与输出 1. 一般情况下在简单模型中我们输入一个向量&#xff0c;输出结果可能是一个数值或者一个类…

基于springboot+vue新能源汽车充电管理系统

摘要 新能源汽车充电管理系统是基于Spring Boot和Vue.js技术栈构建的一款先进而高效的系统&#xff0c;旨在满足不断增长的新能源汽车市场对充电服务的需求。该系统通过整合前后端技术&#xff0c;实现了用户注册、充电桩管理、充电订单管理等核心功能&#xff0c;为用户提供便…

【linux基础】linux root用户密码忘记解决方式

方式一&#xff1a;进入单用户模式 1.开启虚拟机的时候&#xff0c;按下“e”健进入用户引导界面 2.再按下“e”&#xff0c;进入内核的编辑 3.找到kernel开头的选项&#xff0c;再次按下“e” 4. 输入 5. 按下“b”&#xff0c;启动 6. 启动后&#xff0c;输入passwd&#xf…

ubuntu使用docker compose一键部署项目

1、将前面手动部署的容器和镜像全部删除 docker rmi hmall (hmall镜像名) docker rmi image_id rmi 是删除多个 rm是删除一个 2、执行命令 docker compose up -d http://192.168.79.129:18080/search.html 访问安装成功&#xff01; 该ip是虚拟机ubuntu的ip 3、docker-compos…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的&#xff0c;不要乱点 首先使用 docker 搭建 Gitea 服务器&#xff0c;用于管理代码版本&#xff0c;数据库选择mysql Gitea 服务器的 docker-compose.yml 配…

赛氪受邀参加安徽省翻译协会2023年年会

安徽省翻译协会于近日在合肥成功举办2023年年会暨学术研讨会。本次会议旨在服务党和国家工作大局&#xff0c;广泛汇聚翻译界力量&#xff0c;推动翻译行业高质量发展&#xff0c;同时总结一年来我省翻译界成果&#xff0c;谋划明年工作。 安徽省翻译协会2023年年会暨学术研讨会…

MySQL JSON数据类型

在日常开发中&#xff0c;我们经常会在 MySQL 中使用 JSON 字段&#xff0c;比如很多表中都有 extra 字段&#xff0c;用来记录一些特殊字段&#xff0c;通过这种方式不需要更改表结构&#xff0c;使用相对灵活。 目前对于 JSON 字段的实践各个项目不尽相同&#xff0c;MySQL 表…

【Kafka】开发实战和Springboot集成kafka

目录 消息的发送与接收生产者消费者 SpringBoot 集成kafka服务端参数配置 消息的发送与接收 生产者 生产者主要的对象有&#xff1a; KafkaProducer &#xff0c; ProducerRecord 。 其中 KafkaProducer 是用于发送消息的类&#xff0c; ProducerRecord 类用于封装Kafka的消息…

k8s中服务器容器tcp连接数量优化

netty的http1服务器在运行一段时间后会无法提供服务&#xff0c;返回客户端socket hang up 使用apipost测试抓包显示三次握手后被reset 修改net/core/somaxconn 登录容器&#xff0c;cat /proc/sys/net/core/somaxconn显示128&#xff0c;对于一个服务器来说&#xff0c;这个…

深入理解Kubernetes探针和.NET服务健康检查机制

前言 随着越来越多的软件采用云原生和微服务架构&#xff0c;我们面临着更多的技术挑战&#xff0c;比如&#xff1a; Kubernetes如何在容器服务异常终止、死锁等情况下&#xff0c;发现并自动重启服务&#xff1b;当服务依赖的关键服务&#xff08;例如数据库&#xff0c;Red…