Golang学习笔记20240725,Go语言基础语法

第一个Go程序

package mainimport "fmt"func main() {fmt.Println("hello world")
}

运行方式1:

go run main.go

运行方式2:

go build
.\hello_go.exe

在这里插入图片描述

运行方式3:goland右键运行
在这里插入图片描述

字符串拼接

使用加号可以对字符串进行拼接。

package mainimport "fmt"func main() {fmt.Println("hello world" + "你好世界")
}

变量的声明和初始化

package mainimport "fmt"func main() {var a, b, c inta = 11b = 22c = 333fmt.Println(a)fmt.Println(b)fmt.Println(c)
}

简短的声明

上面的变量定义和初始化有更简单的方式,如下:

package mainimport "fmt"func main() {a := 11b := 22c := 333fmt.Println(a)fmt.Println(b)fmt.Println(c)
}

格式化输出

使用%d可以在字符串中格式化输入整数类型,如下:

package mainimport "fmt"func main() {a := 11b := 22c := 333fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
}

if语句

if语句主要有三种格式,如下:

package mainimport "fmt"func main() {a := 33// 单分支if a > 0 {fmt.Println(a)}// 双分支if a < 0 {fmt.Println(a)} else {fmt.Println(a + a)}// 多分支if a > 100 {fmt.Println(a)} else if a > 0 {fmt.Println(a + a)} else {fmt.Println(a + a + a)}
}

for循环

累加求和:

package mainimport "fmt"func main() {sum := 0for i := 0; i < 101; i++ {sum += i}fmt.Println(sum)
}

双重for循环打印九九乘法表

package mainimport "fmt"func main() {for i := 1; i < 10; i++ {for j := 1; j <= i; j++ {fmt.Printf("%d * %d = %d\t", j, i, i*j)}fmt.Println()}
}

for遍历数组

package mainimport "fmt"func main() {arr := []int{11, 22, 33}for k, v := range arr {fmt.Println(k, v)}
}

for 遍历字符串

package mainimport "fmt"func main() {arr := "abc"for k, v := range arr {fmt.Println(k, v)}
}

for遍历字典

package mainimport "fmt"func main() {arr := map[string]int{"one": 1, "two": 2, "three": 3}for k, v := range arr {fmt.Println(k, v)}
}

for 遍历管道

package mainimport "fmt"func main() {c := make(chan int)go func() {c <- 33c <- 333c <- 333333close(c)}()for v := range c {fmt.Println(v)}
}

匿名变量

如果我们在遍历的时候,不想要key或者value,也可以用下划线替代,下划线叫做匿名变量。

package mainimport "fmt"func main() {c := []int{1, 2, 3}for _, v := range c {fmt.Println(v)}
}

switch 语句

go语言里面的switch语句每个case天生就是独立的,不需要加break。

package mainfunc main() {s := "python"switch s {case "python":print("1")case "go":print("2")case "java":print("3")default:print("4")}
}

switch 可以一个分支捕获多个值

这个是go语言的特点,很少在其他语言看见,我们来看例子:

package mainfunc main() {s := "python"switch s {case "python", "go", "java":print("1")default:print("4")}
}

switch的分支可以捕获条件判断

这个也是go语言的特点,我们来看例子:

package mainfunc main() {s := 33switch {case s > 0 || s < 100:print("1")default:print("4")}
}

字符串可以通过索引访问字符

package mainfunc main() {s := "abcde"print(s[0])
}

字符串可以通过切片访问连续字符

package mainfunc main() {s := "abcde"print(s[0:3])
}

统计字符串的个数要用特殊的方法

package mainimport "unicode/utf8"func main() {s := "abcde"print(utf8.RuneCountInString(s))
}

将字符编码转换为字符

package mainfunc main() {s := "abcde"print(string(s[1]))
}

遍历字符串的每一个字符

package mainimport "fmt"func main() {s := "我 爱 你 中 国"cs := []rune(s)for _, ch := range cs {fmt.Println(string(ch))}
}

使用buffer累加字符串

package mainimport ("bytes""fmt"
)func main() {var bf bytes.Bufferfor i := 0; i < 10; i++ {fmt.Fprintf(&bf, "a%d ", i)}s := bf.String()fmt.Println(s)
}

通过指针修改变量的值

指针可以直接对内存地址进行操作。使用*表示指针,使用&取地址。

package mainimport "fmt"func main() {a := 33pa := &a*pa = 333fmt.Println(a)fmt.Println(*pa)
}

使用指针交换两个变量的值

package mainimport "fmt"func swap(a, b *int) {*a, *b = *b, *a
}func main() {a, b := 33, 11fmt.Println(a, b)swap(&a, &b)fmt.Println(a, b)
}

数组的基本使用

package mainimport "fmt"func main() {// 声明var arr [8]int// 赋值for i := 0; i < 8; i++ {arr[i] = i * 33}// 遍历for i := 0; i < 8; i++ {fmt.Println(arr[i])}
}

