一、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. 是时候开始写总结了-今日总结-vue单页面制作

    今天哥给了我一个页面,让做出类似的. <h2>就直接说下页面用到的知识点吧</h2> 首先说下该页面使用的是vue2+less  直接写 导入模块时就只导入了cnpm i  l ...

  2. ider git Reset Type 使用记录

    Soft:在选定提交点之后所做的所有更改都将被暂存(这意味着可以到 Version Control 窗口(Alt+9)的Local Changes 选项卡,以便您可以查看它们,并在必要时稍后提交). ...

  3. android9.0之后wifi热点原生接口开发示例

    话不多说,直接上代码了,这示例是直接调用原生接口实现的,没有使用反射的方式,如果找不到接口无法编译,请依赖一下对应系统的framewords.jar,并且参考我https://www.cnblogs. ...

  4. 浅析Winform的可视样式

    每一个C#的Winform项目的Main方法里,都有这么一行代码,那么它究竟是用来做什么的呢? Application.EnableVisualStyles(); 从注释来看,这是一行用作设置样式的代 ...

  5. 通过adb查看手机app的包名

    在进行App自动时,需要查看手机应用包名.Activity的信息,下面介绍一种简单的查看手机应用的信息: 1.启动手机的app 2.使用adb shell dumpsys window | finds ...

  6. clickhouse-数据副本踩坑

    数据副本--失败,看日志 vim /var/log/clickhouse-server/clickhouse-server.err.log select * from system.replicati ...

  7. yolov5查看训练日志图片和直方图(包括稀疏训练bn直方图)

    0.D:\code\codePy\yolov5-6.1\runs\train\exp25文件夹下有 events.out.tfevents.1675823043.DESKTOP-ACC9FL4.521 ...

  8. vue打包添加时间戳,实现更新项目自动清除缓存

    本来vue打包会自动用chunkhash来解决缓存问题,但是部分浏览器不会自动更新,因此可以通过后面t=${ }的不同来实现自动重新加载文件,保持最新的界面 (1).webpack打包:修改build ...

  9. C# 后端实现前端的alter弹窗

    前端页面定义一个button按钮 <cimesui:cimesbutton id="btnDelete" text="删除检验单" cssclass=&q ...

  10. Android移动端性能测试工具mobileperf

    简介:mobileperf是阿里开源的一个python PC 工具,可以收集Android性能数据: cpu.内存.流畅度.fps.logcat日志.流量.进程线程数.进程启动日志,mobileper ...