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 打印到屏幕上。

相关文章
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
161 1
|
3月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
287 1
|
9月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
9月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
3月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
364 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
236 0
|
3月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
213 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
307 0
|
3月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
3月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。