Go 语言基础
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
程序执行流程
- 找到
package main
下的有main
函数的入口程序 - 发现
import some
, 进入到some
中 - 如果
some
中还有import
, 继续步骤 2 - 如果没有
import
了, 则初始化全局变量 - 在被
import
的函数中, 执行init
函数 - 一直返回, 直到
main
函数位置 - 执行
main
函数
目录结构
配置
GOPATH
环境变量, 它用来指定类似于Eclipse中的工作空间GOPATH
指定的工作空间的目录结构
- workspace
+ src
+ code1
+ main
+ other_pkg
+ code2
+ bin
+ vender(第三方)
+ pkg(动态链接库)
- 我们自己定义的包, 在使用
import
导入的时候, 默认在GOPATH
下的src
下找的, 但是一般我们的代码又不是直接放在src下的, 所有import
的时候要从code1/other\_pkg
开始
- 在第2点标准目录下
go build
或者go run
命令执行cd
到workspace
目录下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
类型
int, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64
bool
string
chan
map
slice
[...]
字符与字符串
- 字符使用''
- 字符串使用""或者
,
与Python中的""" """一样
两种类型
- 值类型: 整数, 字符串, 数组, 结构体
- 引用类型: slice, map, chan, 指针(和C语言中一样)
类型转换
- 类型(变量), 括号中只能是变量, 不能是字面量等常量
内置函数
len()
cap()
make()
delete()
只用于删除 map 中的元素
接口
- 实现一个
interface
type MyInterface interface {
Say()
Run()
}
反射
基本
- 获取类型
var.(type)
,type 是关键字, 返回类型, bool, int32, string 等 - var.(interfaceName)
, 是否实现了
interfaceName的接口, 而·
var`为接口变量
reflect
TypeOf
返回类型Type
ValueOf
获取包含大量反射信息的对象, 后面的 API 都是对此对象(Value
)进行操作Value.Kind
返回变量类型, 类型在reflect
包中, 如reflect.Struct
Value.Interface()
将Value
转回去Value.Int()
获取 int 值Value.Float()
获取 float 值Value.String()
获取 string 值Value.Elem()
如果 Value 是从指针转过来的, 要获得指针对应的值, 使用该方法, 类似于*ptr
Value.Set系列()
赋值Value.NumFields()
属性个数Value.NumMethods()
方法个数Value.Method(numIndex).Call(args)
调用方法
多线程
内置包
fmt
fmt.Printf()
fmt.Println()
time
time.Sleep()
time.Now().Unix()
os
os.Getenv()
os.Stdin
os.Stdout
os.Stderr
os.Args
os.OpenFile
os.Fprintf(文件句柄, content)
文件句柄来自os.OpenFile
math/rand
rand.Int()
-> 很大rand.Float32()
-> [0, 1)rand.Seed(time.Now().Unix())
encoding/json
json.Marshal(struct)
打包struct
中的tag
, 只能打包struct
中大写开头的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
- 一个类似 Python 中 Flask 的 web 框架
Go 语言基础的更多相关文章
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- C语言基础回顾
第一章 C语言基础 1. C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...
- 黑马程序员_ C语言基础(二)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): 1.Hello W ...
- C#语言基础— 输入与输出
C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...
- 【GoLang】GO语言系列--002.GO语言基础
002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...
- R语言基础:数组&列表&向量&矩阵&因子&数据框
R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- Java学习总结(二)----Java语言基础
1. Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...
随机推荐
- 浅谈C/C++堆栈指引——C/C++堆栈很强大(绝美)
C/C++堆栈指引 Binhua Liu 前言 我们经常会讨论这样的问题:什么时候数据存储在飞鸽传书堆栈(Stack)中,什么时候数据存储在堆(Heap)中.我们知道,局部变量是存储在堆栈中的:deb ...
- kbmmw 中XML 操作入门(跨平台,而且可以与JSON,YAML,BSON 直接互相转换)
delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使 ...
- springboot 上传图片
1. 创建多层目录 创建多层目录要使用File的mkdirs()方法,其他可以使用mkdir()方法. 2. 文件大小限制 配置文件中,在spring1.4以后要使用 ` spring.http.mu ...
- WPF实用指南二:移除窗体的图标
原文:WPF实用指南二:移除窗体的图标 WPF没有提供任何功能来移除窗体上的icon图标.一般的做法是设置一个空白的图标,如下图1: 这种做法在窗体边框与标题之间仍然会保留一片空白. 比较好的做法是使 ...
- TVideoCapture类的源码,继承TCustomPanel,用于视频捕获(用到了SendMessage和SetWindowPos等API)good
unit VideoCapture; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, ...
- WPF分辨率适应
double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height; ...
- canvas——粒子系统(1)
这个动画在很早之前就见过,当时就没迷住了.最近在学canavs动画,动手实现了一下.代码在这里.展示效果在这里. 这属于粒子系统的一种,粒子系统就是需要管理一堆粒子嘛,动画实现的关键在于,遍历这些粒子 ...
- Win10《芒果TV》商店版更新v3.2.6:修复后台任务故障,优化推送频次
2017湖南卫视大型音乐竞技节目<歌手>,2017年1月21日晚首播第一期,7位歌手惊艳亮嗓,<芒果TV>UWP版迅速更新v3.2.6版,主要是修复后台任务故障,优化推送频次, ...
- 微信小程序把玩(二)window配置
原文:微信小程序把玩(二)window配置 window用于设置小程序的状态栏.导航条.标题.窗口背景色.注意在app.json中配置的属性会被子window属性覆盖 只需在app.json配置即可
- shell脚本配置ssh免密登陆
通过shell脚本配置免密登陆,分为两个脚本,一个是配置文件config.env,一个是正式脚本sshkey.sh. # config.envexport HOST_USER=(root) expor ...