Go语言笔记

目录

一、变量声明

二、流程控制

if(条件判断)

for(循环结构) 

 Switch(简化if)

goto(跳出循环)

三、运算符

1、算数运算符

2、关系运算符

3、逻辑运算符

4、位运算符

5、赋值运算符

四、数组

1、数组的定义

2、数组的初始化

3、数组的遍历

五、切片

1、切片的定义和初始化

2、数组转切片

3、切片的容量

4、使用make()函数构造切片

5、append()

6、copy()


一、变量声明

1、函数外的每个语句都必须以关键字开始(var/const/func等)

2、:= 只能在函数内使用

3、_ 多用于占位,表示忽略值

4、const定义,iota从0开始,每增加一行,自动+1

const (
	_  = iota
	KB = 1 << (10 * iota)
	MB = 1 <<(10*iota)
	GB = 1 << (10*iota)
	TB = 1 << (10*iota)
	PB = 1 << (10*iota)
)

5、八进制&十六进制,注:Go语言无法直接定义二进制

    //八进制,0开头
	var ba int = 027

	//十六进制,0f开头
	var sa int = 0xfa

6、字符串,Go语言中的字符串以原生数据类型出现,类似(int/bool/float32等)。默认编码使用UTF-8

6、字符串转义符,使用反引号内部是什么就输出什么,不用加转义符

    //反引号的作用,内部写什么就输出什么,不用加转义符
	s1 := `C:\Users\230900013\go\src`
	s2 := "C:\\Users\\230900013\\go\\src"

二、流程控制

if(条件判断)

    //m只在if判断内部生效
	n := 18
	if m := 12; m > n {
		fmt.Println(" m > n", m, n)
	} else if m == n {
		fmt.Println(" m = n", m, n)
	} else if m < n {
		fmt.Println(" m <>> n", m, n)
	}

for(循环结构) 

    s := "1234567890"
	for i := 0; i < len(s); i++ {
		fmt.Printf("for循环基本格式 %c\n", s[i])
	}

    //Go没有while循环,可以用for循环完成
	for {
		fmt.Println("for无限循环", s)
	}

	n := "anfajakjfkasdjgn"
	for _, b := range n {
		fmt.Printf("for range循环 %c\n", b)
	}

 Switch(简化if)

	switch expr := 4; expr {
	case 2, 4, 6, 8:
		fmt.Println(expr, "是偶数")
	case 1, 3, 5, 7:
		fmt.Println(expr, "是奇数")
	default:
		fmt.Println(expr)
	}

	age := 36
	switch {
	case age < 18:
		fmt.Println(age, "未成年人")
	case age >= 18 && age < 35:
		fmt.Println(age, "青年人")
	case age >= 35 && age < 55:
		fmt.Println(age, "中年人")
		fallthrough//表示向下穿透,满足该case时,也会执行下一个case
	case age >= 55:
		fmt.Println(age, "好好享受退休生活吧")
	default:
		fmt.Println(age, "活着真好")
	}

goto(跳出循环)

    flag := false
	for i := 0; i < 10; i++ {
		for j := 0; j < i; j++ {
			if j == 5 {
				flag = true
				break //跳出内层循环
			}
			fmt.Printf("%d - %d\n", i, j)
		}
		if flag {
			fmt.Printf("over\n")
			break //跳出外层循环
		}
	}

	for i := 0; i < 10; i++ {
		for j := 0; j < i; j++ {
			if j == 5 {
				goto Lable
			}
			fmt.Printf("%d - %d\n", i, j)
		}
	}

Lable:
	fmt.Println("这里用到了跳转")

三、运算符

1、算数运算符

+、-、*、/、%(++、--在go语言中是单独的语言,不能放在=右边)

2、关系运算符

==、!=、>、>=、<、<=

3、逻辑运算符

&&、||、!

4、位运算符

&:参与运算的两数各对应的二进位相与

|:参与运算的两数各对应的二进位相或

^:参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1

<<:左移n位,高位丢弃,低位补0

>>:右移n位

5、赋值运算符

=、+=、-+、*=、/=、%=、<<=、>>=、&=、|=、^=

四、数组

1、数组的定义

var 数组变量名 [元素数量] T

var a [5]int
var b [5]bool

2、数组的初始化

    //方法一
	var a [5]int
	a = [5]int{0, 1, 2, 3, 4}
	fmt.Println(a)

	//方法二
	b := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
	fmt.Println(b)

	//方法三,根据索引初始化
	c := [5]int{0:5, 4:20}
	fmt.Println(c)

3、数组的遍历

    //根据索引遍历
	str := [...]string{"wo", "ttt", "fff", "sss", "rrr"}
	for i := 0; i < len(str); i++ {
		fmt.Println(str[i])
	}

	//for range
	for _, i := range str {
		fmt.Println(i)
	}

