Go语言学习笔记三--基础语法

【Go语言学习系列10】Go基础语法(八):接口 深入解析Go语言接口的工作原理、类型断言与实战应用技巧,掌握这一强大的抽象机制,提升代码灵活性与可维护性 阅读详情

函数

在golang中函数是作为一等公民存在的,而这个一等公民,我理解得意思就是可以在任何地方使用到函数,函数中参数可以是函数,返回也可以是函数.

正常定义函数

/**
正常定义函数,(还是准寻golang定义原则变量名在前,变量类型在后,如果多个参数类型一致可以一起定义)
*/
func eval(a, b int, op string) int {
    switch op {
    case "+":
        return a + b
    case "-":
        return a - b
    case "*":
        return a * b
    case "/":
        return a / b
    default:
        panic("错误的计算符号" + op)
    }
}

返回多个参数函数

/**
多个返回值
    带余数除法
*/
func div(a, b int) (int, int) {
    return a / b, a % b
}

注意在golang中,如果会发现所有定义的变量都要使用到,而有时候我们返回的多个参数,其中又有些参数不需要用到,这时可以使用_下划线来占位

//如不需要第二参数,直接使用下划线来占位
i, _ := div(11, 3)

可变参数函数

/**
在写函数得过程中,发现golang是没有函数重载,没有默认参数,可选参数这些东西
只有一个 就是可变参数 既...三个点代表
*/

func addAll(sum ...int) int {

    s := 0
    for e := range sum {
        s += sum[e]
    }

    return s
}

函数式编程

第一个参数apply是一个函数定义这个函数又有两个(a, b int)参数,且其返回两个参数,这样上面的eval函数就可以改成在计算逻辑在apply的函数里,对于代码的扩展性强.

/**
函数式编程
    直接将函数做为一个参数传递
    这里就定义了一个func(a,b int) (r,q int)传入两个int值,返回两个int值的函数

注意这里只是做为演示,正常情况下返回多个参数会让人看起来很乱
一般多个参数返回,在有错误的情况下去做返回,返回错误信息
*/
func divFun(apply func(a, b int) (r, q int), a, b int) (r, q int) {
    return apply(a, b)
}

指针

golang中的指针与其他C++中的还不一样,C++中的指针之所以难,是因为其指针可以参与运算,而在golang中指针不能参与运算,只能用于赋值.

小插曲-值传递or引用传递

要搞清楚值传递和引用传递得区别,先得搞清楚什么是值传递,什么是引用传递.

  • 值传递:将传入得值,拷贝一份到传入得方法中.
  • 引用传递:直接将其指针 传入函数中.

由此可见,值传递中传入函数中得参数,其参数是其参数得拷贝份,所以在调用函数内修改 在外部调用传入得参数是不会改变得.而很多语言又有值传递又有引用传递.golang中只有值传递,既只要是参数,被调用得函数中参数必定是拷贝份.

java中的参数传递

在熟悉得Java中,其实也是全部都为值传递.我们知道在Java中有基本类型与引用类型(引用类型就是包装类),在函数调用时都是将传入的参数做一次拷贝到被调用的函数中.而这里很多同学就迷惑了,自己明明有时候在被调用update更改一个值,调用函数是有显示,这里就需要搞清楚什么是引用类型,引用类型其变量名指向的是一个堆中对象的地址值,所以拷贝到被调用方法中的依旧也是堆中对象的地址值.

Java参数传递

golang中的参数传递-经典的交换案例

实验:

func swap(a, b int) {
    a, b = b, a
}

func main() {
    a,b:= 1,2
    swap(a,b)
    print(a,b)// 1 2 显然因为上述golang是值传递,所以不能交换
}

修改使用指针:

/**
 但是这样看起非常的乱,一般不会这样来使用.交换的方法还有一种跟易懂的写法
*/
func swapByPointer(a, b *int) {//*int就代表传入的是指针类型
    *a, *b = *b, *a //*a指针量
}

func main() {
    a, b := 1, 2
    swapByPointer(&a, &b)//&a表示取a的指针
    fmt.Println(a, b)//2 1 交换成功
}

交换最简易方法:

func swapByReturn(a,b int) (c,d int)  {//利用golang中可以返回多个值的特性来直接将a b两个值相反返回,然后再让调用函数中的a ,b两个变量接收.
    return b,a
}

func main() {
    a, b := 1, 2

    a, b = swapByReturn(a, b)

    fmt.Println(a, b)
}

作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star?

118云原生编程语言Golang学习笔记 Golang学习笔记 文章目录1.Go简介1.1 简介1.2 设计初衷1.3 Golang vs Java1.4 应用领域1.5 用go语言的公司2.Go下载和安装2.1 开发工具2.2 Go下载2.3 Go安装2.4 Idea安装go插件2.5 DOS命令3.基础语法3.1 Go执行流程3.1.1 Go基本目录结构3.1.2 第一个HelloWord3.1.3 编译teset.go3.1.4 执行test.ext3.1.5 编译+执行3.1.6 Golang执行流程3.2... 阅读详情

