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)…...
二、Hadoop分布式系统基础架构
1、分布式 分布式体系中,会存在众多服务器,会造成混乱等情况。那如何让众多服务器一起工作,高效且不出现问题呢? 2、调度 (1)架构 在大数据体系中,分布式的调度主要有2类架构模式:…...
数据结构(超详细讲解!!)第二十一节 特殊矩阵的压缩存储
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 阐释一波密码,依然没有什么 发现,要不扫一下,或者看一看可不可以去爆破密码 就先扫了看看,发现robots.txt 访问看看,出现不允许被访问的目录 还是继续尝试访问看看 就可以下载源码,看看源码 <?php $fl…...
【手写数据库所需C语言基础】可变结构体,结构体成员计算,类型强制转换为统一类型,数据库中使用C语言方法和技巧
专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,…...
Android Studio(适配器Adapter)
认识适配器 在学完并且在做了一个自主项目后,我对适配器有了以下认识:1. 适配器的作用: 数据驱动的动态页面列表渲染,所以适配器主要就做了两件事:遍历数据,渲染页面(列表项)。比…...
携程AI布局:三重创新引领旅游行业智能化升级
2023年10月24日,携程全球合作伙伴峰会在新加坡召开,携程集团联合创始人、董事局主席梁建章做了名为《旅游业是独一无二的最好的行业》的演讲,梁建章在演讲中宣布了携程生成式 AI、内容榜单、ESG 低碳酒店标准三重创新的战略方向。这些创新将为…...
IOS手机耗电量测试
1. 耗电量原始测试方法 1.1 方法原理: 根据iPhone手机右上角的电池百分比变化来计算耗电量。 1.2实际操作: 在iOS通用设置中打开电池百分比数值显示,然后操作30分钟,60分钟,90分钟,看开始时和结束时电池…...
LeetCode.6 N字形变换
一开始想的是真的创建一个数组 去按照题目所给的要求填入数据 最后输出不为空的数组项 但是不仅时间复杂度高 而且错误频繁出现 最终也没有提交成功 查阅题解后发现数组并不重要 假设我们忽略掉数组中的那些空白项 最终输出的结果就是numRows行的字符串的拼接 string conver…...
第一章 03Java入门-编写第一个Java程序HelloWorld以及JVM、JDK和JRE概念
文章目录 前言一、下载和安装JDK二、第一个程序HelloWorld1.用记事本编写程序2.编译文件3.运行程序三、HelloWorld案例常见问题四、环境变量五、Notepad软件的安装和使用六、Java语言的发展七、Java为什么这么火八、JRE和JDK总结前言 上次我们学习了常见的CMD指令以及环境变量…...
windbg的常见调试命令
windbg的常见调试命令 1).break:在指定的条件下停止调试。 2).bt:显示调用堆栈信息。 3).catch:设置异常捕获,可以用来捕获程序中的异常并进行调试。 4).continue:继续执…...
VBA之正则表达式(44)-- 拆分商品和规格
实例需求:商品组清单保存在A列中,现需要将其拆分为商品名称,保存在从B列开始的后续单元格中,部分商品包含规格,并且多种规格属性使用了逗号分隔,因此无法直接使用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源代码中,rust/library/std/src/os/horizon/raw.rs这个文件的作用是为Rust的标准库提供与Horizon操作系统相关的原始…...
计算机视觉任务图像预处理之去除图像中的背景区域-------使用连通域分析算法(包含完整代码)
原理 通过连通域分析算法能够找到最大的连通域,即图片的主体部分,然后保存该连通域的最小外接矩阵,即可去除掉无关的背景区域 代码 使用连通域分析算法去除图像中的空白部分 并将图像变为统一大小的正方形 from skimage import measure imp…...
SurfaceFlinger的硬件Vsync深入分析-千里马android framework车机手机系统开发
背景: 学过或者你看过surfaceflinger相关文章同学都知道,vsync其实都是由surfaceflinger软件层面进行模拟的,但是软件模拟有可能会有误差或偏差,这个时候就需要有个硬件vsync帮忙校准。 故才会在surfaceflinger的systrace出现如下…...
力扣160. 相交链表
目录 1.解题思路2.代码实现 1.解题思路 首先分析,如果两个链表的长度不一,假设他们有交点,那么他们的最后一定是相同的,也即是后面为相同的部分,但前面不好说,而又因为长度不一又没法简便的一一对比&#…...
操作系统学习与思考
x86体系架构 x86是因特尔8086代芯片的CPU总线位数以及寄存器种类的规范,大部分操作系统都是以该规范作为基准来生产的 计算机组成 CPU,可以根据程序计数器进行取指令操作,并根据指令执行运算(加、减、乘、除)。运算所…...
STM32智能旅行箱开发:防盗报警与语音交互实现
1. 项目概述这个基于STM32的多功能智能旅行箱项目,是我去年花了三个月时间从零开始设计实现的。作为一名嵌入式开发工程师,我经常需要出差,传统行李箱在机场、酒店等场景下的不便让我萌生了开发智能行李箱的想法。这个项目最大的特点是将多种…...
MATLAB代码:考虑绿证交易与综合需求响应的综合能源系统优化调度“注意:引号内文字为返回的标题
MATLAB代码:计及绿证交易和综合需求响应的综合能源系统优化调度 关键词:绿证交易 综合需求响应 综合能源系统 优化调度 仿真平台: matlabyalmipcplex 主要内容:代码针对综合能源系统低碳运行和源荷互动,考虑可再生能源电力消纳责…...
Phi-3-mini-4k-instruct本地部署实战:Ollama让AI推理像聊天一样简单
Phi-3-mini-4k-instruct本地部署实战:Ollama让AI推理像聊天一样简单 1. 模型简介 Phi-3-Mini-4K-Instruct是微软推出的轻量级开源语言模型,仅有38亿参数却展现出惊人的推理能力。这个模型特别适合在本地设备上运行,不需要昂贵的GPU就能获得…...
3步解锁百度网盘SVIP特权:macOS用户必备的高速下载解决方案
3步解锁百度网盘SVIP特权:macOS用户必备的高速下载解决方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac客户端的龟速…...
Qwen3-14B私有部署镜像:Android Studio移动端AI应用原型开发
Qwen3-14B私有部署镜像:Android Studio移动端AI应用原型开发 1. 移动端AI应用开发新选择 最近在开发一个需要集成大语言模型的Android应用时,发现很多开发者都在寻找既强大又容易集成的AI解决方案。Qwen3-14B作为一款性能优异的中文大模型,…...
前后端分离网站系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着互联网技术的快速发展,传统的前后端耦合架构在开发效率和维护成本上逐渐显现出局限性,前后端分离架构因其灵活性、可扩…...
港大新作GS-SDF开源了!手把手教你用激光雷达+3DGS复现IROS2025论文效果(附避坑指南)
港大GS-SDF开源项目实战:从环境配置到效果复现全指南 当激光雷达遇上3D高斯溅射,会碰撞出怎样的火花?港大MARS实验室最新开源的GS-SDF项目给出了令人惊艳的答案。这个将LiDAR点云与神经符号距离场(SDF)相结合的创新方…...
阿里开源万物识别镜像实战:3步完成图片识别环境配置与调用
阿里开源万物识别镜像实战:3步完成图片识别环境配置与调用 1. 引言:让图片识别变得简单 想象一下,你刚拍了一张照片,里面有各种物品:手机、水杯、笔记本电脑、宠物狗...如果有一个工具能自动识别出照片里的所有物体&…...
【Butterfly库OpenHarmony实战使用教程】|NAPI封装+Native C API调用+真机运行
🚀Butterfly库OpenHarmony实战使用教程|NAPI封装Native C API调用真机运行 大家好,我是InMainJhy,一名在上海读本科的大一学生🎒。本篇严格按照鸿蒙三方库征文要求创作,基于NAPI封装Native C API࿰…...
基于Simulink的Smith预估器PID整定与延迟系统控制实验
1. 从零开始理解Smith预估控制 第一次接触Smith预估器时,我也被这个"时间旅行"般的概念惊艳到了。想象一下,你正在用热水器洗澡,每次调节水温都要等10秒才能感受到变化——这就是典型的纯延迟系统。Smith预估器的精妙之处在于&…...
