Go语言基础总结

一、Go语言结构

包声明

引入包

函数

变量

语句&表达式

注释

下面简单给出hello.go文件。

package src /*定义包名*/import "fmt" /*引入包*/func hello() { /*函数*/fmt.Println("Hello,World!") /*语句&表达式*/fmt.Println("菜鸟教程:runoob.com")
}

二、Go语言基础语法

Go程序可以由多个标记构成。可以是关键字、标识符、常量、字符串、符号等。


三、Go语言数据类型

数据类型用于声明函数和变量。

布尔型:布尔型的值只能是true或false。

数字类型:整型int、浮点型float32、float64、复数complex、位运算

字符串类型:字符串string

派生类型:指针类型pointer、数组类型、结构体类型struct、Channel类型、函数类型、切片类型、接口类型interface、Map类型


四、Go语言变量

Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

声明变量的一般形式是使用 var 关键字。

// var value type
// var value1,value2 typefunc main() {var a string = "runoob"fmt.Println(a)var b, c int = 1, 2fmt.Println(b,c)
}

变量声明指定变量类型,如果没有初始化,变量默认为零值。

注释:

数值类型(包括complex64/128)零值为0

布尔类型零值为false

字符串类型零值为""(空字符串)

以下几种类型零值为nil

var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error

根据值自行判断变量类型。

如果变量已经使用 var 声明过了,再使用 := 声明变量,产生编译错误。


五、Go语言常量

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)、字符串型。

显示类型定义:const b string = "abc"

隐式类型定义:const b = "abc"

iota是特殊常量,可以认为是一个可以被编译器修改的常量。

iota在const关键字出现时将被重置为0,const中每新增一行常量声明将使iota计数一次。


六、Go语言运算符

算术运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

其他运算符


算术运算符

假定 A 值为 10,B 值为 20。

运算符描述实例
+相加A + B 输出结果 30
-相减A - B 输出结果 -10
*相乘A * B 输出结果 200
/相除B / A 输出结果 2
%求余B % A 输出结果 0
++自增A++ 输出结果 11
--自减A-- 输出结果 9

关系运算符

假定 A 值为 10,B 值为 20。

运算符描述实例
==检查两个值是否相等,如果相等返回 True 否则返回 False。(A == B) 为 False
!=检查两个值是否不相等,如果不相等返回 True 否则返回 False。(A != B) 为 True
>检查左边值是否大于右边值,如果是返回 True 否则返回 False。(A > B) 为 False
<检查左边值是否小于右边值,如果是返回 True 否则返回 False。(A < B) 为 True
>=检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。(A >= B) 为 False
<=检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。(A <= B) 为 True

逻辑运算符

假定 A 值为 True,B 值为 False。

运算符描述实例
&&逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。(A && B) 为 False
||逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。(A || B) 为 True
!逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。!(A && B) 为 True

位运算符

pqp & qp | qp ^ q
00000
01011
11110
10011

假定 A 为60,B 为13:

运算符描述实例
&按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。(A & B) 结果为 12, 二进制为 0000 1100
|按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或(A | B) 结果为 61, 二进制为 0011 1101
^按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(A ^ B) 结果为 49, 二进制为 0011 0001
<<左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。A << 2 结果为 240 ,二进制为 1111 0000
>>右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。A >> 2 结果为 15 ,二进制为 0000 1111

赋值运算符

运算符描述实例
=简单的赋值运算符,将一个表达式的值赋给一个左值C = A + B 将 A + B 表达式结果赋值给 C
+=相加后再赋值C += A 等于 C = C + A
-=相减后再赋值C -= A 等于 C = C - A
*=相乘后再赋值C *= A 等于 C = C * A
/=相除后再赋值C /= A 等于 C = C / A
%=求余后再赋值C %= A 等于 C = C % A
<<=左移后赋值C <<= 2 等于 C = C << 2
>>=右移后赋值C >>= 2 等于 C = C >> 2
&=按位与后赋值C &= 2 等于 C = C & 2
^=按位异或后赋值C ^= 2 等于 C = C ^ 2
|=按位或后赋值C |= 2 等于 C = C | 2

