Golang基础-3

【C语言基础】野指针与空指针 全网最接地气的C语言野指针介绍,此处对于野指针与空指针知识点做一些简要的介绍,作者实属初学,写博客也是作者学习的一个过程,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持,赠人玫瑰,手有余香! 文章目录一:野指针1.1 :野指针的成因2.1 :规避野指针二:空指针 一:野指针 概念:野指针就是指向的内存地址是未知的(随机的,不正确的,没有明确限制的)。 说明:指针变量也是变量,是变量就可以任意赋值。但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向 阅读详情

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中条件语句、选择语句、循环语句、break、continue、goto关键字等相关知识。

基础

1. 条件语句
  • 实现程序逻辑时,需要通过不同的判断条件去执行相应的语句。
  • Go语言中的条件语句通过判断条件是否为 true/false 来决定执行相关语句。
  • Go语言中条件语句有 if、if else、if else if等
package main

import "fmt"

func main() {
	var a int = 16

	// 单分支,大括号必须存在,Go语言格式严格
	if a == 16 {
		fmt.Println("a == 16")
	}

	// 双分支
	a = 20
	if a != 20 {
		fmt.Println("a != 20")
	} else {
		fmt.Println("a == 20")
	}

	// 多分支,else if 分支任意数量、最后的 else 可选
	a = 40
	if a <= 20 {
		fmt.Println("a <= 20")
	} else if a <= 40 {
		fmt.Println("a <= 40")
	} else if a <= 60 {
		fmt.Println("a <= 60")
	} else {
		fmt.Println("a > 60")
	}

	// 局部变量,仅在条件语句作用域内可访问
	a = 30
	if s := 16; s == a {
		fmt.Println("s == a")
	} else {
		fmt.Println("s != a")
	}

	// 分支嵌套,可任意嵌套,实际开发中不要嵌套太多层,嵌套太多层的代码需要优化设计
	a = 80
	if a > 60 {
		if a > 80 {
			fmt.Println("a > 80")
		} else {
			fmt.Println("a <= 80")
		}
	} else if a > 40 {
		if a > 50 {
			fmt.Println("a > 50")
		} else {
			fmt.Println("a <= 50")
		}
	} else {
		fmt.Println("a <= 40")
	}
}

输出结果
a == 16
a == 20
a <= 40
s != a
a <= 80

2. 选择语句
  • 根据输入条件的不同选择不同的语句块进行执行(多分支)
  • 基本语法
switch 表达式 {
	case 值1, 值2... :
		语句块1
	case 值3, 值4... :
		语句块2
	...
	default : 
		语句块
}
  • switch后边是一个表达式(常量值、变量、具有返回值的函数等)
package main

import "fmt"

func main() {
	var a int = 16
	var str string = "id"
	const c int = 20

	// switch后边是常量值
	switch 20 {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println("***")
	}
	// switch后边是变量
	switch a {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(a)
	}
	// switch后边是常量
	switch c {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(c)
	}
	// switch后边是字符串
	switch str {
	case "id":
		fmt.Println("id")
	default:
		fmt.Println(str)
	}
	// switch后边是函数
	switch getValue() {
	case 30:
		fmt.Println("30")
	default:
		fmt.Println("***")
	}
}

func getValue() int {
	return 30
}

输出结果
20
16
20
id
30

  • switch后边可不带表达式,当作if使用
package main

import "fmt"

func main() {
	var a int = 20
	// switch后边自定义局部变量
	switch {
	case a == 20:
		fmt.Println("a == 20")
	default:
		fmt.Println(a)
	}
}

输出结果:a == 20

  • switch后边可直接声明/定义一个变量,分号结束
package main

import "fmt"

func main() {
	// switch后边自定义局部变量
	switch s := 10; s {
	case 10:
		fmt.Println("10")
	default:
		fmt.Println(s)
	}
}

输出结果:10

  • switch语句分支Go语言默认执行完符合条件的case后会自动break(跳出switch语句块),若要执行完当前分支后继续执后一个分支,需要在分支中添加关键字fallthrough
package main

import "fmt"

func main() {
	var a int = 20
	// case 分支使用 fallthrough 穿透
	switch {
	case a == 20:
		fmt.Println("a == 20")
		fallthrough
	case a != 20:
		fmt.Println("a != 20")
	default:
		fmt.Println(a)
	}
}

输出结果
a == 20
a != 20

  • case后值的数据类型必须和switch后表达式的数据类型一致
  • case后可跟多个表达式,使用逗号分隔
package main

import "fmt"

func main() {
	var a int = 20
	// case 分支多个值
	switch a {
	case 10, 30:
		fmt.Println("10, 30")
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(a)
	}
	// case 分支多个表达式
	switch {
	case a < 10, a > 30:
		fmt.Println("a < 10, a > 30")
	case a >= 10, a <= 30:
		fmt.Println("a >= 10, a <= 30")
	default:
		fmt.Println(a)
	}
}