结构体的基本用法

package mainimport "fmt"type User struct {Name stringAge  int
}func main() {zs := User{"zs", 20}ls := User{Name: "ls", Age: 20}fmt.Println(zs, ls)
}

结构体作为函数参数

package mainimport "fmt"type User struct {Name stringAge  int
}func printUser(u User) {fmt.Printf("姓名:%s 年龄:%d \n", u.Name, u.Age)
}func main() {zs := User{"zs", 20}ls := User{Name: "ls", Age: 20}printUser(zs)printUser(ls)
}

结构体指针作为函数参数

package mainimport "fmt"type User struct {Name stringAge  int
}func printUser(u *User) {fmt.Printf("姓名:%s 年龄:%d \n", u.Name, u.Age)
}func main() {zs := User{"zs", 20}ls := User{Name: "ls", Age: 20}printUser(&zs)printUser(&ls)
}

切片的增删改查

切片在go语言里面非常常用,因为其有动态扩展的特性。

package mainimport "fmt"func main() {var arr []int// 增加arr = append(arr, 11)arr = append(arr, 22)arr = append(arr, 33)// 删除 索引1index := 1arr = append(arr[:index], arr[index+1:]...)// 修改arr[0] = 888// 遍历for _, v := range arr {fmt.Println(v)}
}

map的增删改查

package mainimport "fmt"func main() {var m = make(map[string]int)// 增加m["a"] = 11m["b"] = 12m["c"] = 13// 删除delete(m, "a")// 修改m["c"] = 888// 遍历for k, v := range m {fmt.Println(k, v)}
}

加法函数

package mainimport "fmt"func add(a, b int) int {return a + b
}func main() {fmt.Println(add(1, 2))
}

函数的可变参数

package mainimport "fmt"func add(arr ...int) int {sum := 0for i := 0; i < len(arr); i++ {sum += arr[i]}return sum
}func main() {fmt.Println(add(1, 2))fmt.Println(add(1, 2, 3, 4, 5))
}

匿名函数

package mainimport "fmt"func main() {defer func() {fmt.Println("这个是匿名函数")}()fmt.Println("xxx")
}

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

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

相关文章

基于微信小程序的校园警务系统/校园安全管理系统/校园出入管理系统

摘要 伴随着社会以及科学技术的发展&#xff0c;小程序已经渗透在人们的身边&#xff0c;小程序慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;小程序这一名词已不陌生&#xff0c;越来越多的学校机构等都会定制一款属于自己个性化的小程…

UML通信图建模技术及应用例

新书速览|《UML 2.5基础、建模与设计实践》 在对系统的动态行为进行建模时&#xff0c;通信图常被用于按组织结构对控制流进行建模。与顺序图一样&#xff0c;一个单独的通信图只能显示一个控制流。 使用通信图建模时可以遵循如下策略&#xff1a; &#xff08;1&#xff09…

Centos 8 配置网络源

备份当前的软件源配置文件&#xff1a; sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak 清理原有的 yum 仓库配置信息&#xff1a; sudo rm -f /etc/yum.repos.d/*.repo 获取阿里云的 CentOS 8 源配置&#xff1a; sudo curl -o /etc/yum.repos.d/CentOS-Base.repo ht…

错误解决 error CS0117: ‘Buffer‘ does not contain a definition for ‘BlockCopy‘

Unity 2022.3.9f1 导入 Runtime OBJ Importer 后出现&#xff1a; error CS0117: ‘Buffer’ does not contain a definition for ‘BlockCopy’ 解决办法&#xff1a; 源代码&#xff1a; int DDS_HEADER_SIZE 128; byte[] dxtBytes new byte[ddsBytes.Length - DDS_HEAD…

【Vue实战教程】之Vue工程化项目详解

Vue工程化项目 随着多年的发展&#xff0c;前端越来越模块化、组件化、工程化&#xff0c;这是前端发展的大趋势。webpack是目前用于构建前端工程化项目的主流工具之一&#xff0c;也正变得越来越重要。本章节我们来详细讲解一下如何使用webpack搭建Vue工程化项目。 1 使用we…

Axure Web端元件库:从Quick UI到500+组件的飞跃

在快速变化的数字世界中&#xff0c;产品设计不仅仅是功能的堆砌&#xff0c;更是用户体验的精心雕琢。原型设计作为产品开发过程中的关键环节&#xff0c;其重要性不言而喻。Axure&#xff0c;作为业界领先的原型设计工具&#xff0c;凭借其强大的交互设计和丰富的功能&#x…

智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界

一、方案背景 科技高速发展的今天&#xff0c;工地施工已发生翻天覆地的变化&#xff0c;传统工地管理模式很容易造成工地管理混乱、安全事故、数据延迟等问题&#xff0c;人力资源的不足也进一步加剧了监管不到位的局面&#xff0c;严重影响了施工进度质量和安全。 视频监控…