相关推荐

西门子828D/840DSL数控机床产量数据采集实战:一个C#程序员的踩坑与填坑记录

本文详细记录了C#程序员在西门子828D/840DSL数控机床产量数据采集实战中的经验与教训。从硬件连接到软件配置,再到数据读取与异常处理,文章分享了工业现场编程的特殊挑战和解决方案,特别是针对数控系统的TCP/IP通信、PLC变量地址映射及数据解析等关键技术点。

weixin_42741930的博客 594

Go语言学习笔记—golang基础语法

golang基础语法

qq_39280718的博客 3277

AD/Protel老手才知道的PCB过孔查看技巧:3分钟分清通孔、盲孔和埋孔

本文为PCB设计工程师提供了在Altium Designer/Protel中快速鉴别通孔、盲孔和埋孔的实用技巧。通过层叠管理器、高级筛选工具和实战五步法,帮助用户在3分钟内精准识别过孔类型,提升设计效率和电路性能。特别适合处理高密度HDI板卡中的复杂过孔布局。

weixin_29164497的博客 572

【Go语言学习系列05】Go基础语法(三):函数

深入探索Go语言函数特性,包括多返回值、可变参数、闭包与匿名函数、defer延迟执行等高级用法,帮助开发者编写更优雅高效的Go代码

GopherTribe的博客 1136

Cadence Allegro 17.4学习记录开始02-原理图Capture CIS 17.4

Allegro的第一方网表与第三方网表有以下几个区别点;Ø 与Allegro实现交互式操作的是第一方网表,第三方网表时不可以实现交互式操作;Ø 第三方网表不能将器件的Value属性导入到PCB中,输出时以封装属性来代替Value属性,第一方网表是可以的;Ø 网表导入到PCB中时,第三方的网表需要指定事先指定好PCB封装库文件,并产生Device文件,才可以将网表导入到PCB中,第一方网表则可以直接导入。

qq_31444421的博客 1万+

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

go语言基础语法,go语言学习超详细笔记

类型常用符号算术+ - * / %比较==!逻辑`&&赋值位运算`&其他++ --(只能单独使用)import fmtvar nums [10]int/'初始化数组,默认元素都为0'//'如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:'//'如果设置了数组的长度,我们还可以通过指定下标来初始化元素:'/// 将索引为 1 和 3 的元素初始化/'将50.0赋值为balance[4]'//'访问'/// Step 1: 创建数组。

2503_91344087的博客 779

Grey Hack v0.7.3618 保姆级教程:手把手教你用metaxploit.so写一个自动提权脚本

本文详细介绍了如何在Grey Hack v0.7.3618中使用metaxploit.so库编写自动化提权脚本。从环境准备到核心功能解析,再到漏洞利用链构建和权限提升的智能处理,手把手教你掌握游戏中的高级黑客技巧。通过多库联合利用和错误处理优化,提升脚本的效率和成功率。

weixin_42537919的博客 394

Go语言学习笔记之基础语法(一)

2009年11月10日,Go语言正式成为开源编程语言家庭的一员。Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。开发人员在为项目选择语言时,不得不在快速开发和性能之间做出选择。C和C++这类语言提供了很快的执行速度,而 Ruby 和 Python 这类语言则擅长快速开发。

渗透之路,攻防之间皆学问 1889

【论文阅读】AU检测|《Deep Adaptive Attention for Joint Facial Action Unit Detection and Face Alignment》

摘要 本文旨在从大量没有人工标注的视频中学习用于面部动作单元检测的区分表示。受面部动作是面部肌肉运动这一事实的启发,论文将这些运动描述为不同帧中两幅面部图像之间的转换,并将其用作学习表示的自我监控信号。但是,在不受控制的情况下,这种转换是由面部动作和头部运动引起的。为了消除头部运动的影响,我们提出了一个双圈自动编码器(TCAE),它可以解开面部动作相关运动和头部运动相关运动。具体而言,TCAE被训练成分别将源面部的面部动作和头部姿态改变为目标面部的面部动作和头部姿态。我们的实验验证了TCAE解耦运动的能力。

Celine的博客 4553

5G无人机安全研究综述

国内多所高校提出混合信任模型,南京航空航天大学于2020年提出了起源信息感知的无人机网络信任模型[26],模型基于报文的完整性对报文创建和操作节点的行为评判并生成观测证据,收集证据进行信任评估,识别网络中的恶意节点并进行路由隔离,实现准确的对等信任评估。同时,5G技术的高速率、高可靠性、低时延等特点,能够为无人机提供实时高清图像回传,保证通信网络的稳定,拓展无人机飞控距离限制,丰富了5G无人机的应用场景。5G和无人机技术的融合,丰富了传统无人机的应用服务场景,然而5G无人机仍存在安全隐患。

weixin_70923796的博客 765

