1.入口,go有且只有一个入口函数,就是main函数

  liteide (IDE)的 一个工程(文件夹)只能有且只有一个main函数

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // 入口函数
  6. func main () {
  7. fmt.Println("hello world")
  8. }
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // 入口函数
  6. // { 左括号必须和函数同行,不然异常
  7. func main ()
  8. {
  9. fmt.Println("hello world")
  10. }

2. 调用函数

  1. // go语言以包作为管理单位
  2. // 每个文件必须先声明包
  3. // 程序必须要有一个main包
  4. package main
  5.  
  6. import "fmt"
  7.  
  8. // 入口函数
  9. func main () { // 左括号必须和函数名同行
  10. // 打印
  11. // "hello go"打印到屏幕, Println()会直到换行
  12. // 调用函数,大部分都需要导入包
  13. /*
  14. 块注释
  15. */
  16. fmt.Println("hello world") // go 语句结尾没有分号;
  17. }
  1. go build xxx.go
  2.  
  3. // 编译后生成xxx.exe,不运行
  4.  
  5. go run xxx.go
  6.  
  7. // 编译后直接运行,不生成xxx.exe
  1. gofmt xxx.go 代码格式化
  2.  
  3. gofmt -w xxx.go 格式化后写入文件

golang语言特性

1. 垃圾回收

a. 内存自动回收,再也不需要开发人员管理内存

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

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

2. 天然并发

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

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

c. 基于CSP(Communicating Sequential Process)模型实现

  1. func main() {
  2. go fmt.Println(“hello")
  3. }

3.channel

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

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

c. 支持任何类型

  1. func main() {
  2. pipe := make(chan int,3)
  3. pipe <- 1
  4. pipe <- 2
  5. }

实现线程间管道通信

全局变量pipe

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // pipe是个全局变量 ,会有问题 多线程共用值会被改变,要加锁处理
  6. var pipe chan int // 声明一个管道int类型
  7.  
  8. func add(a int, b int) {
  9. var sum int
  10. sum = a + b
  11.  
  12. pipe <- sum // 把sum放进管道
  13. }
  14.  
  15. func main() {
  16. pipe = make(chan int, 1) // 初始化创建一个管道
  17. go add(2,5)   // goroute 调用add
  18. sum :=<- pipe // 这段代码会阻塞到pipe里有值取出
  19. fmt.Println("sum=", sum)
  20. }

传参的方式 pipe

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // c作为pipe形参
  6. func add(a int,b int, c chan int) {
  7. sum := a+b // 等价 var sum int 后赋值
  8.  
  9. c <- sum // 把sum放进管道
  10. }
  11.  
  12. func main(){
  13. pipe :=make(chan int, 1) // 初始化创建一个管道
  14.  
  15. go add(2, 5, pipe) // 将pipe作为参数传入
  16.  
  17. sum :=<-pipe // 这段代码会阻塞到pipe里有值取出
  18. fmt.Println("sum=" , sum)
  19. }

4. 多返回值

a. 一个函数返回多个值

  1. func calc(a int, b int)(int,int) {
  2. sum := a + b
  3. avg := (a+b)/2
  4. return sum, avg
  5. }
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func calc(a int, b int) (int, int) {
  6. c := a + b
  7. d := (a + b) / 2
  8. return c, d
  9. }
  10.  
  11. func main() {
  12. sum, _ := calc(100, 200) // _ 不想要的值
  13. fmt.Println("sum=", sum)
  14. }

包的概念

go编码 utf-8

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

2. 包可以被其他包引用

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

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

  1. 项目路径 project/src/go_dev/day1/example1/hello.go
  2.  
  3. 编译
  4.  
  5. D:/project> go build go_dev/day1/example1 // go bulid 默认找src下的路径 不要带src
  6.  
  7. 生成
  8.  
  9. D:/project> examp1.exe 在 project/下直接可以运行

包的导入

项目路径   D:\project\src\go_dev\day1\package_example下

包 calc

D:\project\src\go_dev\day1\package_example\calc 下有

add.go

  1. package calc
  2.  
  3. // 要被其他包导入要首字母大写
  4. func Add(a int, b int) int {
  5. return a + b
  6. }

sub.go

  1. package calc
  2.  
  3. // 要被其他包导入要首字母大写
  4. func Sub(a int, b int) int {
  5. return a - b
  6. }

包 main

  1. D:\project\src\go_dev\day1\package_example\main
  2.  
  3. 下有 main.go
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "go_dev/day1/package_example/calc"
  6. )
  7.  
  8. func main() {
  9. sum := calc.Add(100,200)
  10. sub := calc.Sub(100,300)
  11.  
  12. fmt.Println("sum=", sum)
  13. fmt.Println("sub=", sub)
  14. }

  1. 编译
    D:\project> go build go_dev/day1/package_example/main
  1. 编译到指定路径 D:\project\bin
  1. D:\project> go build -o bin/xxx.exe go_dev/day1/package_example/main

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

  1. C# 3.0新语言特性和改进(一)

    引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...

  2. 【转】浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  3. Pro ASP.NET MVC –第四章 语言特性精华

    C#语言有很多特性,并不是所有的程序员都了解本书我们将会使用的C#语言特性.因此,在本章,我们将了解一下作为一个好的MVC程序员需要了解C#语言的特性. 每个特性我们都只是简要介绍.如果你想深入了解L ...

  4. 浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  5. XAML 名称范围 (x:) 语言特性

    本节介绍为 Windows 运行时实现的 XAML 语言特性的参考信息. 本部分内容 主题 描述 x:Class 属性 配置 XAML 编译,在标记和代码隐藏之间连接分部类.代码分部类在一个独立的代码 ...

  6. C++ 语言特性的性能分析

    转载:http://www.cnblogs.com/rollenholt/archive/2012/05/07/2487244.html      大多数开发人员通常都有这个观点,即汇编语言和 C 语 ...

  7. C# 动态语言特性,dynamic 关键字研究

    1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...

  8. 理解Javascript的动态语言特性

    原文:理解Javascript的动态语言特性 理解Javascript的动态语言特性 Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行: ...

  9. c#跟objective-c语言特性

    c#跟objective-c语言特性的对比 拿c#语言跟objective-c做个对比,记录下自己认为是差不多的东西. 学过objc的人相信对category这个东西肯定不陌生,它可以让我们在没有源码 ...

  10. Scala中的语言特性是如何实现的(3) -- Trait

    我的新博客地址:http://cuipengfei.me/blog/2013/10/13/scala-trait/ 我在Coursera上跟了一门叫做Functional Programming Pr ...

