一、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. (0409) Pycharm 的设置--参数设置(运行.py文件带参数,例如argument) 比如: demo.py -prj xxx

    1)  https://www.cnblogs.com/yksgzlyh/p/10221960.html 点击"Run"菜单下的"Edit Configurations. ...

  2. SAP S/4HANA Cloud的功能亮点以及大中型企业为何更倾向选择它

    SAP-System Applications and Products,是一家来自德国的大型跨国软件公司,成立于1972年.作为全球企业管理和协同化商务解决方案供应商,世界第三大独立软件供应商和全球 ...

  3. Raid磁盘阵列更换磁盘时另一块盘离线恢复案例(v7000存储数据恢复)

    Raid磁盘阵列更换磁盘时另一块盘离线恢复案例(v7000存储数据恢复) [故障描述]客户设备型号为IBM V7000存储,架构为AIX+oracle+V7000存储阵列柜,需要恢复的数据主要存放在阵 ...

  4. C#中DataTable新增列、删除列、更改列名、交换列位置

    一.新增列 1.1.新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型")); /*比如添加 ...

  5. 从零搭建hadoop集群之CentOS7配置网卡为静态IP

    CentOS7默认网卡设备文件存放于   /etc/sysconfig/network-scripts/  CentOS7的网卡设备名称是  ifcfg-ens33 vim /etc/sysconfi ...

  6. MARKDEEP.js-一个轻松在HTML中输入MD代码的JavaScript库

    MARKDEEP.js-一个轻松在HTML中输入MD代码的JavaScript库 http://casual-effects.com/markdeep/ 引入: <style class=&qu ...

  7. rsyslog由于RateLimit丢失日志的处理

    问题 问题的发现:在我们的docker应用中,配置了rsyslog作为日志输出:当应用产生的日志在某段时间内量比较大时,就发现会丢日志. 原因 问题的原因:日志的输出路径,应用程序把日志输出到syst ...

  8. 19c 滚动升级

    一.环境说明   节点1 节点2 IP 192.168.3.77 192.168.3.88 DB 版本 Oracle 19.6.0.0.0 Oracle 19.6.0.0.0 OS 主机名 oadb1 ...

  9. okHttp3源码简要分析

    首先看一下使用, public static void main(String[] args) throws IOException { OkHttpClient client = new OkHtt ...

  10. Spark之详解及性能优化

    一.spark简介 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架. Spark是用Scala程序设计语言编写而成,运行于Java虚拟机(JVM)环境之上.目前支持如下程 ...