Golang 基础语法 (1)

编译运行

代码的编译运行
go build : 产生一个可执行二进制文件
go run :
go install : 会在pkg里面产生一个.a 的库
go clean : 移除当前源码包和关联码包里面编译生成的文件
go fmt : 格式化代码格式。eg: gofmt -w -l src
go get :动态获取远程代码包
go test : 会读取源代码目录下面名为*_test.go文件,生成并运行测试用的可执行文件。
go tool :
go generate :

包结构

程序都是用package来组织;在每个go文件前面,需要先声明一下是属于哪个package;
其中package main 和 func main 是程序执行的入口。
package的名字最好能跟src目录下的结构一致

每个package的文件都有一个保留的init函数。不会返回任何值,也不能传入任何参数。go会自动调用init。

import
import 引入的路径推荐用绝对路径

  • 点操作
    我们有时候会看到如下的方式导入包
    import(
    . "fmt"
    )
    这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println("hello world")可以省略的写成Println("hello world")

  • 别名操作
    别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字。别名操作的话调用包函数时前缀变成了我们的前缀,即f.Println("hello world")

     import(
         f "fmt"
     )
  • _ 操作
    这个操作经常是让很多人费解的一个操作符。 _ 操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数。请看下面这个import
    import (
        "database/sql"
        _ "github.com/ziutek/mymysql/godrv"
    )

变量

命名:

  1. 名字是区分大小写
  2. 关键字不能用来命名。

声明:
用 var (变量), const(常量) , type (定义一个新的命名类型,但是不同的命名类型都是完全不相同,就算他们underlying-type 是相同的), func (函数)。
声明的位置如果在func里面,则是本地变量。 如果在package 又不在func里,是package level。 package level 的表示在pacakge里面的,都是可见

var name type = expression
提供一个语法糖: name := expression

指针:
指向变量的地址,如果有C语言开发经验,这个很好理解。
可以使用new(T) 的方式,创建一个值为0,返回类型为 T* 的地址。

_(下划线) 是个特殊的变量名,任何赋予它的值都会被丢弃
iota枚举:声明enum的时候采用,默认开始是0, 每增一行+1

大写字母开始的变量是可导出;小写字母开头是不可导出的

数组

array
是数组类型。 格式:

 var arr [n] type { }

n表示长度, type 是类型, 通过[ ] 来读取或者赋值。 { } 里面就是初始值,可以不写

slice
slice总是指向一个底层array,slice的声明也可以像array一样,只是 不需要长度
对于slice有几个有用的内置函数:

有用的几个内置函数:

  1. len 获取slice的长度
  2. cap 获取slice的最大容量
  3. append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
  4. copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数

map

格式为

map[keyType] valueType

声明格式
// 声明一个key是字符串,值为int的字典,这种方式的声明需要在使用之前使用make初始化
var numbers map[string] int
// 另一种map的声明方式
numbers = make(map[string] int)

基本操作

  1. map的初始化可以通过key:val的方式初始化值,同时map内置有判断是否存在key的方式
    // map有两个返回值,第二个返回值,如果不存在key,那么ok为false,如果存在ok为true
    csharpRating, ok := rating["C#"]
  2. 通过delete删除map的元素:delete(rating, "C") // 删除key为C的元素

注意
map和其他基本型别不同,它不是thread-safe,在多个go-routine存取时,必须使用mutex lock机制

make、new操作

make用于内建类型(map、slice 和channel)的内存分配。new 用于各种类型的内存分配。

内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的 T 类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型 T 的零值。有一点非常重要:

new 返回指针。

内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的 T 类型,而不是*T。本质来讲,导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容