当前位置: 首页 > news >正文

Go基础(待更新)

Go基础(待更新)

参考Go 语言教程

文章目录

  • Go基础(待更新)
      • 一、基本语法
        • 1、格式化输出
        • 2、声明并赋值
          • 1)单变量赋值
          • 2)多变量赋值
      • 二、math工具包的使用
      • 三、函数
        • 1、参数传递
          • 1)普通传递
          • 2)指针传递
      • 四、类型转换
      • 五、面向对象
        • 1、结构体
        • 2、封装
        • 3、继承
        • 4、多态
      • 六、集合
        • 1、List
          • 1)遍历list中的对象

一、基本语法

1、格式化输出

参考

  • go语言中的输出语句
  • Go语言 - fmt包 | 输出 | 占位符

格式化输出:printf("%v mod %v = %v",a,b,c)

package mainimport "fmt"func main(){fmt.Print("My weight on the surface of Mars is ")fmt.Print(149.0 * 0.3783)fmt.Print(" lbs, and I would be ")fmt.Print(41 * 365 / 687)fmt.Print(" years old.")fmt.Println()fmt.Println("My weight on the surface of Mars is", 149.0 * 0.3783, "lbs, and I would be", 41 * 365.2425/687, "years old.")// 格式化打印fmt.Println("------------------------------------格式化打印--------------------------------")fmt.Printf("My weight on the surface of Mars is %v lbs,", 149.0 * 0.3783)fmt.Printf(" and I would be %v years old.\n", 41 * 365 / 687)fmt.Printf("My weight on the surface of %v is %v lbs.\n", "Earth", 149.0)fmt.Println("-------------使用Printf对齐文本-----------")fmt.Printf("%-15v $%4v\n", "SpaceX", 94)fmt.Printf("%-15v $%4v\n", "Virgin Galactic", 100)}
// Print、Println函数可以传递若干个参数,参数之间可以用逗号隔开
// 参数可以是字符串、数字、数学表达式等
// 格式化打印:可以使用Printf来控制打印的输出结果,与Print和Println不同,Printf的第一个参数必须是字符串。// 这个字符串中包含了像%v这样的格式化动词,它的值由第二个参数的值所代替。// 如果指定了多个格式化动词,那么它们的值由后面的参数值按顺序进行替换。// 使用Printf对齐文本// 在格式化动词中指定宽度,就可以对齐文本。例如:%4v就是向左填充足够4个宽度// 正数:向左填充空格// 负数:向右填充空格
---
My weight on the surface of Mars is 56.3667 lbs, and I would be 21 years old.
My weight on the surface of Mars is 56.3667 lbs, and I would be 21.79758733624454 years old.
------------------------------------格式化打印--------------------------------
My weight on the surface of Mars is 56.3667 lbs, and I would be 21 years old.
My weight on the surface of Earth is 149 lbs.
-------------使用Printf对齐文本-----------
SpaceX          $  94
Virgin Galactic $ 100
2、声明并赋值

参考go语言的变量声明并赋值运算符(:=)

1)单变量赋值

eg1: 第8行声明并赋值变量a失败,因为变量a已经在第6行声明过了。

$ cat main.c
package mainimport "fmt"func main() {var a int = 100fmt.Printf("&a=%p\n", &a);a := 100  //报错fmt.Printf("&a=%p\n", &a);
}$ go build && main
# main
./main.go:8: no new variables on left side of :=

eg2: 虽然在第5行有声明了一个全局变量a,在第9行依然可以声明并赋值变量a,此时的a和全部变量a不是一个变量,打出来的地址不相同。

$ cat main.c
package mainimport "fmt"var a int = 100func main() {fmt.Printf("&a=%p\n", &a);a := 100 fmt.Printf("&a=%p\n", &a);
}$ go build && main
&a=0x4f8018
&a=0xc42000e268
2)多变量赋值

eg3: 第10行已经声明了变量a,**第12行就不在重新定义变量a,只定义了变量b;**可以看到两个a打印出来的是同一个。