外行对自动驾驶汽车的一些想法-2024-

起源 前段时间有关于自动驾驶汽车的讨论&#xff0c;现在热度终于快过去了。 (⊙﹏⊙) 其实&#xff0c;完全不用担心自动驾驶取代人类。 引用 这是一篇24年4月的报道。 上图为引用&#xff0c;可以看到打工人的忙碌。 2023 一个热爱自动驾驶但妥妥外行之人的思考-2023-C…

mac怎样清理photoshop垃圾的方法 ps清理缓存和垃圾 苹果电脑暂存盘已满怎么清理

很多使用过ps&#xff0c;尤其是Adobe全家桶的小伙伴会发现&#xff0c;这些软件占用缓存很多&#xff0c;而且随着使用时间的增长&#xff0c;缓存也会越多&#xff0c;并不会自动清理。那么mac系统怎么清理ps暂存盘呢&#xff1f;mac又该怎么最高效清理磁盘空间呢&#xff1f…

芯片的计算能力由什么决定

芯片的计算能力由什么决定 芯片的计算能力由多个因素决定。 包括但不限于&#xff1a; 架构设计&#xff1a; 芯片的架构设计决定了其计算单元的数量和类型&#xff0c;以及它们之间的连接方式和通信方式。不同的架构可以提供不同的计算能力和性能。处理器速度&#xff1a; 处…

快速安装torch-gpu和Tensorflow-gpu(自用,Ubuntu)

要更详细的教程可以参考Tensorflow PyTorch 安装&#xff08;CPU GPU 版本&#xff09;&#xff0c;这里是有基础之后的快速安装。 一、Pytorch 安装 conda create -n torch_env python3.10.13 conda activate torch_env conda install cudatoolkit11.8 -c nvidia pip ins…

LeetCode_122(买卖股票的最佳时机)

public int maxProfit(int[] prices) {int ans 0;//int prices[] {7,1,5,3,6,4};for(int i1;i<prices.length;i){ansMath.max(0,prices[i]-prices[i-1]);}return ans;}

DevExpress WinForms自动表单布局,创建高度可定制用户体验(二)

使用DevExpress WinForms的表单布局组件可以创建高度可定制的应用程序用户体验&#xff0c;从自动安排UI控件到按比例调整大小&#xff0c;DevExpress布局和数据布局控件都可以让您消除与基于像素表单设计相关的麻烦。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&a…

openmv学习笔记(24电赛笔记)

感光元件 openmv采用小孔摄像模式&#xff0c;将图像映射到感光原件上面&#xff0c;来传递图片&#xff0c;通过图片快速的刷新行成视频&#xff0c;在IDE中通过对感光原件的编辑可以控制视频的效果。 重置感光元件到默认状态 import sensor #导入感光元件这个库sensor.res…

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此&#xff0c;一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中&#xff0c;研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…

如何在 Windows 上安装并配置 VNC 远程连接树莓派,并结合Cpolar实现公网远程访问

目录 ⛳️推荐 前言 1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS 2. Windows安装VNC远程树莓派 3. 使用VNC Viewer公网远程访问树莓派 3.1 安装Cpolar步骤 3.2 配置固定的公网地址 3.3 VNC远程连接测试 4. 固定远程连接公网地址 4.1 固定TCP地址测试 ⛳️推荐…

Godot游戏制作 05收集物品

创建新场景&#xff0c;添加Area2D节点&#xff0c;AnimatedSprite2D节点 &#xff0c;CollisionShape2D节点 添加硬币 按F键居中&#xff0c;放大视图。设置动画速度设为10FPS&#xff0c;加载后自动播放&#xff0c;动画循环 碰撞形状设为圆形&#xff0c;修改Area2D节点为Co…

通信原理-思科实验三:无线局域网实验

实验三 无线局域网实验 一&#xff1a;无线局域网基础服务集 实验步骤&#xff1a; 进入物理工作区&#xff0c;导航选择 城市家园; 选择设备 AP0&#xff0c;并分别选择Laptop0、Laptop1放在APO范围外区域 修改笔记本的网卡&#xff0c;从以太网卡切换到无线网卡WPC300N 切…

pmp证书是个什么样的证书?

PMP&#xff08;项目管理专业人士资格认证&#xff09;由美国项目管理协会&#xff08;Project Management Institute&#xff09;发起&#xff0c;在全球200多个国家和地区得到高度认可&#xff0c;PMP是项目管理领域重要的认证之一&#xff0c;受到业内广泛认可。 如果您想成…

C++ set

1. 背景 关联式容器 STL 中的部分容器&#xff0c;比如&#xff1a; vector 、 list 、 deque 、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。那什么是关联式容器&#xff1f;它与…