Go语言入门指南:基础语法和常用特性解析(中)|青训营

95 阅读3分钟

课后作业——基础语法篇

本文将介绍Go语言基础语法以及零基础小白的一些学习体验,是上篇的补充。 GO语言常用的基础语法有:变量、if else选择判断、for循环(Go语言只有这一种循环)、switch分支结构、数组、map、切片、range、函数、指针、结构体、错误处理、JSON处理、进程信息等。大部分语法与其他语言的语法类似,本文将着重切片(Slice)、range、错误处理、JSON处理。

一.切片(Slice)

GO语言切片是对数组的抽象。可以简单理解为“动态数组”,可以追加元素。

1.定义

var identifier []type//不需要声明长度

var slice1 []type =make([]type,len)
slice1 := make([]type,len)//简写

make([]T,length,capacity)//capacity可选,lenth=len(slice)
  

2.初始化

s :=[]int{1,2,3}

3.空切片(nil)

切片未初始化之前默认为nil,长度为0

4.增加

新建一个更大的切片,并把原分片的内容拷贝过来

常用方法:copy、append

var slice1 []int
slice1 = append(slice1,0)//可以追加空切片
slice1 = append(slice1,2)//添加元素
slice1 = append(slice1,4,6,3)
copy(slice2,slice1)//拷贝slice1的内容到slice2

二.Range

用于for循环中迭代array、slice、channel或map的元素

for range功能强大,与for循环相似却不同。下面是一个简单的例子:

//输入一串字符 统计字母、数字、空格、其他符号的个数并输出
package main

import (
	"bufio"
	"fmt"
	"os"
)

func Count(str string) (en, sp, num, ot int) {
	t := []rune(str)
	for _, v := range t {
		switch {
		case (v >= 'a' && v <= 'z') || (v >= 'A' && v <= 'Z'):
			en++
		case v == ' ':
			sp++
		case v >= 0 && v <= 9:
			num++
		default:
			ot++
		}
	}
	return
}

func main() {
	fmt.Println("请输入")
	reader := bufio.NewReader(os.Stdin)
	result, _, err := reader.ReadLine()
	if err != nil {
		fmt.Println("wrong")
		return
	}
	en, sp, num, ot := Count(string(result))
	fmt.Printf("en:%d,space:%d,number:%d,other:%d", en, sp, num, ot)
}

//请输入
//dddd2233 ssAB
//en:8,space:1,number:0,other:4

在编写这段代码时,我查询了许多相关资料:for range的用法、与for循环的异同点,以及bufio相关的知识。这部分知识在第一节课的“猜谜游戏”中有所涉及,但是当时还不太理解,通过查询资料、整理、消化,我对它们有了更深的理解。

三.错误处理

Go 语言通过 内置的错误接口 提供了非常简单的错误处理机制。

常用方法有:在Error()方法中返回错误信息;通过传参返回错误信息;通过创建新的辅助函数返回错误信息。

四.JSON处理

1.JSON是什么?

JavaScript即对象简谱(JSON, Java Script Object Notation),是一种用于发送和接收结构化信息的标准协议。在类似的协议中,JSON并不是唯一的一个标准协议。 XML(§7.14)、ASN.1和Google的Protocol Buffers都是类似的协议,并且有各自的特色,但是由于简洁性、可读性和流行程度等原因,JSON是应用最广泛的一个。

JSON是对JavaScript中各种类型的值(字符串、数字、布尔值和对象)的unicode文本编码。

2.编码为JSON格式

使用JSON.Marshall()函数可以达到目的。Go语言的大多数数据类型都可以转化为有效的JSON文本,但channel、complex和函数这几种类型除外。如果转化前的数据结构中出现指针,那么将会转换指针所指的值,如果指针指向的是零值,那么nill将作为转化后的结果输出。

3.解码JSON数据

可以使用json.Unmarshal()函数将JSON格式的文本解码为Go里面预期的数据结构。

4.解码未知结构的JSON数据 如果要解码一段未知结构的JSON,只需将这段JSON数据解码输出到一个空接口即可。