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.mzph.cn/diannao/50317.shtml

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

相关文章

Codeforces Round 874 (Div. 3)(A~D题)

A. Musical Puzzle 思路: 用最少的长度为2的字符串按一定规则拼出s。规则是&#xff1a;前一个字符串的尾与后一个字符串的首相同。统计s中长度为2的不同字符串数量。 代码: #include<bits/stdc.h> #include <unordered_map> using namespace std; #define N 20…

【python】PyQt5中QPushButton的用法详细解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【全面介绍Python多线程】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🦇目录 1. 🦇前言2. 🦇threading 模块的基本用法3. 🦇Thre…

Unity中有关Animation的一点笔记

也许更好的阅读体验 Animation Unity中Animation类并不是直接记载了和播放动画有关的信息&#xff0c;可以简单理解Animation为一个动画播放器&#xff0c;播放的具体内容就像卡带一样&#xff0c;当我们有了卡带后我们可以播放动画。 对应的则是编辑器中的组件 所以Anima…

【学术会议征稿】第十一届电气工程与自动化国际会议 (IFEEA 2024)

第十一届电气工程与自动化国际会议 &#xff08;IFEEA 2024&#xff09; 2024 11th International Forum on Electrical Engineering and Automation IFEEA论坛属一年一度的国际学术盛会。因其影响力及重要性&#xff0c;IFEEA论坛自创建筹办以来&#xff0c;便受到国内外高等…

网站打包封装成app,提高用户体验和商业价值

网站打包封装成app的优势 随着移动互联网的普及&#xff0c;用户对移动应用的需求越来越高。网站打包封装成app可以满足用户的需求&#xff0c;提高用户体验和商业价值。 我的朋友是一名电商平台的运营负责人&#xff0c;他曾经告诉我&#xff0c;他们的网站流量主要来自移动…

由bext安装“异常”引出的话题:windows上转义字符的工作原理

由bext安装“异常”引出的话题&#xff1a;Windows上转义字符的工作原理&#xff0c;与ai“闲扯”不经意学习知识点。 (笔记模板由python脚本于2024年07月25日 19:21:13创建&#xff0c;本篇笔记适合喜欢用ai学习的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff…

GitLab添加TortoiseGIT生成SSH Key

文章目录 前言一、PuTTYgen二、GitLab 前言 GitLab是一个用于托管代码仓库和项目管理的Web平台&#xff0c;公司搭建自己的gitlab来管理代码&#xff0c;我们在clone代码的时候可以选择http协议&#xff0c;也可以选择ssh协议来拉取代码。 SSH (Secure Shell)是一种通过网络进…

【脚本】清空指定文件夹内容

main执行一次&#xff0c;1.txt就会写入一些东西。 原来的想法是覆盖重写&#xff0c;结果却是接着往后面写&#xff0c;检查源代码有点费事&#xff0c;不如在每次程序执行前&#xff0c;先直接清空文件夹&#xff01; 部分代码&#xff1a; 修改路径就能用。 import os im…

微信小程序-自定义tabBar

通过官网给出的示例自己实现了自定义的tabBar&#xff0c;但结果发现 无法监听页面生命周期函数 结语&#xff1a;原想的是实现不一样的效果&#xff08;如下&#xff09; 故尝试了自定义tabBar&#xff0c;虽然做出来了&#xff0c;但也发现这个做法存在不足&#xff1a; 在…

记一次Mycat分库分表实践

接了个活,又搞分库分表。 一、分库分表 在系统的研发过程中,随着数据量的不断增长,单库单表已无法满足数据的存储需求,此时就需要对数据库进行分库分表操作。 分库分表是随着业务的不断发展,单库单表无法承载整体的数据存储时,采取的一种将整体数据分散存储到不同服务…

Golang | 腾讯一面

go的调度 Golang的调度器采用M:N调度模型&#xff0c;其中M代表用户级别的线程(也就是goroutine)&#xff0c;而N代表的事内核级别的线程。Go调度器的主要任务就是N个OS线程上调度M个goroutine。这种模型允许在少量的OS线程上运行大量的goroutine。 Go调度器使用了三种队列来…

vue3 常用的知识点

setup:容许在script当中书写组合式API 并且vue3的template不再要求唯一的根元素 <script setup>const name app; </script>组合式API的用法&#xff1a; 可以直接在script标签中定义变量或者函数&#xff0c;然后直接在template当中使用 <template>{{mes…

编程类精品GPTs

文章目录 编程类精品GPTs前言种类ChatGPT - GrimoireProfessional-coder-auto-programming 总结 编程类精品GPTs 前言 代码类的AI, 主要看以下要点: 面对含糊不清的需求是否能引导出完整的需求面对完整的需求是否能分步编写代码完成需求编写的代码是否具有可读性和可扩展性 …

javaEE-03-cookie与session

文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后&#xff0c…

【ARM】MDK-ARM软件开发工具的最终用户许可协议获取

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解MDK-ARM系列产品内软件开发工具的最终用户许可协议的获取。 2、 问题场景 对于部分外企客户需要软件开发工具的最终用户许可协议作为产品资料&#xff0c;以便附录并说明。 3、软硬件环境 1&#xff09;、软件…

Shell编程之正则表达式与文本处理器2--sed

目录 一、sed 工具 1. 概述 2. sed 原理 3、常用操作选项 3.1 常用选项 3.2 操作命令 4. sed 的使用 5. 具体操作 5.1 打印输出 p 5.1.1 显示范围、单行、指定行输出、指定往后加几行输出 5.1.2 显示奇偶行 5.1.3 将指定内容的行打印出来 5.1.4 只输出行号…

ESP32和mDNS学习

目录 mDNS的作用mDNS涉及到的标准文件组播地址IPv4 多播地址IPv6 多播地址预先定义好的组播地址 mDNS调试工具例程mDNS如何开发和使用注册服务查询服务 mDNS的作用 mDNS 是一种组播 UDP 服务&#xff0c;用来提供本地网络服务和主机发现。 你要和设备通信&#xff0c;需要记住…

python通过omniORBpy调用CORBA

omniORB参考地址&#xff1a; omniORB omniORB - Browse Files at SourceForge.net omniORB - Browse /omniORBpy/omniORBpy-4.3.0 at SourceForge.net Windows 普通使用好像不需要安装omniorb。就对接北向接口业务需要使用python3.10的windows包&#xff0c;但目前好像没有…

【CI/CD】docker + Nginx自动化构建部署

CI/CD是什么 CI/CD 是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09;的缩写&#xff0c;它们是现代软件开发中用于自动化软件交付过程的实践。 1、…