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

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")
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • kafka rocketmq rabbitmq相同差异点
  • AI学习指南机器学习篇-SOM在数据聚类和可视化中的应用
  • Maven 的模块化开发示例
  • Spring循环依赖详解
  • MacOS解决安装pycurl的问题 no such file or directory: ‘/usr/lib/libcurl.@libext@‘
  • 基于DPU与SmartNic的云原生SDN解决方案
  • springboot 之 使用easyexcel导出数据到多个sheet,动态表头,自动计算列宽
  • Docker核心技术:Docker原理之Cgroups
  • 全年销售7亿块,巧克力企业如何通过相邻业务打造极致产品力?
  • LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
  • 初阶数据结构之栈和队列
  • huawei 路由 RIP 协议中三种定时器的工作原理
  • 快手可灵视频生成大模型全方位测评
  • CrowdStrike更新致850万Windows设备宕机,微软紧急救火!
  • JAVA学习笔记
  • #Java异常处理
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 30天自制操作系统-2
  • 4个实用的微服务测试策略
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • java正则表式的使用
  • MD5加密原理解析及OC版原理实现
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • ReactNative开发常用的三方模块
  • Vue UI框架库开发介绍
  • Vue2 SSR 的优化之旅
  • vue--为什么data属性必须是一个函数
  • 分类模型——Logistics Regression
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 讲清楚之javascript作用域
  • 每天10道Java面试题,跟我走,offer有!
  • 通过npm或yarn自动生成vue组件
  • ![CDATA[ ]] 是什么东东
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • (1)无线电失控保护(二)
  • (6)设计一个TimeMap
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (回溯) LeetCode 131. 分割回文串
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十八)三元表达式和列表解析
  • (四)js前端开发中设计模式之工厂方法模式
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .bashrc在哪里,alias妙用
  • .equals()到底是什么意思?
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 的程序集加载上下文
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /*在DataTable中更新、删除数据*/
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @EnableWebMvc介绍和使用详细demo
  • @Transactional 参数详解