五、切片

1、切片的定义和初始化

var name []T

    var age []int
	var name []string

	age = []int{18, 20, 5, 36}
	name = []string{"Linda", "Lucy", "Lily", "Kity"}

	var flag = []bool{false, true, false, true}
	temp := []string{"int", "string", "bool"}

2、数组转切片

    //左包含,右不包含
	str := [...]string{"wo", "ttt", "fff", "sss", "rrr", "ooo", "pip"}
	a1 := str[1:4]  //str取下标1-3的元素
	a2:=str[:3] 	//==> 0-2
	b1:=str[3:] 	//==> 3-len(str)
	c1:=str[:]		//==> 0-len(str)

3、切片的容量

切片的容量是指底层数组的容量

4、使用make()函数构造切片

make([] T, size, cap)

T:切片的元素类型

size:切片中元素的数量

cap:切片的容量

//int类型切片,长度5,容量10
a:=make([]int, 5, 10)

5、append()

    //int类型切片,长度5,容量10
	a := []int{0, 1, 2, 3}
	fmt.Printf("a=%v, len=%v, cap=%v\n", a, len(a), cap(a))

	//append 之后,容量会自动增加
	a = append(a, 12)
	fmt.Printf("a=%v, len=%v, cap=%v\n", a, len(a), cap(a))

	//将B切片追加到A切片, ...表示拆分
	b := []int{7, 8, 9, 10}
	a = append(a, b...)
	fmt.Printf("a=%v, len=%v, cap=%v\n", a, len(a), cap(a))

6、copy()

copy是深拷贝, := 赋值的方式是浅拷贝

	str := []string{"a", "b", "c", "d", "f"}
	stra := str
	var strb = make([]string, 5, 10)
	copy(strb, str)
	fmt.Printf("str=%v, stra=%v, strb=%v\n", str, stra, strb)

	str[0] = "test"
	fmt.Printf("str=%v, stra=%v, strb=%v\n", str, stra, strb)

7、删除

切片没有删除方法,需要通过append操作间接实现删除元素操作。通过拼接,删除的元素实际是被覆盖了,原始指向的底层数组,内容也被改变,观察最终打印的arr,可以清晰看到切片和底层数组之间的关系变化

	arr := [...]int{1, 2, 3, 4, 5, 6, 7}
	s := arr[:]
	fmt.Println(s, len(s), cap(s))

	s = append(s[0:1], s[2:]...)
	fmt.Println(s, len(s), cap(s))
	fmt.Println(arr)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 入门指南:JVM(Java虚拟机)—— Java 类加载器详解

类加载器 类加载器&#xff08;Class Loader&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;的一部分&#xff0c;它的作用是将类的字节码文件&#xff08;.class 文件&#xff09;从磁盘或其他来源加载到 JVM 中。类加载器负责查找和加载类的字节码文件&#xff0c;并…

BEV学习--Nuscenes数据集解读

一、Nuscenes数据集简介 Nuscenes数据的采集来自不同城市的1000个场景中&#xff0c;采集车上配备了完善的传感器&#xff0c;包括6个相机&#xff08;CAM&#xff09;、1个激光雷达&#xff08;LIDAR&#xff09;、5个毫米波雷达&#xff08;RADAR&#xff09;、IMU和GPS&…

论文(六):Fire-Net: A Deep Learning Framework for Active Forest Fire Detection

文章目录 1.Introduction2.Study Area2.1Landsat-8 Dataset2.2Inventory data 3.Methodology3.1Image Pre-processing3.2Proposed Deep Learning Architecture (Fire-Net)3.2.1Convolution Layers3.2.2 Evaluation Indices/methods or accuracy assessment. 4.Results4.1 Austr…

新一代图像生成E2E FT:深度图微调突破

文章地址&#xff1a;Fine-Tuning Image-Conditional Diffusion Models is Easier than You Think 项目主页&#xff1a;https://gonzalomartingarcia.github.io/diffusion-e2e-ft/ 代码地址&#xff1a;https://github.com/VisualComputingInstitute/diffusion-e2e-ft 机构&am…

SpringBoot 整合 apache fileupload 轻松实现文件上传与下载(通用版)

我们以Thymeleaf页面模板引擎为例&#xff0c;简单介绍利用 apache fileupload 工具实现文件上传的功能。 2.1、添加相关依赖包 首先创建一个基础的 Spring Boot 项目&#xff0c;并引入相关的依赖包。 2.2、添加相关配置参数 2.3、文件上传示例 对应文件上传的Controller类&…