输出结果
20
a >= 10, a <= 30

  • case后边为值时,各case分支的值不能重复
  • default语句是可选的
3. 循环语句
  • 实际需要重复执行一段代码时,需要循环结构
  • Go语言中使用 for 支持循环结构
  • break关键字用于跳出当前循环结构
  • continue关键字用于当前循环结构中,表示这一轮循环从当前位置结束,返回去重新开始执行下一轮循环
  • for 循环可嵌套,切记注意程序执行效率
  • for 循环基本语法格式
for 初始表达式; 布尔表达式; 迭代因子 {
	循环体
}
  • for-range 用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等
package main

import "fmt"

func main() {
	// 计算数字 1~100 加法
	var sum int = 0

	// 标准 for 循环
	for i := 1; i <= 100; i++ {
		sum += i
	}
	fmt.Println("1 sum: ", sum)

	// for 省略初始化因子
	sum = 0
	var i int = 1
	for ; i <= 100; i++ {
		sum += i
	}
	fmt.Println("2 sum: ", sum)

	// for 省略初始化因子、迭代因子,类似 while 循环
	sum = 0
	i = 1
	for i <= 100 {
		sum += i
		i++
	}
	fmt.Println("3 sum: ", sum)

	// 无限 for 循环
	sum = 0
	i = 1
	for {
		if i <= 100 {
			sum += i
		} else { // i > 100
			break // 注意此处使用 break 跳出 for 循环
		}
		i++
	}
	fmt.Println("4 sum: ", sum)
}

输出结果
1 sum: 5050
2 sum: 5050
3 sum: 5050
4 sum: 5050

package main

import "fmt"

func main() {
	// for-range
	var str string = "今天是sheme天气"
	for i, v := range str {
		fmt.Printf("index: %d, value: %c\n", i, v)
	}
}

输出结果
index: 0, value: 今
index: 3, value: 天
index: 6, value: 是
index: 9, value: s
index: 10, value: h
index: 11, value: e
index: 12, value: n
index: 13, value: m
index: 14, value: e
index: 15, value: 天
index: 18, value: 气

package main

import "fmt"

func main() {
	// for 循环嵌套
	for i := 1; i < 10; i++ {
		for j := i; j < 10; j++ {
			fmt.Printf("%v * %v = %v\t", i, j, i*j)
		}
		fmt.Printf("\n")
	}
}

输出结果
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9
2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
8 * 8 = 64 8 * 9 = 72
9 * 9 = 81

  • break跳出循环体
package main

import "fmt"

func main() {
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时跳出 for 循环
			break
		}
		fmt.Println(i)
	}
}

输出结果
0
1

  • continue停止当前循环体,开始下一轮循环体
package main

import "fmt"

func main() {
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,重新执行下一轮循环
			continue
		}
		fmt.Println(i)
	}
}

输出结果
0
1
3

4. goto关键字
  • 尽量少使用 goto 关键字
  • 通过 goto 语句可以任意跳转到当前函数指定的 label 位置
package main

import "fmt"

func main() {
	fmt.Println("-----1-----")
	fmt.Println("-----2-----")
	fmt.Println("-----3-----")
	goto END
	fmt.Println("-----4-----")
	fmt.Println("-----5-----")
END:
	fmt.Println("-----6-----")
}

输出结果
-----1-----
-----2-----
-----3-----
-----6-----

  • break 和 continue 后也可以指定 label 用于指定跳出或跳过指定 label 同层级的循环
package main

import "fmt"

func main() {
END1:
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,执行跳转
			continue END1
		}
		fmt.Println("-----", i, "-----")
	}

END2:
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,执行跳转
			break END2
		}
		fmt.Println("=====", i, "=====")
	}
}

输出结果
----- 0 -----
----- 1 -----
----- 3 -----
===== 0 =====
===== 1 =====

起始

Frida实战:SSL Pinning绕过技术全解析 本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。 阅读详情

相关推荐

深入解析EDID中Display Descriptor Block的配置技巧与实战应用

本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。

1a2s3d4f5g的博客 878

【Golang第1~3章:基础】如何安装golang、第一个GO程序、golang的基础

本人是个菜鸡,这个是在B站上看边看视频边做的笔记,这一章是编程语言的基础 有变量、常量、数据类型、指针、标识符、运算符、流程控制,具体请看【文章目录】 配套视频自己去B站里面搜【go语言】,最高的播放量就是 里面的注释我写的可能不太对,欢迎大佬们指出╰(*°▽°*)╯

雪花凌落的盛夏 422

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

