go-学习笔记

昨夜语 · · 923 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

2018年6月30日

基础命令

  1. go build 用于编译源码文件、代码包、依赖包

可执行文件路径为 $GOPATH/bin

  1. go run 编译并运行go源码文件
  2. go get 动态获取远程代码包

系统关键字或保留字

1,保留关键字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

2, 预定的标识符,包括基础数据类型和系统内嵌函数。

append bool byte cap close complex
complex64 complex128 uint16 copy false float32
float64 imag int int8 int16 uint32
int32 int64 iota len make new
nil panic uint64 print println real
recover string true uint uint8 uintprt

3,内嵌数据类型

  • Boolean类型:

    • 系统为此类型定义了两个常量:true 和 false.

    • 初始默认值为:false。

    • 格式化输出时的格式字符串为:%t。

    • 实例代码:

      • image
    • 输出结果为:

      • flag1 = true
      • !flag1 = false
      • GlobalFlag = true
      • (flag1 && flag2) = false
      • (flag1 || flag2) = true
  • Byte类型:

    • 为uint8的别外,即只有8个bit。
  • 数字类型:

    • 整数类型:
      • 有符号整数:int8, int16, int32, int64和int(此类型会根据特定的平台可能会有所不同)

      • 无符号整数:uint8, uint16, uint32, uint64和uint (此类型会根据特定的平台可能会有所不同)

      • 初始默认值为:0。

      • 格式化输出时的格式字符串为:%d,输出16进制:%x或%X;8进制:%o。

      • 实例代码:

        • image
      • 输出结果为:

        • i8=9, i=27, ui32=30, ui64=40, defInt=0

        • i8=11, i=1b, ui32=1E, ui64=101000

        • The value=27, The Address=0x117d0238

    • 浮点类型:float32 和 float64
      • 初始默认值为:0.0。

      • 注意:这里没有float的类型,且两个浮点数比较时不能使用== 和 !=

      • 格式化输出时的格式字符串为:%g,%f则对应浮点类型的指针;%e则对应科学计数法办输出;%n.mg用于指定小数位输出。

      • 实例代码:

        • image
      • 输出结果:

        • f32 = 2.054545, f64=4.054544925689697, default=0
        • f32 = 2.05
    • 复数类型:
      • complex64:实数与虚数都是32位

      • complex128: 实数与虚数都是64位

      • real(c):获取实数部分

      • imag(c):获取虚数部分

      • 格式化输出时的格式字符串为:%v, 另外也可以使用%f输出实部和虚部。

      • 实例代码:

        • image
      • 输出结果:

        • The com1=(2+3i), The com2=(3+4i)
        • The com2=(5+7i)
        • The real of com2=5, The imag of com2=7
  • 字符类型:

    • 严格的说,在Go中没有此类型类型,它是特殊的整数类型。
    • 它对应uint8类型,对传统的ASCII码对应,占1byte。
    • 同时也支持Unicode(UTF-8)的编码,所以它可能点多个byte,被称为Unicode code points或runes。此时它对应的int32的数字类型。
    • 包含在单引号中。
    • Unicode的字符通常以16进制的形式表示(\u+4或\U+8)
    • 格式化输出时的格式字符串为:%c;%v或%d则显示对应的整数值;%U则输出:U+hhhh
  • 字符串类型:

    • 一串UTF-8编码格式的字符(可能占1~4byte)---- Java中的字符都是占2bytes。
    • 包含在双引号中,只能在独立的一行内。(Interpreted string)
    • 包含在反引号中,可以跨越多行。(raw string)
    • 注:Go所有的代码都是UTF-8格式,所以不存在对字符进行编码和解码。
    • 它是不可变的值类型,所以不能直接修改字符串。
  • 指针类型:

    • 占4byte大小。
    • 各种数据类型都有对应的指针类型。
    • 声明方法类似于C中对指针的声明: *type。

4 操作符

  • 逻辑运算符:
    • 与:&&,或:||,非:!。
    • ==,!=,<,>,<=,>=
  • 位运算符:
    • 只能工作在int类型的变量上。
    • 按位与:&,按位或:|,按位异或:^
    • 左移:<<,右移:>>。(空位补0)
  • 算术运算符:
    • +,-,*,/。
    • 取模:%
    • 简化操作:-=,*=, +=, %=
    • ++, --。(只能在数字变量的后面,不能放在开头,这是与C,Java不一样的地方)。
  • 优先级:(7 -> 1:由高到低)

全局变量
在func 之外
局部变量
在func之内

源码文件模板

package main
// 程序所属包

import "fmt"
//导入依赖包

const NAME string = "SoulMO"
//定义常量

var a string = "Golang学习"
//声明全局变量及赋值

type GoLearntInt int
//一般类型声明


type Learn struct{

}
//结构体声明


type ILearn interface {
    
}
//声明接口

func GoLearn()  {
    fmt.Println(a,"learn Golang")
}
//定义函数

func main() {
    GoLearn();
    fmt.Println(a,"Hello ~")
}
// main函数

基础语法

1, package

  • package 是最基本的分发单位和工程管理中依赖关系的体现
  • 每个GoLang源代码文件开头都拥有一个package 声明,表示源代码文件所属代码包
  • 生成GoLang可执行程序,必须要有main的package包,且改包下必须有main()
  • 同一路径下只能存在一个package,一个package可以由多个源代码文件组成

package 包名为当前文件夹名,避免混淆

2,import

  • import根据顺序导入
    函数名必须大写开头

3类型零值
值类型 默认为 0
布尔类型 默认为 false
string 默认为 空字符串

3,参数声明初始化及赋值
变量声明格式
var <变量名称> [变量类型]
变量赋值格式
<变量名称> = <值,表达式,函数等>
变量声明并赋值格式
var <变量名称> [变量类型] = <值,表达式,函数等>
分组声明格式

var(
  i int
  j float32
  name string
)

单行 声明多个变量和赋值
var a, b, c int = 1, 2, 3或者a, b := 1, 2
全局变量声明必须用var,局部变量可省略
特殊变量 下划线“_”;
若将值赋给 “_” 则代表 值被销毁,接下来的操作将无法调用该值

go类型转换必须是显式的
类型转换只能发生在两种兼容类型之间
类型转换格式 <变量名称> [:]= <目标类型>

变量为大写字母开头的 是公用变量,可被其他包读取调用
变量为小写字母开头的 为私有变量,只能被当前包使用


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:昨夜语

查看原文:go-学习笔记

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

923 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传