Go语法的内建方法示例-make、new、append、copy、panic、recover、len、cap等

Go语言本身提供了一些针对string、array、slice、map、chan等常用数据类型的一些内建函数,这些函数包括:make、new、append、copy、panic、recover、len、cap等。

下面是一些来自于慕课网Gavin老师https://www.imooc.com/video/20524课程中关于内建方法的示例程序:

package main

import (
	"fmt"
	"reflect"
)

/**
	make
	1、创建slice、map、chan
	2、返回类型引用
 */

// makeSlice 创建切片
func makeSlice() {
     
	mSlice := make([]string, 3)
	mSlice[0] = "dog"
	mSlice[1] = "cat"
	mSlice[2] = "tigger"

	fmt.Println(mSlice)
}

// makeMap 创建map
func makeMap() {
     
	mMap := make(map[int]string)
	mMap[10] = "php"
	mMap[100] = "go"

	fmt.Println(mMap)
}

// makeChan 创建chan
func makeChan() {
     
	mChan := make(chan int, 3)
	mChan <- 12
	mChan <- 10
	mChan <- 5
	close(mChan)
	fmt.Println(<-mChan)
	fmt.Println(<-mChan)
	fmt.Println(<-mChan)
}

func NewMap() {
     
	mNewMap := new(map[int]string)
	mMakeMap := make(map[int]string)
	fmt.Println("mNewMap:", reflect.TypeOf(mNewMap))
	fmt.Println("mMakeMap:", reflect.TypeOf(mMakeMap))
}

// Test for append
// 向切片中添加元素并打印出切片的长度和容量
func appendElementForSlice() {
     
	mIDSlice := make([]string, 2)
	mIDSlice[0] = "id-1"
	mIDSlice[1] = "id-2"
	fmt.Println("Before append(), len= ", len(mIDSlice))
	fmt.Println("Before append(), cap= ", cap(mIDSlice))
	mIDSlice = append(mIDSlice, "id-3")
	fmt.Println(mIDSlice)
	fmt.Println("After append(), len= ", len(mIDSlice))
	fmt.Println("After append(), cap= ", cap(mIDSlice))
}

// Test for copy()
// 拷贝切片
func copyForSlice() {
     
	mIDSliceDest := make([]string, 3)
	mIDSliceDest[0] = "php-dest-1"
	mIDSliceDest[1] = "java-dest-2"
	mIDSliceDest[2] = "javascript-dest-3"

	mIDSliceSrc := make([]string, 2)
	mIDSliceSrc[0] = "c-src-1"
	mIDSliceSrc[1] = "go-src-2"

	copy(mIDSliceDest, mIDSliceSrc)
	fmt.Println(mIDSliceDest)
}

// 删除map中的数据
func deleteFromMap() {
     
	mIDMap := make(map[int]string)
	mIDMap[0] = "id-1"
	mIDMap[1] = "id-2"
	delete(mIDMap, 0)
	delete(mIDMap, 1)
	fmt.Println(mIDMap)
}

// 测试panic()和recover()
// panic和recover 处理异常
// panic 抛出异常
// recover 捕获异常
func receivePanic() {
     
	defer coverPanic()
	//panic("I am panic")
	//panic(errors.New("I am panic"))
	panic(1)
}

func coverPanic() {
     
	message := recover()
	switch message.(type) {
     
	case string:
		fmt.Println("string message: ", message)
	case error:
		fmt.Println("error message: ", message)
	default:
		fmt.Println("unknown painc: ", message)
	}
}

// 测试长度和容量
// len -> string array slice map chan
// cap -> slice array chan
// close -> chan
func getLen() {
     
	mIDSlice := make([]string, 2, 5)
	mIDSlice[0] = "id-1"
	mIDSlice[1] = "id-2"
	mIDSlice = append(mIDSlice, "id-3", "id-4")
	mIDSlice = append(mIDSlice, "id-5", "id-6")
	fmt.Println("mIDMap's len : ", len(mIDSlice))
	fmt.Println("mIDMap's cap : ", cap(mIDSlice))
}

// Test for close
// 创建和关闭Chan
func closeChan() {
     
	mChan := make(chan int, 1)
	defer close(mChan)
	mChan <- 1
}

func main() {
     
	// Test for make()
	makeSlice()
	makeMap()
	makeChan()

	// Test for new()
	NewMap()

	// Test for append()
	appendElementForSlice()

	// Test for copy()
	copyForSlice()

	// Test for delete()
	deleteFromMap()

	// Test for panic() and recover()
	receivePanic()

	// Test for len() and cap()
	getLen()

	// Test for close()
	closeChan()
}

下面是GoLand 中的程序执行结果:
Go语法的内建方法示例-make、new、append、copy、panic、recover、len、cap等_第1张图片

参考资料

  • Go语言语法进阶指南-Gavin-慕课网视频教程
    简介:Go语言经过多年的快速发展,已经被光广泛应用到各个领域,成为当前最热的计算机语言之一。Go自带许多高级特性及常用工具,使Go一出世就以高并发和高性能为程序员所追捧。本课程将针对对Go的高级特性和自带工具进行讲解和演示,帮助小伙伴们快速入门提升开发效率!
    老师告诉你能学到什么?
    1、学习方法及经验
    2、常用内置工具的实践
    3、工程化面向对象
    4、Go效率工具

  • Google资深工程师深度讲解Go语言
    基本语法、函数式编程、面向接口、并发编程、分布式爬虫实战 全面掌握Go语言
    试听了这个老师的Go语言视频教程,感觉讲得不错,只可惜收费,有点贵。

你可能感兴趣的:(go语言)