Go语言学习笔记—golang基础简介

Go语言简称golang,是一种静态强类型、编译型语言。

qq_39280718的博客 794

一键开关机电路

一键开关机电路

让你爱上电路设计 4175

【Go】面向萌新的速通Golang基础语法学习笔记(详细)

在Go语言中,函数的定义使用func// 函数体:函数名,遵循标识符命名规则。parameters:参数列表,形式为参数名 类型,多个参数间用逗号分隔。returnType:返回值类型,可以是单个类型或多个类型组成的元组。函数体:实现特定功能的代码块。创建一个自定义的处理器MyHandler,并将其用于处理 HTTP 请求import ("fmt""net/http"")

uuzeray的博客 2108

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Go语言学习笔记

Go语言学习笔记 【下载地址】Go语言学习笔记 《Go语言学习笔记》是一份专为Go语言学习者和开发者打造的综合学习资源。它从基础语法到高级特性,全面覆盖Go语言的核心知识点,帮助您快速掌握这门简洁高效的编程语言。无论是初学者还是有一定经验的开发者,都能通过这份笔记深入了解Go语言的并发编程、网络编程、数据结构等高级主题,...

gitblog_06720的博客 294

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

golang学习笔记——基础01

golang学习笔记——基础01

mirana的专栏 4054

Go 语言学习路线来啦

时不时的有人问我一些关于 Go 语言学习路线、学习资源方面的问题,这篇文章就来详细说一说。借此希望给那些正在学习,或是想学习 Go 语言的朋友一些帮助。 需要说明的是,按照我推荐的来学习,完全掌握 Go 相关开发知识,并且找到 Go 开发的工作应该是问题不大的,当然具体能达到什么样的程度,得看个人了。 说明一下,文中提到的所有书籍,都可以在公众号【roseduan写字的地方】后台回复相应的关键字获取:【算法、操作系统、网络、数据库、Go、微服务】,按需自取。 1. 基础知识 无论你学习什么编程语言,这些基础

roseduan 的个人博客 2460

Go语言学习笔记(一)

Go语言学习整理 本文基于菜鸟教程,对于自己不明白的点加了点个人注解,对于已明确的点做了删除,可能结构不太清晰,看官们可移步Go语言教程 1 Go语言结构 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识...

暗焰之珩的博客 1万+

Go语言学习笔记-Go语言基础语法

对于全局变量,如果以大写字母开头,所有地方都可以访问,跨package访问时需要带上package名称;如果以小写字母开头,则本package内都可以访问。如果声明后未显式初始化,数值型初始化0,字符串初始化为空字符串,布尔型初始化为false,引用类型、函数、指针、接口初始化为nil。函数内部的局部变量,仅本函数内可以访问。内部声明的变量可以跟外部声明的变量有冲突,以内部的为准–就近原则。匿名变量不占命名空间,不会分配内存,因此可以重复使用。理论上名字里可以有汉字,甚至可以全是汉字,但实际中不要这么做。.

苦难带不走梦想 602

Go语言学习笔记:基础语法总结

# 基本配置 国内镜像配置 设置goproxy https://goproxy.cn/ go env -w GO111MODULE=on 建议打开 go get -v golang.org/x/tools/cmd/goimports 命令行生成.mod 文件 go mod init learngo #基本语法 ## 定义变量 package main import "fmt" func variableZeroValue(){ var a int var s string fmt.Pr

坚持硬核 952

【Go语言学习系列09】Go基础语法(七):指针

深入讲解Go语言指针的工作原理、安全特性与实战应用技巧,助你掌握这一既强大又安全的核心特性,提升代码性能与内存效率

GopherTribe的博客 1213

Go学习笔记:基础语法5

在Go语言中,关键字if是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号{}括起来的代码块,否则就忽略该代码块继续执行后续的代码。如果存在第二个分支,则可以在上面代码的基础上添加else关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个。else if 分支的数量是没有限制的,但是为了代码的可读性,还是不要在 if 后面加入太多的 else if 结构。

weixin_47113960的博客 899

【Go语言学习系列07】Go基础语法(五):映射

全面解析Go语言映射(Map)的设计理念、内部实现与高效使用技巧,掌握这一核心数据结构的查询性能优化与并发安全操作方法

GopherTribe的博客 1287

【Go】Go语言基础学习(Go安装配置、基础语法)

简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的软件生命周期工具;跨平台交叉编程,多平台编译;异步编程复杂性低,易维护,Go语言中Channel设计,异步程序写起来非常自然;语言层面支持并发,go关键字(协程)使得go的并发效率极高;严格的语法规范;Go的并发、性能、安全性、易于部署等特性,使它容易成为“云原生语言”。Go语言设计之初,确定了三大原则:简洁性、可读性、功能性。

m0_74824002的博客 2005
上一篇: Go语言学习笔记二--判断语言
下一篇: Go语言学习笔记四--数组与切片
cdzjava
博客等级 码龄10年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值