传知代码-基于多尺度动态卷积的图像分类

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 在计算机视觉领域&#xff0c;图像分类是非常重要的任务之一。近年来&#xff0c;深度学习的兴起极大提升了图像分类的精度和效率。本文将介绍一种基于动态卷积网络&#xff08;Dynamic Convolutional Netw…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端&#xff0c;使用Qt实现客户端&#xff0c;VS实现服务端 Qt创建项目 Qt文件类型 .pro文件&#xff1a;配置文件&#xff0c;决定了哪些文件参与编译&#xff0c;怎样参与编译 .h .cpp .ui&#xff1a;画图文件 Qt编码方式 Qt使用utf-8作为编码方…

【delphi】正则判断windows完整合法文件名,包括路径

在 Delphi 中&#xff0c;可以使用正则表达式来检查 Windows 文件名称或路径是否合法。合法的文件名和路径要求符合以下几点&#xff1a; 禁止的字符&#xff1a;文件名和路径不能包含以下字符&#xff1a;<, >, :, ", /, \, |, ?, *。文件名不能以空格或点结束。…

idea多模块启动

文章目录 idea多模块启动2018版本的idea2019版本的idea idea多模块启动 2018版本的idea 1.首先看一下view> Tool Windows下有没有Run Dashboard 如果有&#xff0c;点击一下底部的窗口就会出现 如果不存在&#xff0c;执行下一步 2.查看自己项目的工作空间位置 点击 File&…

Java中的事件(动作监听-ActionListener)

&#xff08;一&#xff09;、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件&#xff0c;例如&#xff1a;按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法&#xff0c;该方法会在动作发生时被调用。 &#…

Android WebView H5 Hybrid 混和开发

对于故乡&#xff0c;我忽然有了新的理解&#xff1a;人的故乡&#xff0c;并不止于一块特定的土地&#xff0c;而是一种辽阔无比的心情&#xff0c;不受空间和时间的限制&#xff1b;这心情一经唤起&#xff0c;就是你已经回到了故乡。——《记忆与印象》 前言 移动互联网发展…

Python | Leetcode Python题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; class Solution:def addStrings(self, num1: str, num2: str) -> str:res ""i, j, carry len(num1) - 1, len(num2) - 1, 0while i > 0 or j > 0:n1 int(num1[i]) if i > 0 else 0n2 int(num2[j]) if j > 0 e…

Dify创建自定义工具,调用ASP.NET Core WebAPI时的注意事项(出现错误:Reached maximum retries (3) for URL ...)

1、要配置Swagger using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Models;var builder WebApplication.CreateBuilder(args);builder.Services.AddCors(options > {options.AddPolicy("AllowSpecificOrigin",builder > builder.WithOrigins("…

SpringSecurity6.x整合手机短信登录授权

前言&#xff1a;如果没有看过我的这篇文章的Springboot3.x.x使用SpringSecurity6(一文包搞定)_springboot3整合springsecurity6-CSDN博客需要看下&#xff0c;大部分多是基于这篇文章的基础上实现的。 明确点我们的业务流程&#xff1a; 需要有一个发送短信的接口&#xff0…

【C++】10道经典面试题带你玩转二叉树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Leetcode/牛客网 目录 一.根据二叉树创建字符串 二.二叉树的层序遍历 三.二叉树的层序遍历 II 四.二叉树的最近公共祖先 五.二叉搜索树与双向链表 六.从前序与中序遍历序列构造二叉树 七.从中序与后序遍历…

基于yolov8的无人机检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的无人机检测系统是一项前沿技术&#xff0c;结合了YOLOv8深度学习模型的强大目标检测能力与无人机的灵活性。YOLOv8作为YOLO系列的最新版本&#xff0c;在检测精度和速度上均有显著提升&#xff0c;特别适用于复杂和高动态的场景。 该系统通过捕获实…

【QML 基础】QML ——描述性脚本语言,用于用户界面的编写

文章目录 1. QML 定义2. QML 1. QML 定义 &#x1f427; QML全称为Qt Meta-Object Language&#xff0c;QML是一种描述性的脚本语言&#xff0c;文件格式以.qml结尾。支持javascript形式的编程控制。QML是Qt推出的Qt Quick技术当中的一部分&#xff0c;Qt Quick是 Qt5中用户界…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间一般没有紧密的关联关…

U盘格式化了怎么办?这4个工具能帮你恢复数据。

如果你思维U盘被格式化了&#xff0c;也不用太过担心&#xff0c;其实里面的数据并没有被删除&#xff0c;只是被标记为了可覆盖的状态。只要我们及时采取正确的数据恢复措施&#xff0c;就有很大的机会可以将数据找回。比如使用专业得的数据恢复软件&#xff0c;我也可以跟大家…

缓存的思考与总结

缓存的思考与总结 什么是缓存缓存命中率数据一致性旁路模式 Cache aside双写模式直写模式 write through异步写 Write Behind 旁路和双写 案例 新技术或中间的引入&#xff0c;一定是解决了亟待解决的问题或是显著提升了系统性能&#xff0c;并且这种改变所带来的增幅&#xff…