其他运算符

运算符描述实例
&返回变量存储地址&a; 将给出变量的实际地址。
*指针变量。*a; 是一个指针变量

七、Go语言条件语句

条件语句通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况下执行另外的语句。

语句描述
if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if...else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。
switch 语句switch 语句用于基于不同条件执行不同动作。
select 语句select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

八、Go语言循环语句

循环类型描述
for 循环重复执行语句块
循环嵌套在 for 循环中嵌套一个或多个 for 循环
控制语句描述
break 语句经常用于中断当前 for 循环或跳出 switch 语句
continue 语句跳过当前循环的剩余语句,然后继续进行下一轮循环。
goto 语句将控制转移到被标记的语句。

无限循环:如果循环中条件语句永远不为false则会进行无限循环。


九、Go语言函数

Go语言函数定义格式如下:

func function_name([parameter list]) [return_types] {函数体
}

function_name:函数名称

parameter list:参数列表,指定参数类型、顺序、参数个数。参数可选。

return_types:返回类型,函数返回一列值。

函数体:函数定义的代码集合。

func min(num1,num2 int) int {var result intif (num1 > num2) {result = num2}else{result = num1}return result
}

函数调用

package mainimport "fmt"func main() {var a int = 100var b int = 90var res intres = min(a,b)fmt.printf("最小值为: %d\n",res)
}

调用函数可通过两种方式来传递形参。

值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。


十、Go语言变量作用域

函数内定义的变量称为局部变量,作用域只在函数体内,参数和返回值变量也是局部变量。

函数外定义的变量称为全局变量,可在任何函数中使用。

函数定义中的变量称为形式参数,会作为函数的局部变量来使用。


十一、Go语言数组

声明数组语法格式:

var arrayname [size]dataType

arrayname是数组的名称,size是数组的大小,dataType是数组中元素的数据类型。


十二、Go语言指针

声明指针格式:

var var_name *var_type

var_name为指针变量名,var_type为指针类型,*号用于指定变量是作为一个指针。

var num *int      /*指向整型*/
var fp *float32   /*指向浮点型*/

十三、Go语言结构体

type struct_variable_type struct {member definitionmember definition...member definition
}
type Books struct {title stringauthor stringsubject stringbook_id int
}

访问结构体成员,需使用 . 点号操作符,格式为:结构体.成员名

结构体指针格式:

var struct_pointer *Books

十四、Go语言切片

使用make()函数来创建切片

var slice1 []type = make([]type, len)
或
slice1 := make([]type, len)

len():获取长度

cap():计算容量

append():向切片追加新元素

copy():拷贝切片


十五、Go语言范围

range关键字用于for循环中迭代数组array、切片slice、通道channel、集合map的元素。在数组和切片中返回元素的索引和索引对应的值,在集合中返回key-value对。

for key,value := range oldMap {newMap[key] = value
}/*如果只想读取key*/
for key := range oldMap或for key,_ := range oldMap/*如果只想读取value*/
for _,value := range oldMap

十六、Go语言Map集合

Map是一种无序的键值对的集合。在获取Map值时,如果键不存在,返回该类型的零值。

/*使用make函数或map关键字来定义Map*/map_variable := make(map[KeyType]ValueType, initialCapacity)
// 创建一个初始容量为10的Mapm := make(map[string]int,10)  m := map[string]int{"apple":1,"banana":2,"orange":3,
}

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

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

相关文章

跟着野火学FreeRTOS:第二段(事件组)

在小节里面介绍了二进制信号量&#xff0c;计数信号量&#xff0c;互斥量和递归互斥量等功能&#xff0c;其中二进制信号量和计数信号量&#xff08;也包括队列&#xff09;常用于任务和任务之间以及任务和中断之间的同步&#xff0c;她们具有以下属性&#xff1a; 当等待的事…