$ cat main.c
package mainimport "fmt"func foo() (int, int) {return 100, 200
}func main() {var a int = 0;fmt.Printf("&a=%p\n", &a);a, b := foo()fmt.Printf("&a=%p, &b=%p\n", &a, &b);
}$ go build && main
&a=0xc42000e260
&a=0xc42000e260, &b=0xc42000e280

二、math工具包的使用

参考go语言基础 数学包 math

package mainimport ("fmt""math"
)func main() {/*math包:*/i := -100fmt.Println(math.Abs(float64(i))) //绝对值fmt.Println(math.Ceil(5.0))       //向上取整fmt.Println(math.Floor(5.8))      //向下取整fmt.Println(math.Mod(11, 3))      //取余数,同11%3fmt.Println(math.Modf(5.26))      //取整数,取小数fmt.Println(math.Pow(3, 2))       //x的y次方fmt.Println(math.Pow10(4))        // 10的n次方fmt.Println(math.Sqrt(8))         //开平方fmt.Println(math.Cbrt(8))         //开立方fmt.Println(math.Pi)
}

三、函数

参考

  • Go 语言函数

  • go语言:函数参数传递详解

1、参数传递
1)普通传递

eg1:

package main
import ("fmt"
)
func swap(a int, b int) {var temp inttemp = aa = bb = temp
}
func main() {x := 5y := 10swap(x, y)fmt.Print(x, y)
}
---
输出结果:5 10

eg2:

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {/* 声明局部变量 */var result intif (num1 > num2) {result = num1} else {result = num2}return result
}
2)指针传递

函数的变量不仅可以使用普通变量,还可以使用指针变量

package main
import ("fmt"
)
func swap(a *int, b *int) {var temp inttemp = *a*a = *b*b = temp
}
func main() {x := 5y := 10swap(&x, &y)fmt.Print(x, y)
}
---
输出结果:10 5

四、类型转换

参考Go 语言类型转换

go 不支持隐式转换类型(!!!),比如 :

package main
import "fmt"func main() {  var a int64 = 3var b int32b = afmt.Printf("b 为 : %d", b)
}
此时会报错cannot use a (type int64) as type int32 in assignment
cannot use b (type int32) as type string in argument to fmt.Printf

但是如果改成 b = int32(a) 就不会报错了:

package main
import "fmt"func main() {  var a int64 = 3var b int32b = int32(a)fmt.Printf("b 为 : %d", b)
}

五、面向对象

参考Go语言没有类怎么面向对象

1、结构体

https://www.runoob.com/go/go-structures.html

package mainimport "fmt"type Books struct {title stringauthor stringsubject stringbook_id int
}func main() {// 创建一个新的结构体fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407})// 也可以使用 key => value 格式fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})// 忽略的字段为 0 或 空fmt.Println(Books{title: "Go 语言", author: "www.runoob.com"})
}
2、封装
type Employee struct {Name stringSex  stringAge  int
}func (e *Employee) ToString() string {return "name=" + e.Name + ";sex=" + e.Sex + ";age=" + strconv.Itoa(e.Age)
}
3、继承

Go里面也没有像Java中类似extend继承的语法,Go是用了类似Java里组合的东西来让语法看起来像继承:

type TechEmployee struct {EmployeeSalaryPerMonth float32
}type SaleEmployee struct {EmployeeBaseSalary float32ExtraRate  float32
}

对应的实例化和使用:

//实例化时,是传了个employee
tech := object.TechEmployee{Employee:       object.Employee{Name: "lee"},SalaryPerMonth: 10000,
}
//这里看起来像拥有了Employee的name属性,可以设置和访问
tech.Name = "bruce lee"
fmt.Println(tech.Name)
4、多态
type TechEmployee struct {EmployeeSalaryPerMonth float32
}func (e *TechEmployee) CalcSalary() float32 {return e.SalaryPerMonth
}type Machine struct {}func (e *Machine) CalcSalary() float32 {return 0
}

在Java里比较直观,语法里直接写着实现xxx接口,Go相比的话,没那么直观,但更灵活,它没有指定实现哪个接口,而是如果定义了一个相同名字和返回值的方法,就认为是实现了对应拥有这个方法的接口,这里假如接口有两个方法,对应也必须要两个方法都有定义了,才认为是实现了接口。

