Go——基础学习笔记

iOS开发中有一个方向叫,你想工程开发,曾经也试着话时间去研究过相关的技术,熟悉使用那些相关的工具,但是毕竟没有专门实战过项目,也就只能简单的入门一下。而随着iOS开发年限的增长,和所了解到的东西,发现有不少公司或者朋友都在关注安全这一块,虽然Apple已经把安全做得很到位了,但是还是有这一块的问题存在,所以我根据个人的能力并结合网上的相关资料,简单的整理了一下,不管是作为了解,还是项目实战,或者为了面试,我都希望能有所帮助……

07年由RRK三人主持开发,09年11月开源,12年1.0稳定版

特点
  • 语言简单
  • 实用,有效,高效
  • 静态类型
  • 编译型
  • 开源
  • 脚本化语法
  • 函数式
  • 面向对象
  • 原始并发
  • 协程(并发编程的管道)
  • 垃圾回收
  • 类型安全
  • 内存安全
  • UTF8编码
  • 移除或异常无用包
  • 内置高性能http server
  • 完善简便的各种库(package)
  • 调用C很简便
  • 跨平台
  • 作者之一是c的作者
优势
  • 脚本化
  • 静态+编译->速度(相比:动态+解释)
  • 并发(运行时系统调度和算法)
劣势
  • 语法糖少
  • 速度不及C
  • 第三方库较少
环境变量
  • GOROOT:Go语言的当前安装目录
  • GOPATH:Go语言工作区的结合(工作目录)
  • GOBIN:可执行文件目录
  • PATH:Go语言本身目录和Go程序生成可执行文件命令

(~/.bash_profile(单一用户),/etc/profile(全局用户)

  • 相关目录$GOOS_$GOARCH: GOOS-操作系统,GOARCH-计算架构
工作区
  • src:源码文件(代码包)
  • pkg:存放归档文件(代码包,库)
  • bin:Go程序可执行文件
源码文件
  • 命令源码文件(功能):Go语言入口,声明自己属于main代码包,包含无参数声明和结果声明的main函数
  • 库源码文件(功能):不具备命令源码文件的两个特征
  • 测试源码文件(辅助):同上,但是名称为:_test.go后缀

测试函数(至少一个):Test(功能)或Benchmark(基准或性能)前缀,参数testing.T或testing.B

基本命令
  • go run: 编译-临时-运行-可执行,归档文件
    • a:强制编译,不管是不是最新
    • n:打印编译需要的命令,不执行
    • p n:并行编译,n为并行数
    • a:列出被编译代码包名称(-a -v:所有涉及)
    • work:临时工作目录路径,且不删除
    • x:打印编译需要的命令,执行
  • go build:编译代码包(库:不产生结果文件,只检查有效性。命令:生成可执行文件,结果文件)
    • a:加入-编译所有涉及,不加入-只编译最新的
  • go install:编译并安装代码包或源码文件
  • go get:从远程代码仓库下载并安装代码包(git,Mercurial,svn,Bazaar)
    • d:只下载不安装
    • fix:下载后,先执行修正动作,在安装
    • u:更新代码包

ds(显示指定目录的目录结构)/pds命令(显示指定代码包的以来关系)

DOC
  • godoc -http=:8800
基础总结
  • 只有package为main的包可以包含main函数
  • 一个可执行文件有且仅有一个main函数
  • import导入非main包
  • 函数外包使用var申明和赋值全局变量
  • type进行结构体和接口的声明

代码实例

// 当前程序的包名(package:非注释的第一行)
package main

// 导入其他包
import "fmt" // 格式
import . "os" // 省略
import io "io" // 别名
import _ "time" // 忽略
import (
    "strings"
 )

// 常量定义
const PI = 3.14

// 全局变量声明与赋值
var name = "iCocos"

// 一般类型的声明
type newtype int

// 结构体的声明
type gostruct = struct{}

// 接口的声明
type gointerface interface{}

 // 以上三种都可以使用组
 type (
    byte int8
    rune int 32
    文本 string
 )

// 由main函数作为程序入口和启动
func main() {
    Printf("Hello World!")
}
可见性规则

常量,变量,类型,接口,结构体,函数

  • 大小写区分:
    • 小写为private
    • 大写为public

  • 陆续更新
    • 01基础学习笔记
    • 02Go语法初识
    • 03类型与变量
    • 04常量与运算符
    • 05控制语句
    • 06数组array
    • 07切片slice
    • 08map
    • 09函数function
    • 10结构struct
    • 11方法method
    • 12接口interface
    • 13反射reflection
    • 14并发concurrency
    • 15项目与坑
坚持原创技术分享,您的支持将鼓励我继续创作!