2024年Go最全Golang 编译原理(3),Golang基础72问

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新如果你需要这些资料,可以戳这里获取习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**如果你需要这些资料,可以戳这里获取。

2401_84923269的博客 1002

AWS入门实践-如何在AWS云上创建一个内外网隔离的生产环境

在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面,有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内,数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境,实现在public subnet的EC2虚拟机可以直接通过互联网可以访问,在Private subnet的EC2虚拟机不能通过互联网直接访问,但是却可以在内部来访问互联网安装应用等等。

weixin_39108752的博客 2994

【MATLAB+VScode】VScode调试MATLAB代码的终极指南

本文详细介绍了在VScode中调试MATLAB代码的完整方案。通过配置MATLAB Engine for Python作为桥梁,实现在VScode中设置断点、单步执行、查看变量等交互式调试功能,有效结合了VScode的现代化编辑体验与MATLAB的强大计算内核,显著提升开发效率。

weixin_29161719的博客 412

【Web3 后端】Golang基础

摘要:本文介绍了DApp后端工程师需要掌握的Golang基础技能,包括语法基础(变量、数据类型、控制流)、函数定义与调用、并发编程(goroutine和channel)、面向对象编程(结构体和接口)以及网络编程(HTTP服务和TCP连接)。每个知识点都配有示例代码,帮助开发者快速掌握Golang开发高性能区块链后端服务的关键技术。这些内容为构建稳定、高效的DApp后端系统提供了必要的基础知识框架。

weixin_42548337的博客 569

【牛股启动线】副图指标使用技术说明,图文案例分享,通达信炒股指标

如上图,在紫色线在黑色虚线上时,在出现紫色柱线时,通常会出现强势拉升的行情​。柱线加长加上紫色线上扬,进场跟随做多抓强势行情,紫色柱线和紫色线同时做多持续则可以继续持股。如上图,副图指标【牛股启动线】,指标信号包括紫色线走势信号和紫色柱线信号,以及底部的四条虚线技术信号​,还有一条绿色的参考线,一条黑色的虚线两天分档线。如上图,参考买点,紫色柱线开始出现时进场买点,在上图标记的位置对应的就是进场买点​。紫色柱线加长+紫色线上扬,多头共振持股,行情继续拉升阶段,持股待涨或顺势​进场做多。

weixin_69760830的博客 1910

Go基础开发,一条命令生成openapi v2 v3版本API

每天前进一小步, Java转Go的第1天的JAVA开发狗.说明: Golang版本为1.22.5。此处改成 ./docs/v2。此处改成 ./docs/v3。

xincan的博客 1074

汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力

汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支

weixin_34413103的博客 386

稳定性仿真(stb闭环增益仿真)

stb仿真主要是测试电路的稳定性,例如运放在闭环电路中的增益和相位裕度的值,从而判别电路是否正常工作。 以下是stb仿真的过程: (1)调用iprobe器件 从analogLib中调iprobe器件,通过器件中的箭头标识确定接入电路的方法,箭头起点端连运放的输出端,箭头的终点端连在反馈环路的作用端。iprobe器件连入电路后相当于理想导线。(iprobe器件连接在反馈回路上) (2)analyses设置 勾选stb和frequency,此处的频率范围设置在0.1~1GHz,Probe Instance/T

qq_36686804的博客 3万+

【WEB3.0零基础转行笔记】Golang编程篇-第一讲:Go语言基础及环节搭建

本文摘要:第一章介绍Go语言基础与环境搭建,涵盖Go的核心特性、应用场景及开发工具配置。1.1节详细解析Go语言的定义、诞生背景、关键特性(简洁语法、原生并发模型、高性能编译)及其在云原生、区块链等领域的应用。1.2-1.3节列举知名Go项目(如Docker、Kubernetes)和采用Go的科技公司(Google、腾讯等)。1.4-1.6节提供Windows环境下的Go安装指南、VSCode配置方法及首个Go程序解析。1.7-1.9节重点阐述Go在Web3.0开发中的优势,包括高性能、高并发处理能力,以及

tianp123的博客 1202

图注意力网络(GAT)原理与代码实战案例讲解

1. 背景介绍 图注意力网络(Graph Attention Network,简称GAT)是一种基于图神经网络(Graph Neural Networks,简称GNN)的深度学习方法。它能够处理具有复杂关系的节点数据,并在多个领域取得了显著的效果,如社交网络分析、推荐系统等。 2. 核心概念与联系

AI架构师小马 2715

非零基础自学Golang 第3章 基本变量与类型 3.1 Go语言变量

非零基础自学Golang 第3章 基本变量与类型 3.1 Go语言变量

代码改变世界 436

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

golang基础1-3:GO语言基本数据类型

