Go 语言基础

特点

常用命令

  • go run 直接运行, 不会生成可执行文件
  • go build 生成可执行文件, 推荐

加分特点

  • UTF-8编码

  • 高并发: go 关键字

  • 管道: pipe := make(chan int, 1)

  • 在一个文件中, 大写字符开头表示对外开放, 小写字符开头则不对外开放

  • 第一行代码一定以package main 如果是一个可以运行的项目, 则一定会有main包, 如果是其他的, 则是自定义的名字

  • 所有的类都实现了空接口(interface{}), 相当于 Object, 耦合度很低, 可以接受, int , float, slice, map, string, struct, interface 等类型

  • 默认的赋值都是值传递

  • 不使用 this, 而是通过 interface 定义方法特有的形式, 简单方便, 不会有和 JS 一样的 this 歧义问题

  • 没有构造函数, 通过工厂函数创建 struct

  • 支持闭包, 内置 VM

程序执行流程

  1. 找到package main下的有main函数的入口程序
  2. 发现import some, 进入到some
  3. 如果some中还有import, 继续步骤 2
  4. 如果没有import了, 则初始化全局变量
  5. 在被import的函数中, 执行init函数
  6. 一直返回, 直到main函数位置
  7. 执行main函数

目录结构

  1. 配置GOPATH环境变量, 它用来指定类似于Eclipse中的工作空间

  2. GOPATH指定的工作空间的目录结构

  • workspace

    + src

    + code1

    + main

    + other_pkg

    + code2

    + bin

    + vender(第三方)

    + pkg(动态链接库)
  1. 我们自己定义的包, 在使用import导入的时候, 默认在GOPATH下的src下找的, 但是一般我们的代码又不是直接放在src下的, 所有import的时候要从code1/other\_pkg开始
  • 在第2点标准目录下go build或者go run命令执行

    • cdworkspace目录下
    • go build code1/main -> 注意, main是包名, 不需要执行文件名, 现在是在workspace目录, code1是在src下, 但是命令中要去掉src目录

语法

导包


import (
"fmt"
"os"
"time"
)

const使用


const (
a = 10
b = 20
)

var使用


var (
a = 10
b = 20
)

定义变量


// 一般需要两行
var a int
a = 20 // 但是go语言为了方便提供了下面的方式, 两者是等价的, a:=20会被go编译器转为上面***两条***语句
a := 20

类型

  1. int, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64

  2. bool

  3. string

  4. chan

  5. map

  6. slice

  7. [...]

字符与字符串

  1. 字符使用''
  2. 字符串使用""或者, 与Python中的""" """一样

两种类型

  1. 值类型: 整数, 字符串, 数组, 结构体
  2. 引用类型: slice, map, chan, 指针(和C语言中一样)

类型转换

  1. 类型(变量), 括号中只能是变量, 不能是字面量等常量

内置函数

  1. len()
  2. cap()
  3. make()
  4. delete() 只用于删除 map 中的元素

接口

  1. 实现一个 interface
type MyInterface interface {
Say()
Run()
}

反射

