Golang基础学习

​​​​​​​​​​在这里插入图片描述

初见golang语法

go项目路径

cd $GOPATH
//ls可以看到有bin,pkg,src三个文件
cd src/
mkdir GolangStudy
cd GolangStudy
mkdir firstGolang

go程序执行:

go run hello.go//如果想分两步执行:
go build hello.go
./hello

导入包的方式

import "fmt"import {"fmt""time"
}

常见的四种变量声明方式和多变量的声明

var v_name v_type
v_name = value
package mainimport "fmt"
//方法1,2,3声明全局变量
var gA int = 100
var gB = 200
用方法4声明全局变量
//gC := 200  :=只能够在函数体内声明
func main() {
//方法一:声明一个变量,默认的值是0;var a int     //var 变量名 变量类型fmt.Printf(" = %d\n", a)fmt.printf("type of b = %T\n", a)
//方法二:声明一个变量,初始化一个值var a int  = 100   //var 变量名 变量类型fmt.Printf(" = %d\n", a)
//方法三:在初始化的时候,可以省去数据类型,通过值自动匹配当前的变量的数据类型。var c = 100fmt.println("c =", c)
//方法四:常用,省去var,直接自动匹配e := 100;fmt.printf("e = %s, type of e = %T\n", e, e)g := 3.14;fmt.printf("g = %s, type of g = %T\n", g, g)
//声明全局变量时,方法4和其他三个有区别;fmt.println("gA = ",gA,", gB = " ,gB)
// 声明多个变量 var xx,yy int = 100,200fmt.println("xx = ",xx,", yy = " ,yy)var kk,ll = 100,"acelf"fmt.println("ll = ",ll,", kk = " ,kk)var(vv int = 100jj bool = true)//多行多变量声明
}

$go run test.go
a = 0

printf——支持各种格式化动词%s,%d,%f,需要手动换行
println——会在每个参数之间添加空格,末尾自动换行.

Const和iota知识点

const语法
const length int = 10

package main
import "fmt"
//CONST 定义枚举类型
const(
//可以在const()添加关键字iota,每行iota都会累加1,第一行iota的默认值为0;
BEIJING = 0
SHANGHAI = 1
SHENZHEN = 2
)
const(
BEIJING = iota
SHANGHAI 
SHENZHEN 
)
//iota只能够配合const()一起使用,iota只有在const进行累加效果 

Golang函数的三种返回值

func foo1(a string, b int) int{
}
//返回多个函数值,匿名的
func foo2(a string, b int) (int, int) {return 666,777
}
//返回多个返回值,有形参名称的
func foo3(a string, b int)(r1 int, r2 int) {fmt.println("c=", c)fmt.println("a=", a)fmt.println("b=", b)r1 =1000r2 =1000return
}func foo4(a string, b int)(r1, r2 int) {fmt.println("c=", c)fmt.println("a=", a)fmt.println("b=", b)r1 =1000r2 =1000return
}

init函数和import导包

包中函数首字母大写表示对外开放的函数,如果为小写则说明只能在包内执行

import 匿名及别名导包方式

_ 给包起别名,匿名,无法使用当前包方法,但会执行当前包中的init函数
aa "fmt"给fmt起别名,可以通过aa直接调用
. "fmt" 将当前fmt包中的全部方法导入到本包中

package main
import (_ "Golangstudy/5-init/lib1" //这样的话导入lib1包即使不用也不会报错mylib2 "Golangstudy/5-init/lib2"//给lib2起别名. "Golangstudy/5-init/lib2"//直接把lib2导入当前包,可直接调用Lib2Test
)
func main() {mylib2.Lib2Test
}

golang中的指针速通

defer语句调用顺序

主要用于表示一个函数在执行最后,触发之前调用的一种机制;

func deferFunc() int{
}
func returnAndDefer() int{...defer deferFunc()
}

多个defer压栈执行,出栈和入栈顺序相反;
defer和return 谁先谁后:return比defer先被调用

golang中数组和动态数组的区别(切片slice)

