GO语言系列(一)- 初识go语言

一、golang语言的特性

1.垃圾回收

  • a.内存自动回收,再也不需要开发人员管理内存
  • b.开发人员专注业务实现,降低了心智负担
  • c.只需要new分配内存,不需要释放

2.天然并发

  • a.从语言层面支持并发,非常简单
  • b.goroute,轻量级线程,创建成千上万个goroute成为可能
  • c.基于CSP(Commnuncating Sequential Process)模型并发
func main() {
    go fmt.Println(“hello")
}

3.channel

  • a.管道,类似unix/linux中的pipe
  • b.多个goroute之间通过channel进行通信
  • c.支持任何类型
func test_pipe() {
	pipe := make(chan int, 3)
	pipe <- 1
	pipe <- 2
	pipe <- 3

	sum = <-pipe
	// pipe <- 4

	fmt.Println("sum=", sum)
	fmt.Println(len(pipe))
}

 4.多返回值

  a.一个函数返回多个值

package main

func clac(a int, b int) (int, int) {
	// 多返回值
	c := a + b
	d := (a + b) / 2

	return c, d
}

二、开发环境搭建

1. Go 语言支持以下系统:

  • Linux

  • FreeBSD

  • Mac OS X(也称为 Darwin)

  • Windows

安装包下载地址为:https://golang.org/dl/

如果打不开可以使用这个地址:https://golang.google.cn/dl/

根据操作系统选择对应的安装包,点击安装包进行安装(linux直接解压)

设置环境变量

2.配置环境变量

linux
  
export GOROOT=$PATH:/path/to/go/
export PATH=$PATH:$GOROOT/bin/
export GOPATH=/home/user/project/go

windows安装的如果是msi安装文件,Go语言的环境变量会自动设置好。如果后面的测试无法通过,可以重新设置环境变量。

第一个golang程序

hello world, 在新建hello.go

package main

import "fmt"

func main() {
	fmt.Println("hello world")
}

在终端输入go run hello.go,如何成功打印hello world则证明配置成功

IDE搭建(vscode)

新建项目目录结构

三、包的概念

  • a.和python一样,把相同功能的代码放到一个目录,称之为包
  • b.包可以被其他包引用
  • c.main包是用来生成可执行文件,每个程序只有一个main包
  • d.包的主要用途是提高代码的可复用性

实例: 代码目录

 

add.go

package calc

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

sub.go

package calc

func Sub(a int, b int) int {
	return a - b
}

 main.go

package main

import (
	"fmt"
	"go_dev/day1/package_example/calc"
)

func main() {
	sum := calc.Add(100, 300)
	sub := calc.Sub(100, 300)

	fmt.Println("sum=", sum)
	fmt.Println("sub=", sub)
}

// go build -o bin/calc.exe go_dev/day1/package_example/main

四、goroute 

1. goroute实现并发

goroute.go

package main

import "fmt"

func test_goroute(a int) {
	fmt.Println(a)
}

main.go

package main

import "time"

func main() {
	for i := 0; i < 100; i++ {
		go test_goroute(i)
	}

	time.Sleep(3 * time.Second)
}

// go build go_dev/day1/goroute 

2. goroute管道通信

add.go

package goroute

func Add(a int, b int, c chan int) {
	sum := a + b
	c <- sum
} 

main.go

package main

import (
	"fmt"
	"go_dev/day1/goroute_example/goroute"
)

func main() {
	var pipe chan int
	pipe = make(chan int, 1)
	go goroute.Add(100, 300, pipe)
	sum := <-pipe
	fmt.Println("sum=", sum)

 

猜你喜欢

转载自www.cnblogs.com/zhangyafei/p/10639837.html