【QT】QTextEdit 常用方法汇总

目录 1.QTextEdit 限制文本输入数量 2.使用 QTextEdit&#xff0c;根据我希望一次可见的行数来设置高度 3.限制QTextEdit行数 4.判断QTextEdit当前行数 5.QTextEdit光标移至最后一行 6.QTextEdit删除光标的前一个字符 7.QTextEdit移动光标至上一行的起始位置 8.限制QTe…

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1&#xff0c;视频地址 【wails】&#xff08;4&#xff09;&#xff1a;使用wails做桌面应用开发&#xff0c;整合chatgpt-web项目做前端&#xff0c;进行本地开发&#xff0c;web端也可以连调&#xff0c;使用websocket实现 2&#xff0c;演示效果 启动先是报500 错误&#…

vue 动态渲染本地图片不显示的解决方法

代码更改前 <img class"img" :src"/assets/images/${syntheticalGrade}.png" />data(){return{syntheticalGrade:"1"} }效果图&#xff1a; 解决代码 <img class"img" :src"require(/assets/images/${syntheticalGrad…

TRRUST:实用的转录因子-靶标基因调控数据库

转录因子是转录调控中的主要反式作用因子。因此&#xff0c;阐明TF-靶标相互作用是理解复杂特征&#xff08;疾病、生长发育等&#xff09;背后的调节回路的关键一步。前面我们分享了动物转录因子数据库AnimalTFDB v4.0 以及植物转录因子数据库PlantTFDB 。 在这里&#xff0c…

Stability AI发布Stable Diffusion 3;谷歌修复Gemini大模型文生图多元化Bug;李一舟AI课遭下架

&#x1f989; AI新闻 &#x1f680; 著名大模型开源平台Stability AI发布Stable Diffusion 3 摘要&#xff1a;Stable Diffusion 3是由专注AIGC领域的开源平台stability.ai推出的新版本。相比Stable Diffusion 2&#xff0c;Stable Diffusion 3在文本语义理解、色彩饱和度、…

【Qt学习】QWidget的styleSheet属性与实例(日/夜间模式、RGB颜色的表示)

文章目录 1. 介绍2. 实例分析RGB颜色的表示实例 - 日 / 夜间模式 3. 代码资源 1. 介绍 上图来自Qt官方文档&#xff0c;我们以此对styleSheet进行总结&#xff1a; styleSheet 样式表是一种可以通过文本描述来自定义控件外观的强大工具&#xff0c;它类似于网页开发中的 CSS&a…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

WordPres Bricks Builder 前台RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

【软考】系统集成项目管理工程师【总】

引言 本来整理这篇文章的目的是方便自己23年考试用的 效果不错 目标完成。 接下来的目标是把这篇文章 做成参加该软考 小伙伴的唯一参考资料&#xff08;有它就够了&#xff09;来持续更新。。。 这篇文章我将当作一个长周期&#xff08;以年为单位&#xff09;项目运维起来&am…

微服务远程调用Feign

目录 RPC概述 什么是Feign&#xff1f; Ribbon&Feign对比 Feign的设计架构 Spring Cloud Alibaba快速整合Feign Spring Cloud Feign扩展 日志配置 契约配置 通过拦截器实现参数传递 自定义拦截器实现认证逻辑 超时时间配置 RPC概述 微服务之间如何方便优雅的实…

【python】yolo目标检测模型转为onnx,及trt/engine模型的tensorrt轻量级模型部署

代码参考&#xff1a; Tianxiaomo/pytorch-YOLOv4: PyTorch ,ONNX and TensorRT implementation of YOLOv4 (github.com)https://github.com/Tianxiaomo/pytorch-YOLOv4这个大佬对于各种模型转化写的很全&#xff0c;然后我根据自己的需求修改了部分源码&#xff0c;稍微简化了…