六、集合

1、List

参考Go标准容器之List

package mainimport ("container/list""fmt"
)func main() {nums := list.New()nums.PushBack(1)nums.PushBack(2)nums.PushBack(3)for e := nums.Front(); e != nil; e = e.Next() {fmt.Println(e.Value)}
}
1)遍历list中的对象

参考关于go语言集合中Element转换为自定义结构体的方法

Element中Value存放的是接口,所以只要将接口转换为结构体问题就都解决了,其中conn为返回的结构体,而OK是布尔型表示有没有转换成功,true为成功。

conn , ok := (i.value).(net.Conn)

eg:

for e := testCases.Front(); e != nil; e = e.Next() {fmt.Printf("#################### testcase%v ##################\n",i)t := (e.Value).(testCase)A_w,A_j,B_w,B_j,L,bearing := t.A_w,t.A_j,t.B_w,t.B_j,t.L,t.bearing
}

相关文章:

Go基础(待更新)

Go基础(待更新) 参考Go 语言教程 文章目录 Go基础(待更新)一、基本语法1、格式化输出2、声明并赋值1)单变量赋值2)多变量赋值 二、math工具包的使用三、函数1、参数传递1)普通传递2&#xff09…...

二、Hadoop分布式系统基础架构

1、分布式 分布式体系中,会存在众多服务器,会造成混乱等情况。那如何让众多服务器一起工作,高效且不出现问题呢? 2、调度 (1)架构 在大数据体系中,分布式的调度主要有2类架构模式&#xff1a…...

数据结构(超详细讲解!!)第二十一节 特殊矩阵的压缩存储

1.压缩存储的目标 值相同的元素只存储一次 压缩掉对零元的存储,只存储非零元 特殊形状矩阵: 是指非零元(如值相同的元素)或零元素分布具有一定规律性的矩阵。 如: 对称矩阵 上三角矩阵 下三角矩阵 对角矩阵 准…...

Python最强自动化神器Playwright!再也不用为爬虫逆向担忧了!

版权说明:本文禁止抄袭、转载,侵权必究! 目录 一、简介+使用场景二、环境部署(准备)三、代码生成器(优势)四、元素定位器(核心)五、追踪查看器(辅助)六、权限控制与认证(高级)七、其他重要功能(进阶)八、作者Info一、简介+使用场景 Playwright是什么?来自Chat…...

为什么 conda 不能升级 python 到 3.12

为什么 conda 不能升级 python 到 3.12 2023-11-05 23:33:29 ChrisZZ 1. 目的 弄清楚为什么执行了如下升级命令后, python 版本还是 3.11? conda update conda conda update python2. 原因 因为 conda forge 没有完成 migration Migration is the …...

0X02

web9 阐释一波密码&#xff0c;依然没有什么 发现&#xff0c;要不扫一下&#xff0c;或者看一看可不可以去爆破密码 就先扫了看看&#xff0c;发现robots.txt 访问看看,出现不允许被访问的目录 还是继续尝试访问看看 就可以下载源码&#xff0c;看看源码 <?php $fl…...

【手写数据库所需C语言基础】可变结构体,结构体成员计算,类型强制转换为统一类型,数据库中使用C语言方法和技巧

​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更新&#xff0c;…...

Android Studio(适配器Adapter)

认识适配器 在学完并且在做了一个自主项目后&#xff0c;我对适配器有了以下认识&#xff1a;1. 适配器的作用&#xff1a; 数据驱动的动态页面列表渲染&#xff0c;所以适配器主要就做了两件事&#xff1a;遍历数据&#xff0c;渲染页面&#xff08;列表项&#xff09;。比…...

携程AI布局:三重创新引领旅游行业智能化升级

2023年10月24日&#xff0c;携程全球合作伙伴峰会在新加坡召开&#xff0c;携程集团联合创始人、董事局主席梁建章做了名为《旅游业是独一无二的最好的行业》的演讲&#xff0c;梁建章在演讲中宣布了携程生成式 AI、内容榜单、ESG 低碳酒店标准三重创新的战略方向。这些创新将为…...

IOS手机耗电量测试

