Go语言学习笔记(一)(下)

简介: Go语言学习笔记(一)(下)

控制语句


if-else


if (true && true) 
{
    fmt.Print("hello")
    return
}
复制代码


注意格式,这种写法是不被允许的,需要将第一个左括号放到if的同一行


goto


写法如下:


func myfunc() {
  i := 0
Here: ← 这行的第一个词,以分号结束作为标签
    println(i)
    i++
    goto Here ← 跳转
}
复制代码


标签大小写敏感


for


写法分成三种

第一种:一般的for循环


var i = 5
Tag:
    if i == 0 {
        return
    }
for i := 0; i<10 ; i++ {
    fmt.Println(i);
}
i--
goto Tag
复制代码


第二种:相当于while


var z = 6
for z > 5 {
    z++
    if z > 7 {
        break
    }
    print("hello wolrd")
}
复制代码


第三种:表示死循环


for {
    .....
}
复制代码


注意下面的写法是固定的,不能使用逗号表达式,只能使用平行赋值的方式


for i, j := 0, len (a)-1 ; i < j ; i, j = i+1, j-1 {
  a[i], a[j] = a[j], a[i] ← 平行赋值
}
复制代码


注意GO 里面是没有while语句的

只能使用for进行书写while的循环


range


list := []string{"aaa", "vvv", "ccc", "ddd", "eeee"}
  for k,v := range list {
    print(k, "-", v)
  }
复制代码


上面的例子是如下运转的:

  1. k 表示为 下标, v为值, range 代表了迭代器
  2. 迭代元素从 0 到 4 ,元素从 aaa...eeee 迭代


switch


switch非常的灵活,可以在case里面写上表达式


func unhex(c byte ) byte {
    switch {
    case '0' <= c && c <= '9':
    return c - '0'
    case 'a' <= c && c <= 'f':
    return c - 'a' + 10
    case 'A' <= c && c <= 'F':
    return c - 'A' + 10
    }
    return 0
}
复制代码


它不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做


switch i {
case 0: fallthrough
case 1:
f() // 当 i == 0 时, f 会被调用!
}
复制代码


还可以使用下面这张写法,逗号分隔多个条件


case ' ', '?', '&', '=', '#', '+': ← , as ”or”
return true
}
复制代码


内建函数



网络异常,图片无法展示
|


array、slices 和 map


array


var arr = [3]int{}
for item := range arr{
    print(item);
}
ss := [...] int{1,2,2,3,4,4}
// 初始化
a := [3] int{ 1, 2, 3}
ff := [3][2] int { { 1,2 } , { 3,4 } , { 5,6 } }
bb := [3][2] int { [2] int { 1,2 } , [2] int { 3,4 } , [2] int { 5,6 } }
print(a, bb, ss);
复制代码


slices


slice 总是指向底层的一个 array

总体来说go的语法基本和java相符,但是部分内容需要小心对待,个人不是很爽go语言的部分奇葩语法

slice 总是与一个固定长度的 array 成对出现。其影响 slice 的容量和长度

slice: slice := array[0:n]

对比图;


网络异常,图片无法展示
|


扩展 slice


appendcopy

函数 appendslice s追加零值或其他 x 值,并且返回追加后的新的、与 s 有相同类型的slice


s0 := [] int { 0, 0 }  
s1 := append (s0, 2) //追加一个元素, s1 == []int{0, 0, 2} ;
s2 := append (s1, 3, 5, 7) //追加多个元素, s2 == []int{0, 0, 2, 3, 5, 7} ;
s3 := append (s2, s0...) // 追加一个 slice, s3 == []int{0, 0, 2, 3, 5, 7, 0, 0} 。注意这三个点!
复制代码


函数 copy 从源 slice src 复制元素到目标 dst ,并且返回复制的元素的个数。


var a = [...] int { 0, 1, 2, 3, 4, 5, 6, 7 }
var s = make ([] int , 6)
n1 := copy (s, a[0:]) ← n1 == 6, s == []int{0, 1, 2, 3, 4, 5}
n2 := copy (s, s[2:]) ← n2 == 4, s == []int{2, 3, 4, 5, 4, 5}
复制代码


map

案例:


monthdays := map [ string ] int {
"Jan": 31, "Feb": 28, "Mar": 31,
"Apr": 30, "May": 31, "Jun": 30,
"Jul": 31, "Aug": 31, "Sep": 30,
"Oct": 31, "Nov": 30, "Dec": 31, ← 逗号是必须的
}
复制代码


只做声明的时候:monthdays := make ( map[ string ] int )

如何使用: monthdays["Dec"]


for _, days := range monthdays { ← 键没有使用,因此用 _, days
year += days
}
复制代码


检查元素是否存在


var value int
var present bool
value, present = monthdays["Jan"] ← 如果存在, present 则有值 true
← 或者更接近 Go 的方式
v, ok := monthdays["Jan"] ← “逗号 ok ”形式
复制代码


练习



Q1. (0) For-loop


  1. 创建一个基于 for 的简单的循环。使其循环 10 次,并且使用 fmt 包打印出计数

器的值。 2. 用 goto 改写 1 的循环。关键字 for 不可使用。 3. 再次改写这个循环,使其遍历一个 array,并将这个 array 打印到屏幕上。

相关文章
|
15天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
34 2
|
14天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
24 2
|
14天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
27 2
|
3天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
12 2
|
4天前
|
Go 调度 开发者
Go语言中的并发编程:深入理解goroutines和channels####
本文旨在探讨Go语言中并发编程的核心概念——goroutines和channels。通过分析它们的工作原理、使用场景以及最佳实践,帮助开发者更好地理解和运用这两种强大的工具来构建高效、可扩展的应用程序。文章还将涵盖一些常见的陷阱和解决方案,以确保在实际应用中能够避免潜在的问题。 ####
|
4天前
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
14 3
|
4天前
|
测试技术 Go 索引
go语言通过 for 循环遍历
go语言通过 for 循环遍历
14 3
|
6天前
|
安全 Go 数据处理
Go语言中的并发编程:掌握goroutine和channel的艺术####
本文深入探讨了Go语言在并发编程领域的核心概念——goroutine与channel。不同于传统的单线程执行模式,Go通过轻量级的goroutine实现了高效的并发处理,而channel作为goroutines之间通信的桥梁,确保了数据传递的安全性与高效性。文章首先简述了goroutine的基本特性及其创建方法,随后详细解析了channel的类型、操作以及它们如何协同工作以构建健壮的并发应用。此外,还介绍了select语句在多路复用中的应用,以及如何利用WaitGroup等待一组goroutine完成。最后,通过一个实际案例展示了如何在Go中设计并实现一个简单的并发程序,旨在帮助读者理解并掌
|
5天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
17 3
|
8天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
31 4