GO语言语法(上)| 青训营笔记

123 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第1天

首先了解了什么是GO语言,和GO语言的特性

Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。 Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、语言设计良好、执行性能好”等优势,目前国内诸多 IT 公司均已采用Go语言开发项目。

然后就是安装GO语言的编译器并且在vscode里面使用,编写了第一个go语言的helloworld

需要配置环境变量,可以去goproxy.io的网站上复制粘贴即可

goproxy.io/zh/

image.png

vscode新建项目有点麻烦,B站有详细视频可以看

www.bilibili.com/video/BV1mE… 接下来就可以进入语法练习部分

if-else和switch的用法和其他语言基本相同,不同点在于if没有(),if语句后面要直接加{} swich用法也是一样的,不用(),而且不用break,不会出现case穿透的效果。

使用map关键字来构建哈希表

package main
import (
	"fmt"
)

func main() {
	m := make(map[string]int)
	m["first"] = 001
	m["second"] = 002
	fmt.Println(m)

	r, ok := m["444"]
	fmt.Println(r,ok)
}

这里map后面的[]里面装的是key的数据类型,后面是value的数据类型,可以通过方括号语法去写入map的值,也能通过方括号去读取匹配的值。在map里面读取相应的数值的时候我们可以通过后加逗号ok,来确认是否存在,这里的ok是一个布尔类型的函数,如果不存在,就会出现false,如下图所示:

image.png

也可以通过下面这两种方式定义哈希表,我个人还是喜欢用 := 来定义自变量
        f := map[string]int{"01": 01, "02": 02}
	fmt.Println(f)//第二种定义方式
        
	var g = map[string]int{"fir": 03, "sec": 04, "thr": 05}
	fmt.Println(g)//第三种定义方式

接下来是range函数,可以用来对于nums和map进行遍历,range会返回2个值,一个是索引,另一个是对应函数的值

package main

import (
	"fmt"
)

func main() {
	nums := []int{0, 1, 2, 3, 4, 5}
	sum := 0
	for i, num := range nums {
		sum = sum + num
		if num == 2 {
			fmt.Println("index:", i, "num", num)
			//index:2 num 2

		}
	}

}
这里刚开始我没有看懂,所以去CSDN上搜了一下,发现是GO特有的语法,可以连起来说for-range方式,可以方便遍历字符串和数组,写法是for index, "key":="字符串或数组"
map返回的是key和value,视频给出的例子有点小问题,我敲了一遍结果应该是这样的
package main

import (
	"fmt"
)

func main() {
	m := map[string]string{"A": "a", "B": "b"}
	for k, v := range m {
		fmt.Println(k, v)
	}
}

image.png

很小的问题,看清楚结果就行

终于看到函数的部分了,对新手小白来说还是有点艰辛的啊,但是要好好加油!!!

先看给的例子

import (
	"fmt"
)

func add(a int, b int) int {
	return a + b
}

func exists(m map[string]string, k string) (v string, ok bool) {
	v, ok = m[k]
	return v, ok
}
func main() {
	c := add(3, 4)
	fmt.Println(c)

	v, ok := exists(map[string]string{"a": "A"}, "a")
	fmt.Println(v, ok)

}

前面的那个相加很简单没什么好说的,主要看一下后面的多个返回值的函数,go语言可以支持多个返回值,前面一个括号是参数,后一个括号是返回值的类型,可以根据自己的需求设定,设几个都行。

指针的写法和C基本一样,很好理解,假如写一个让自身加二的函数,由于传入的参数是拷贝的形参,对原来的变量不会有任何效果,这时候就需要用到指针对实参进行修改,千万别漏掉引用了&&&&


import (
	"fmt"
)

func add(n int) int {
	n += 2
	return n
}

func addptr(n *int) {
	*n += 2
}
func main() {
	n := 5
	add(n)
	fmt.Println(n)
	addptr(&n)
	fmt.Println(n)

}

结构体也和C基本一样,自己定义结构体的内容就好了,视频里面给了三种定义方式,不过多赘述,用指针写可以达到修改的效果

本来想偷个懒把会的部分跳过,这个结构体方法感觉挺新奇就又敲了一遍,很像调用函数的感觉,必须时刻谨记变量名后面是数据类型,不然总感觉不习惯,有点怪怪的,这里把密码重置了一下再检查发现是true,例子很NICE!

import (
	"fmt"
)

type user struct {
	name     string
	password string
}

func (u user) checkpasswrod(password string) bool {
	return u.password == password
}
func (u *user) resetpassword(password string) {
	u.password = password
}
func main() {
	a := user{name: "bin", password: "0821"}
	a.resetpassword("1017")
	fmt.Println(a.checkpasswrod("1017"))

}

好了,之后的字符串格式化,json处理,数字转换,时间什么的都是固定语法,等大家需要用到的时候直接查书或者在百度搜一下用法很容易就搞定啦。

这篇文章就分享到这了,欢迎大家交流学习,批评指正!