1. 耗电量原始测试方法 1.1 方法原理&#xff1a; 根据iPhone手机右上角的电池百分比变化来计算耗电量。 1.2实际操作&#xff1a; 在iOS通用设置中打开电池百分比数值显示&#xff0c;然后操作30分钟&#xff0c;60分钟&#xff0c;90分钟&#xff0c;看开始时和结束时电池…...

LeetCode.6 N字形变换

一开始想的是真的创建一个数组 去按照题目所给的要求填入数据 最后输出不为空的数组项 但是不仅时间复杂度高 而且错误频繁出现 最终也没有提交成功 查阅题解后发现数组并不重要 假设我们忽略掉数组中的那些空白项 最终输出的结果就是numRows行的字符串的拼接 string conver…...

BlockingQueue实现简易消息队列处理器 可分区顺序消费

...

第一章 03Java入门-编写第一个Java程序HelloWorld以及JVM、JDK和JRE概念

文章目录 前言一、下载和安装JDK二、第一个程序HelloWorld1.用记事本编写程序2.编译文件3.运行程序三、HelloWorld案例常见问题四、环境变量五、Notepad软件的安装和使用六、Java语言的发展七、Java为什么这么火八、JRE和JDK总结前言 上次我们学习了常见的CMD指令以及环境变量…...

windbg的常见调试命令

windbg的常见调试命令 1&#xff09;.break&#xff1a;在指定的条件下停止调试。 2&#xff09;.bt&#xff1a;显示调用堆栈信息。 3&#xff09;.catch&#xff1a;设置异常捕获&#xff0c;可以用来捕获程序中的异常并进行调试。 4&#xff09;.continue&#xff1a;继续执…...

VBA之正则表达式(44)-- 拆分商品和规格

实例需求&#xff1a;商品组清单保存在A列中&#xff0c;现需要将其拆分为商品名称&#xff0c;保存在从B列开始的后续单元格中&#xff0c;部分商品包含规格&#xff0c;并且多种规格属性使用了逗号分隔&#xff0c;因此无法直接使用Excel分列功能完成数据拆分。 示例代码如下…...

听GPT 讲Rust源代码--library/std(13)

题图来自 Decoding Rust: Everything You Need to Know About the Programming Language[1] File: rust/library/std/src/os/horizon/raw.rs 在Rust源代码中&#xff0c;rust/library/std/src/os/horizon/raw.rs这个文件的作用是为Rust的标准库提供与Horizon操作系统相关的原始…...

计算机视觉任务图像预处理之去除图像中的背景区域-------使用连通域分析算法(包含完整代码)

原理 通过连通域分析算法能够找到最大的连通域&#xff0c;即图片的主体部分&#xff0c;然后保存该连通域的最小外接矩阵&#xff0c;即可去除掉无关的背景区域 代码 使用连通域分析算法去除图像中的空白部分 并将图像变为统一大小的正方形 from skimage import measure imp…...

SurfaceFlinger的硬件Vsync深入分析-千里马android framework车机手机系统开发

背景&#xff1a; 学过或者你看过surfaceflinger相关文章同学都知道&#xff0c;vsync其实都是由surfaceflinger软件层面进行模拟的&#xff0c;但是软件模拟有可能会有误差或偏差&#xff0c;这个时候就需要有个硬件vsync帮忙校准。 故才会在surfaceflinger的systrace出现如下…...

力扣160. 相交链表

目录 1.解题思路2.代码实现 1.解题思路 首先分析&#xff0c;如果两个链表的长度不一&#xff0c;假设他们有交点&#xff0c;那么他们的最后一定是相同的&#xff0c;也即是后面为相同的部分&#xff0c;但前面不好说&#xff0c;而又因为长度不一又没法简便的一一对比&#…...

操作系统学习与思考

x86体系架构 x86是因特尔8086代芯片的CPU总线位数以及寄存器种类的规范&#xff0c;大部分操作系统都是以该规范作为基准来生产的 计算机组成 CPU&#xff0c;可以根据程序计数器进行取指令操作&#xff0c;并根据指令执行运算&#xff08;加、减、乘、除&#xff09;。运算所…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...