GO语言基本数据类型 1. 介绍 在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。 go语言基本数据类型分为数字类型、字符串类型、布尔类型 2.数字类型 2.1 整数类型 GO语言中整数类型分为有符号和无符号(类型前面以u开头),有符号即从**-2(n-1)~2(n-1)-1**,例如int8的取值范围为-128127,无符号即表示取值为非负数,取值范围从**02^n -1**, 例如

Wanik666 701

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

非零基础自学Golang 第2章 安装和运行Go 2.3 在Linux 下安装Go & 2.4 在Mac OS 下安装Go

非零基础自学Golang 第2章 安装和运行Go 2.3 在Linux 下安装Go & 2.4 在Mac OS 下安装Go

代码改变世界 534

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

非零基础自学Golang 第1章 走进Go 1.2 Go语言官方文档 & 1.3 学好Go 的建议

非零基础自学Golang 第1章 走进Go 1.2 Go语言官方文档 & 1.3 学好Go 的建议

代码改变世界 2259

2024年Go最新HelloWorld程序解释及Go编码规范(3),0基础学Golang开发

一、HelloWorld程序解释。

2401_84925284的博客 473

Go最新Win7使用teredo连接IPv6的方法_teredo v6验证(3),Golang开发基础学习

查看 Teredo 参数 ,若状态为 qualified ,则 OK ,用 ipconfig /all 查看 Teredo 适配器是否获得以 2001:0 为前缀的 IPv6 地址。若状态仍未 offline ,需要再次尝试连接服务器,即输入之前的命令。因不能确保一次就能连上,可能出现需要多次连接的情况。之后需要稍等一阵 ,因为在请求连接 Teredo 服务器,此时输入。即 “ 状态 ”为 probe ,表示正在请求中。10 秒之后(或稍长些), 输入。路线、讲解视频,并且后续会持续更新**

2401_84920041的博客 255

非零基础自学Golang 第6章 Go语言内置容器 6.3 映射

非零基础自学Golang 第6章 Go语言内置容器 6.3 映射

代码改变世界 263

非零基础自学Golang 第3章 基本变量与类型 3.2 Go语言数据类型

非零基础自学Golang 第3章 基本变量与类型 3.2 Go语言数据类型

代码改变世界 489

2024年Go最新【golang基础教程(持续更新ing)】_golang教程(3),开发人员必学

import (“fmt”const (// 常量 运行期间 不可改变的量 常量声明需要使用const### 布尔类型// 布尔类型 条件判断 循环 go中0/1不能用作boolb := true### 数字类型import (“bytes”“fmt”“math”“strings”“unsafe”/*数字类型float32 float64默认整形格式化输出 %d进制格式化输出 %b %o %x浮点格式化输出 %f*/

2401_84905010的博客 904

2024年最全Go 专栏|说说方法(3),2024年最新Golang开发基础作用

本文主要学习了 Go 的方法,方法的声明和函数类似,他们的区别是:方法在定义的时候,会在func和方法名之间增加一个参数,这个参数就是接收者。接收者有两种类型:值接收者和指针接收者。不管是使用值接收者,还是指针接收者,一定要搞清楚类型的本质:对类型进行操作的时候,是要改变当前值,还是要创建一个新值进行返回?这些就可以决定我们是采用值传递,还是指针传递。最后就是方法的调用,可以直接使用操作符调用,还可以使用方法变量和方法表达式。只有基于面向对象编程思想,才能使用好方法。

2401_84920052的博客 304

go语言就是golang_1天学会_基础篇_v1.0.3

语法 时间 基本 package main import ( "fmt" "time" ) func main() { fmt.Println("hg") fmt.Println("Time", time.Now()) } 格式化一下 // 必须是"2006-01-02 15:04:05",否则格式化不正确 fmt.Println("Time", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("Time", now.Y

般若 569

3天学会golang的基础语法

330_尚硅谷_海量用户通讯系统-显示在线用户列表(1).mp4。331_尚硅谷_海量用户通讯系统-显示在线用户列表(2).mp4。332_尚硅谷_海量用户通讯系统-显示在线用户列表(3).mp4。333_尚硅谷_海量用户通讯系统-显示在线用户列表(4).mp4。334_尚硅谷_海量用户通讯系统-显示在线用户列表(5).mp4。335_尚硅谷_海量用户通讯系统-显示在线用户列表(6).mp4。336_尚硅谷_海量用户通讯系统-显示在线用户列表(7).mp4。

I’ll just fix this one bug… 2464

2024年最全Go并发编程——channel(3),Golang开发入门基础教程

涵盖了95%以上Go语言开发知识点,真正体系化!三、time包中的定向通道。四、select分支语句。二、缓冲通道和定向通道。

2401_84925929的博客 385
上一篇: Golang基础-2
下一篇: Golang基础-4
无夜_
博客等级 码龄7年 2916粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值