package main
import "fmt"
func main() {
//固定长度数组,在传参时值传递var myArray1 [10] intmyArray2 := [10]int{1,2,3,4}for i:=0;i<len(myArray1);i++{fmt.Println(myArray1[i])}for index,value := range myArray2{fmt.Println("index = ",index,"value = ", value)}
}
package main
import "fmt"
func printArray(myArray []int) {
//引用传递
//_表示匿名的变量for _,value := range myArray {fmt.Println("value = ", value)}
}
func main() {myArray := []int{1,2,3,4}  //动态数组,切片slicefmt.Println("myArray type is %T\n",myArray)printArray(myArray);
}

slice切片的四种声明方式

package main
func main() {//声明slice1是一个切片,并且初始化,默认值是1,2,3slice := []int{1,2,3}//声明slice是一个切片,但没有分配空间var slice1 []intslice1 = make([]int, 3)//开辟三个空间//声明slice是一个切片,同时分配空间var slice1 []int = make([] int, 3) //声明slice是一个切片,同时分配空间,通过:=推导出slice是一个切片slice1 := make([]int,3)//判断slice是否为空if slice1 == nil{fmt.Println("slice1是一个空切片")} else {fmt.Println("slice1是有空间的")}
}

14.slice切片追加与截取

在这里插入图片描述

package main
func main() {var slice1 []int = make([] int, 3) //向numbers切片追加一个元素,numbers len = 1, [0001],cap = 5numbers = append(numbers,1)fmt.printf("len = %d,cap = %d,alice = %v\n",len(numbers),cap(numbers),numbers)
} 

如果增加的元素超过现有容量,那么底层会自动增加容量,现有cap = 原有cap+cap ;
如果初始定义时没有用到cap,那么cap默认大小为初始化len 的大小

