一.Go语言特性(结合代码)

本文介绍了Go语言的四个独特特性:垃圾回收机制,无需手动管理内存;天然并发支持,通过goroutines实现;Channel机制,用于goroutine间的同步和通信;以及多值返回功能,允许函数返回多个值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go语言特性

目录

Go语言特性

1.1 垃圾回收

1.2  天然并发 

1.3 Channel

1.4 多值返回


       Go语言有垃圾回收、天然并发、channel和支持多值返回这四个独特的特性。

1.1 垃圾回收

       在垃圾回收上,Go内存可自动释放,无需开发人员管理内存,new()分配的内存会自动释放。

       如在链表的操作中,我们删除链表中的某个节点时,无需像C++需要用delete()删除,Go会自动释放不会产生内存泄漏。如删除student链表里的stu6节点,代码如下: 

       由下面代码可见,当删除链表中的"stu6"节点时,我们之间另此节点的前一个节点的 .next指向此节点的下一个节点地址即可,无需调用delete()再删除这个内存。

func delNode(p *Student) {
	var prev *Student = p    //prev为待删除节点的前一个节点
	for p != nil {           //遍历链表,找到节点
		if p.Name == "stu6" {
			prev.next = p.next //令待删除节点的next直接指向待删除节点的下一个节点
			p.next = nil    
			break
		}
		prev = p
		p = p.next
	}
}

1.2  天然并发 

       在语言层面支持并发,用goroute实现,代码和结果过下:

       由输出可见,0~9序列的输出为随机态,并发特性非常明显。

package main
import (
	"fmt"
	"time"
)
func test_goroute(a int) { //测试并发
	fmt.Println(a)
}

func main() {
	for i := 0; i < 10; i++ {
		go test_goroute(i)
	}
	time.Sleep(time.Second)
}

                

1.3 Channel

       channel是用来传递数据的一个数据结构。其可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。

        如以下实例通过两个goroute计算数字之和

package main
import "fmt"
func sum(s []int, c chan int) {
	sum := 0
	for _, v := range s {
		sum += v
	}
	c <- sum // 把 sum 发送到通道 c
}
func main() {
	s := []int{7, 2, 8, -9, 4, 0}
	c := make(chan int)
	go sum(s[:len(s)/2], c)
	go sum(s[len(s)/2:], c)
	x, y := <-c, <-c // 从通道 c 中接收
	fmt.Println(x, y, x+y)
}

1.4 多值返回

          Go中的一个函数可以返回多个值

package main
import "fmt"
func calc(a int, b int) (int, int) {
	sum := a + b
	avg := (a + b) / 2
	return sum, avg
}
func main() {
	sum, avg := calc(2, 4)
	fmt.Println(sum, avg)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值