一、golang语言特性

1. 垃圾回收

a、内存自动回收,再也不需要开发人员管理内存  //开发代码中不能存在无引用的变量,不然代码出错

b、开发人员专注业务实现,降低了心智负担

c、只需要new分配内存,不需要释放

2. 天然并发

a、从语言层面支持并发,非常简单

b、goroute,轻量级线程,创建成千上万个goroute成为可能

c、基于CSP(Communicating Sequential Process)模型实现(基于goroute、channel)

并发实例:

不需要担心编码问题,全是utf-8

:=  相当于变量的声明和赋值

在go名称中不建议使用下划线 _

//单行注释

/*   */多行注释

go  fmt -w filename   格式化代码文件(排版)

package main

import(
"time"
"fmt"
) func test_goroute(a int) {
fmt.Println(a)
} func main() { for i := 0; i < 100; i++ {
go test_goroute(i)
} time.Sleep(time.Second)
}

3. channel(管道,进程间的通信)

a、管道,类似unix/linux中的pipe

b、多个goroute之间通过channel进行通信

c、支持任何类型

func main() {
pipe := make(chan int,3) //make 分配内存空间
pipe <- 1 //向管道里面扔数值
pipe <- 2
// len(pipe) 管道的长度
t1 =<- pipe //取管道里面的数据 
}

管道的传值:

main/main.go

package main

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

goroute/add.go

package goroute

func Add(a int, b int, c chan int) {

    sum := a +b
c <- sum
}

4. 多返回值

  一个函数返回多个值

main/main.go

package main
import(
"go_dev/day1/package_example/calc" //调用其他包,路径根据GOPANTH不用写src,直接从src目录下开始
"fmt"
)
func main() {
sum,_ := calc.Add(100, 300) //接收返回值得一个,_没有值,打印报错
fmt.Println("sum=",sum)
}

calc/Add.go

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

二、包的概念

1、和python一样,把相同功能的代码放到一个目录,称之为包

2、包可以被其他包引用(包内的变量名必须是大写开头,才能被其他包调用)

3、main包是用来生成可执行文件,每个程序只有一个main包

4、包的主要用途是提高代码的可复用性

三、包的编译

建立如下目录结构:

将project添加到GOPATH的环境变量中

然后在PROJECT下编译代码:

go  build   godev/day1      //因为添加了GOPATH环境变量,能直接找到src文件,所以不用写src,直接编译包含main包的库就是了。

go build  -o  bin/day1.exe   godev/day1     // 将编译文件保存在PROJECT/bin下,并制定编译后的文件名

编译完成后,会生成day1.exe文件,.\day1.exe执行

go语言的特性的更多相关文章

  1. 前端学习 第三弹: JavaScript语言的特性与发展

    前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...

  2. (转)C++0x语言新特性一览

    转自:http://blog.csdn.net/zwvista/article/details/2429781 原文请见http://en.wikipedia.org/wiki/C%2B%2B0x. ...

  3. 理解C#系列 / C#语言的特性

    C#语言的特性 大多数语句都已(;)结尾 用({})定义语句块 单行注释(//),多行注释(/*......*/)智能注释(///) 区分大小写 用namespace名称空间对类进行分类 在C#中的所 ...

  4. Objective-C 语言特点/特性

    Objective-C中 1.所有的类都必须继承自NSObject. 2.所有对象都是指针的形式. 3.用self代替this. 4.使用id代替void*. 5.使用nil表示NULL, 6.只支持 ...

  5. Atitit.dart语言的特性  编译时js语言大总结

    Atitit.dart语言的特性  编译时js语言大总结 1. 原型环境1 1.1. Dart可以编译js3 2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时 ...

  6. iOS - OC 语言新特性

    前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 O ...

  7. iOS - Swift Swift 语言新特性

    1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...

  8. 当OOP语言RAII特性发展到functional形式的极致

    本文主要站在C++程序员的思维角度思量. functional之路 lambda表达式 lambda表达式,是一段代码片段.函数实现体中出现的可重用的代码块. 在C++之前,C语言最小可复用流程模块, ...

  9. delphi2006语言新特性:Record类型高级用法

    delphi语言在传统的Records类型的基础上增加了许多像类一样的高级功能,如:Records可以有属性和方法(包括构造constructors),类属性,类方法,类静态字段和内嵌类型.下面这个示 ...

  10. OC 语言新特性

    前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力. 在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 ...

随机推荐

  1. cgroup和Linux Namespace基础操作

    一.开头 接触过docker的同学多多少少听过这样一句话"docker容器通过linux namespace.cgroup特性实现资源的隔离与限制".今天我们来尝试学习一下这两个东 ...

  2. 使用FormData上传图片

    document.querySelector('.file').addEventListener('change', function(e) { //1.可以通过this拿到这个file的DOM元素 ...

  3. Hadoop 设置静态IP、关闭防火墙

    设置静态IP [root@localhost ~]# cd /etc[root@localhost etc]# cd sysconfig[root@localhost sysconfig]# cd n ...

  4. SpringBoot_Thymeleaf项目开发

    用Springboot集成Thymeleaf,开发一个前后端不分离的Web项目,记录下每个步骤:(IDEA版) 一.项目初始化: 1.打开idea,以次点击 File -- New -- Projec ...

  5. k8s_使用k8s部署wordpress博客系统(一)

    系统部署流程 使⽤kubernetes部署wordpress+MySQL, 并利⽤NFS去保存我们容器的源代码以及DB数据.搭建好nfs后任意node上的Pod访问db或者业务代码都会有相同的效果,数 ...

  6. chklist

    1. 重复检查的必要性.一段代码如果在测试期间没问题,也要间隔几天再去观察是否有问题.2. 如果是集群式的服务,使用定时任务要采用分布式锁,或使用工具随机发送一台都可以.3. 如果任务跑失败,需要支持 ...

  7. 用字典代替'if-elif-else'

    在实际应用中,我们经常会需要采用if-elif-else控制语句以根据不同条件,作出不同的操作.if-elif-else固然可以,但是它也存在冗余的缺点,特别是当条件较多时这一缺点尤为明显.因此,本文 ...

  8. [MicroPython ESP32] 内存分析

    [MicroPython ESP32] 内存分析 [(1)芯片:ESP32-WROOM-DA] 手册: https://www.espressif.com.cn/zh-hans/support/doc ...

  9. 安装TortoiseSVN. msi 报错 2503 2502错误

    tortoisegit下载地址 https://tortoisegit.org/download/ [错误现象] 安装TortoiseSVN. msi 报错 2503 2502错误 [错误原因] 没有 ...

  10. Json数组转List

    List<Person> list = obj.list.ToObject<List<Person>>()