基本

  1. 获取类型 var.(type),type 是关键字, 返回类型, bool, int32, string 等
  2. var.(interfaceName), 是否实现了 interfaceName 的接口, 而·var`为接口变量

reflect

  1. TypeOf返回类型 Type
  2. ValueOf获取包含大量反射信息的对象, 后面的 API 都是对此对象(Value)进行操作
  3. Value.Kind 返回变量类型, 类型在 reflect包中, 如 reflect.Struct
  4. Value.Interface()Value 转回去
  5. Value.Int()获取 int 值
  6. Value.Float() 获取 float 值
  7. Value.String()获取 string 值
  8. Value.Elem() 如果 Value 是从指针转过来的, 要获得指针对应的值, 使用该方法, 类似于 *ptr
  9. Value.Set系列()赋值
  10. Value.NumFields()属性个数
  11. Value.NumMethods()方法个数
  12. Value.Method(numIndex).Call(args)调用方法

多线程

内置包

fmt

  1. fmt.Printf()
  2. fmt.Println()

time

  1. time.Sleep()
  2. time.Now().Unix()

os

  1. os.Getenv()
  2. os.Stdin
  3. os.Stdout
  4. os.Stderr
  5. os.Args
  6. os.OpenFile
  7. os.Fprintf(文件句柄, content)文件句柄来自 os.OpenFile

math/rand

  1. rand.Int()-> 很大
  2. rand.Float32() -> [0, 1)
  3. rand.Seed(time.Now().Unix())

encoding/json

  1. json.Marshal(struct) 打包 struct 中的 tag, 只能打包 struct 中大写开头的

  2. json.UnMarshal(struct)

bufio

reflect

1. `TypeOf`返回类型 `Type`
2. `ValueOf`获取包含大量反射信息的对象, 后面的 API 都是对此对象(`Value`)进行操作
3. `Value.Kind` 返回变量类型, 类型在 `reflect`包中
4. `Value.Interface()`将 `Value` 转回去
5. `Value.Int()`获取 int 值
6. `Value.Float() `获取 float 值
7. `Value.String()`获取 string 值
8. `Value.Elem()` 如果 Value 是从指针转过来的, 要获得指针对应的值, 使用该方法, 类似于 `*ptr`
9. `Value.Set系列()`赋值
10. `Value.NumFields()`属性个数
11. `Value.NumMethods()`方法个数
12. `Value.Method(numIndex).Call(args)`调用方法

第三方包

Beego

  1. 一个类似 Python 中 Flask 的 web 框架

Go 语言基础的更多相关文章

  1. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  2. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  3. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  4. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  5. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  6. C#语言基础— 输入与输出

    C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...

  7. 【GoLang】GO语言系列--002.GO语言基础

    002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...

  8. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  9. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  10. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

随机推荐

  1. WPF 3D编程介绍

    原文:WPF 3D编程介绍 上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书.今天要来讲一下在WPF如何开展3D编程. 使用的xmal 和C#开发的时候:需要使用如下的关键要素: 1:摄像机 ...

  2. 联想K860 ROM 从官方Vibe 精简 提高性能

    ROM介绍 从官方:根据官方Vibe 1403 6从编译版本 除去不想要的软件的一部分 自己Root权限最新版本Superuser 园林绿化导航虚拟按键 优化系统.更顺畅 提升游戏性能 优化自己主动调 ...

  3. xmarin live player 连接 IOS以及安卓实现实时效果查看

    原文:xmarin live player 连接 IOS以及安卓实现实时效果查看 在之前有介绍过xamarin 单独IOS项目开发的运行环境搭建,但是这段时间我看到了xmarin forms 3.0  ...

  4. 【转载】Docker 安装 Nginx 并个性化挂载配置文件 nginx.conf

    首先,系统(3.8以上内核的linux)中安装好 Docker 这个运用程序.由于网络原因,我们下载一个Docker官方的镜像需要很长的时间,甚至下载失败.为此,阿里云容器镜像服务提供了官方的镜像站点 ...

  5. 【C#】简单解决PathTooLong的Exception

    原文:[C#]简单解决PathTooLong的Exception 前提 windows系统路径的最大长度限制是260个字符(听说.Net 4.6.2,取消了这个限制),而Linux或者Unix系统的好 ...

  6. wpf 高DPI开发

    https://blog.walterlv.com/post/windows-high-dpi-development.html https://blog.csdn.net/ZslLoveMiwa/a ...

  7. 自定义View实现图片热区效果

    我司主要从事工业物联网领域软件的开发,现有个需求,在外废品处理时需要对产品的不良位置进行标记,点选图片实现图片网格的着色功能. 需求是通过自定义view来实现,实现思路如下: 首先将点击的小方格对象实 ...

  8. git/github初级运用自如 (good)

    三 . 设置用户信息 这一步不是很重要,貌似不设置也行,但github官方步骤中有,所以这里也提一下. 在git中设置用户名,邮箱 $ git config --global user.name &q ...

  9. CentOS搭建python开发环境

    装了个CentOS 5.5,想在上面搭个python的开发环境,可是还是遇到了很多问题,记录一下过程: 1.python升级 查看python版本 python -V Python 2.4.3 因为p ...

  10. SQLSERVER 数据库备份脚本-支持多库备份

    原文:SQLSERVER 数据库备份脚本-支持多库备份 <pre name="code" class="sql">--变量定义 DECLARE @b ...