随机推荐

  1. cocos2d-x的popScene的动画效果

    找到CCDirector.h,找到void popScene(); 在下面加上一段类模板 template <class T> void popSceneWithTransition(fl ...

  2. ASP.NET Redis 开发 入门

    ASP.NET Redis 开发   文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据 ...

  3. linux tcp server demo

    #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <ne ...

  4. jmeter 历史版本下载

    在官网下载: https://jmeter.apache.org/download_jmeter.cgi 新版本 要从命令行启动 cd 到bin目录下 使用 sh jmeter

  5. ZOJ 3593 One Person Game(拓展欧几里得求最小步数)

    One Person Game Time Limit: 2 Seconds      Memory Limit: 65536 KB There is an interesting and simple ...

  6. 杂项: Memcached

    ylbtech-杂项: Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动 ...

  7. Django前端的文本编辑器,滑动登陆

    文本编译器 # 添加文章 url(r'^addarticle/$', views.addarticle), # 利用文本编辑器添加文章 def addarticle(request): ''' 添加文 ...

  8. submit提交表单

    <!DOCTYPE html><html><head> <script src="jquery-1.3.2.min.js">< ...

  9. Ceph添加/删除Mon(ceph.conf)

    操作环境 ceph 0.87.7 Openstack liberty ubuntu 14.04 当前ceph配置文件如下 [global]fsid = c010eb34-ccc6-458d-9a03- ...

  10. Rplot

    #!/usr/bin/Rscriptlibrary(ggplot2) cf = read.table(file = 'result_sort.txt', header = TRUE, sep='\t' ...