package main
func main() {s := []int{1,2,3}//表示取出[0,2)的元素s1 := s[0:2]//s和s1指向同一片空间s1[0] = 100fmt.println(s)fmt.println(s1)//copy可以将底层数组的slice一起进行拷贝(深拷贝)s2 := make([]int, 3)copy(s2,s)} 

15 map的三种声明方式

package main
import fmt
func main(){
//1.声明myMap是一种map类型,key是string,value也是stringvar myMap1 map[string]stringif myMap1 == nil{fmt.println("myMap1是一个空map")}
//2.在使用map前,需要先用make给map分配数据空间myMap1 = make(map[string]string,10)myMap1["one"] = "java"
//3myMap2 := make(map[int]string)myMap2[1] = "java"fmt.Println(myMap2)
//4声明的同时进行初始化myMap3 := map[string]string{"one" : "php""two" : "c++"}
//4. 	
}

16 map的使用方式

package main
func main(){
func printMap(cityMap map[string]string){
//cityMap是一个引用传递for key,value := range cityMap{fmt.Prontln("key = ", key)fmt.Prontln("value= ", value)}
}
//增删改查cityMap := make(map[string]string)cityMap["china"] = "Beijing"cityMap["Japan"] = "Tokyo"delete(cityMap,"China")cityMap["Japan"] = "DC"for key,value := range cityMap{fmt.Prontln("key = ", key)fmt.Prontln("value= ", value)}printMap(cityMap)
}

17.struct基本定义与使用

type Book struct {title stringauth string
}
//作为函数传参
func changBook(book Book){//传递book的副本book.auth = "666"
}
//使用
var book1 Book
book1.title = "Golang"
book1.auth="zhangsan"
fmt.printf("%v\n",book1)//%v表示打印任何一种类型

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…

电路图识图基础知识-远程/本地启停电动机(二十一)

在实际的生产中&#xff0c;经常会需要电动机的控制可以就地控制和远方控制&#xff0c;在集中的控制室中&#xff0c;远 方控制电动机的启动、停止。在就地设置启动、停止按钮或是紧急停车按钮&#xff0c;以满足生产的需要。 1.远程、多点及连锁控制电动机电路 2.元器件配置…

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…

Vue.js教学第二十一章:vue实战项目二,个人博客搭建

基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…

如何在Spring Boot中使用注解动态切换实现

还在用冗长的if-else或switch语句管理多个服务实现? 相信不少Spring Boot开发者都遇到过这样的场景:需要根据不同条件动态选择不同的服务实现。 如果告诉你可以完全摆脱条件判断,让Spring自动选择合适的实现——只需要一个注解,你是否感兴趣? 本文将详细介绍这种优雅的…

开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例

在工业自动化控制系统中&#xff0c;常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中&#xff0c;客户现场采用了 罗克韦尔PLC&#xff0c;但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控&#xff0c;引入了开疆智能Etherne…

Neovim - LSP 底层原理,难点配置(二)

Neovim LSP 的工作原理 基本概念 LSP(Language Server Protocol)可以理解成是一个"语言助手"。每种编程语言都有自己的"语言助手"(比如 TypeScript 的 tsserver),这些助手能告诉你: 哪写错了(语法错误)哪能跳转(方法定义,引用)哪可以补全(自…

UNECE R152——解读自动驾驶相关标准法规(AEB)

Uniform provisions concerning the approval of motor vehicles with regard to the Advanced Emergency Braking System (AEBS) for M1 and N1 vehicles(2021) 原文链接&#xff1a;https://unece.org/sites/default/files/2024-03/R152r1am1e%20%282%29.pdf 核心内容解析 …

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…

在 Docker 容器中使用宿主机的 GPU

在 Docker 容器中使用宿主机的 GPU&#xff08;特别是 NVIDIA GPU&#xff09;需要安装 NVIDIA Container Toolkit&#xff08;之前称为 nvidia-docker&#xff09;。以下是详细的配置步骤&#xff1a; 1. 宿主机环境准备 确保宿主机已正确安装&#xff1a; NVIDIA 显卡驱动&a…

Vue3学习(接口,泛型,自定义类型,v-for,props)

一&#xff0c;前言 继续学习 二&#xff0c;TS接口泛型自定义类型 1.接口 TypeScript 接口&#xff08;Interface&#xff09;是一种定义对象形状的强大工具&#xff0c;它可以描述对象必须包含的属性、方法和它们的类型。接口不会被编译成 JavaScript 代码&#xff0c;仅…

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …

Java八股文——Redis篇

目录 1. 缓存穿透解决方案1. 缓存空值2. 布隆过滤器&#xff08;Bloom Filter&#xff09;3. 参数校验4. 接口限流与验证码 2. 缓存击穿解决方案1. 设置热点数据永不过期&#xff08;或很长过期时间&#xff09;2. 使用互斥锁&#xff08;如分布式锁&#xff09;3. 利用异步更新…

旋量理论:刚体运动的几何描述与机器人应用

旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比&#xff0c;旋量理论通过螺旋运动的概念统一了旋转和平移&#xff0c;在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观&#xff0c;而且计算…

Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪

Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪 自己研一期间的小论文大致上的结构和内容基本上已经完成&#xff0c;到了最后在测试集上测试数据的阶段&#xff0c;在跑测试集的时间上就去看一些25年和多目标跟踪的领域相关的一些内…

MyBatis中foreach集合用法详解

在 MyBatis 中&#xff0c;<foreach> 标签用于遍历集合&#xff08;Collection、List、Array、Map&#xff09;&#xff0c;常用于构建动态 SQL 语句&#xff08;如 IN 查询、批量插入等&#xff09;。以下是详细用法和示例&#xff1a; 核心属性 属性描述collection必填…

今日学习:ES8语法 | Spring整合ES | ES场景八股

文章目录 ES81 ES架构2 ES适用场景3 ES使用3.1对比mysql3.2 索引(Index)3.3 类型(Type)3.4 文档(Document)3.5 字段(Field)3.6 映射(Mapping) 4 ElasticSearch 基础功能4.1 分词器4.2 索引操作4.2.1 创建索引4.2.2 查看所有索引4.2.3 查看单个索引4.2.4 删除索引 4.3 文档操作4…