转--Golang语言-- Web 编程

1.golang的安装工具

1.1 GVM 第三方开发的Go多版本管理工具

2.golang环境变量

2.1 GOROOT=D:\go (golang 安装目录) 2.2 GOBIN=D:\go\bin (golang 生成的BIN目录) 2.3 GOPAT=D:\code\golang (golang 工作区,允许多个目录,;隔开) 执行goget命令时,会将包放在第一个配置的gopath目录中 GOPATH约定三个子目录:src(源码) 、bin(编译生成的文件, .a)、pkg(编译后的可执行文件)

3. go命令

3.1 go build 编译生成可执行文件在当前目录。 3.2 go install 安装生成可执行文件在bin目录下。 3.3 go get 下载远程包 , -u参数会自动更新包,同时会下载所有依赖包 例如:go get github.com/astaxie/beedb 3.4 go fmt 格式化代码 3.5 go test 自动读取目录下名为 *_test.go的文件,生成并并运行测试用的可执行文件

4. go语法基础

4.1 定义变量 4.1.1 var name type | 定义一个变量 4.1.2 var name1,name2 type | 定义多个变量 4.1.3 var name1 type = value | 定义变量并初始化值 4.1.4 var n1,n2,n3 type = v1, v2, v3 | 同时初始化多个变量 4.1.5 var n1,n2,n3 = v1, v2, v3 | 简短声明初版, 适合全局变量 4.1.6 n1,n2,n3 := v1,v2,v3 | 简短声明终版, 只适合于函数内部,外部无法编译通过 4.1.7 _,b:=34,35 | 下划线是特殊变量名,任何赋予它的值都会被丢弃 4.2 常量 4.2.1 const name = value | 定义一个常量 4.2.2 const Pi float32 = 3.1415926 | 定义常量并指定类型。 4.3 内置基础类型 4.3.1 bool 类型,值为true或false 4.3.2 int 和 unit 类型,也有些指定类型:rune、int8、int16、int64和 byte、unit8、uint16、uint32,uint64,其中rune是int32的别称,byte是unit8的别称。这些类型的变量之间不允许相互赋值,编译时会报错。 4.3.3 string 字符串类型,用一对 “”或 ‘’来定义 例如 s1, s2, s3 := "a", "b", "c" 字符串的值无法直接修改,比如“hello”,想修改“h”为“c”,有两种方式:1、先转成byte数组改完后转回string 2、利用切片 s2 := "d" + s1[1:] 4.3.4 error 类型,专门用来处理错误 4.3.4 iota 枚举,默认是从0开始 const ( deleted = iota checked invalid = 3 ) 4.3.4 go程序设计规则 大写字母开头的变量是可导出的,是公用变量 小写字母开头的变量是不可导出的,是私有变量 大写字母开头的函数,是公用函数 小写字母开头的函数,是私有函数 4.3.5 array var arr [n]type | 定义一个数组 arr:=[3]int{1,2,3} | 简短声明 arr:=[10]int{1,2,3} | 简短声明,其他默认为0 arr:=[…]int{4,5,6} | 自动根据元素个数来计算长度 doubleArr:=[2][4]int{[4]int{1,2,3,4},[4]int{5,6,7,8}} | 声明二维数组 doubleArr:=[2][4]int{{1,2,3,4},{5,6,7,8}} | 如果内部的元素与外部的一样,简化写法 数组是不可变长度的 数组之间的赋值是值的赋值,即把一个数组作为参数传入函数逇时候,传入的其实是该数组的副本,而不是它的指针。 4.3.6 slice “动态数组”: 并不是真正意义上的动态数组,而是引用类型 var fslice []int | 定义一个slice slice:=[]byte{'a','b','c'} | 定义并初始化 b = ar[5:10] | 取5-10片段的数据 4.3.7 map 字典 var numbers map[string]int |定义一个字典 numbers := make(map[string]int) | rating := map[string]float32{"c": 5, "go": 4.5, "Python": 4.5, "C++": 2} | 初始化 delete(map,key) | 删除KEY map是无序的,每次打印出来的map都会不一样 map的长度是不固定的,和slice一样,是一种引用类型 4.3.8 make 用于内建类型(map、slice、channel)的内存分配 new: 初始化对象,返回该对象的首指针。可用于初始化任何类型 make: 返回一个初始化的实例,而不是指针。 4.4 if else 在条件判断语句里允许声明一个变量,这个变量的作用于只能在该条件逻辑块内,其它地方就不起作用了。 if x := 1; x > 0 { fmt.Print("x is true") } 4.5 goto 用于跳转到当前函数内定义的标签 func main() { i := 0 Here: println(i) i++ if i < 10 { goto Here } fmt.Println("Finish") } 4.6 for for exp1;exp2;exp3{ } exp1 和 exp3 是变量声明或者函数调用返回值之类的。exp2是用来条件判断。 func main() { sum := 0 for index := 0; index < 10; index++ { sum += index } fmt.Println("sum is equal to ", sum) } func main() { mp := make(map[string]int, 10) mp["a"] = 1 mp["b"] = 2 for k, v := range mp { fmt.Println("map's key: ", k) fmt.Println("map's value: ", v) } } 4.7 switch fallthrough 可以强制执行下一个case

5. 函数

5.1 定义函数 func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) { //这里是处理逻辑代码 //返回多个值 return value1, value2 } 5.2 定义变参函数 func myfunc(arg …int){} 5.3 传值与传指针 传指针使用多个函数能操作同一个对象 传指针比较轻量级(8bytes),只是传内存地址,当传递大的结构体的时候,可以节省(内存和时间) 5.4 defer 延迟语句,会在函数最后面执行 记住:defer是先进后出,当一个函数定义多个defer,最后一个先执行。 5.5 函数作为值、类型 type typeName func(input1 inputType1 [, input2 inputType2 [, ...]) (result1 resultType1 [, ...]) 5.6 panic 与 recover func main() { fmt.Println("Hello") defer func() { if err := recover(); err != nil { fmt.Println(err) } }() panic("i am error") } 5.6 main 和 init 函数

6. import

包导入功能,支持两种方式加载 6.1 相对路径导入 import “./model” | 当前文件同一目录的model目录,不建议使用 6.2 绝对路径导入 import “shorturl/mode” 6.3 .操作符 import ( .”fmt”) | 调用方法时,可以忽略包名,例如 : Println(”hello“) 6.4 别名操作 import ( f “fmt”) | 使用时: f.Println(“hello”) 6.5 _操作 import (_ “github.com/ziutek/xxx”) _操作其实是引入该包,而不直接使用包里的函数,而是调用init函数

7. struct 结构体

7.1 定义结构体 type Person struct { name string age int } 7.2 初始化 var person Person | 声明 person := Person{name: "jxp", age: 12} | 声明并赋值 7.3 结构体方法 func (c *Person) say(what string) { fmt.Println(what) } 7.4 结构体内聚 type Human struct { name string age int } // Person ... type Person struct { Human sex string hobbit string } func (c Person) say(what string) { fmt.Println(what) } func main() { p := Person{Human:Human{name: "jxp", age: 12}, sex: "man", hobbit: "aa"} fmt.Println(p) }

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jmeter高手高高手

Jmeter(五)_函数

1、它有两个参数,第一个参数是要执行的语句,可以是beanshell语句或者是文件地址,是必选参数;第二个参数是保存结果的变量名称,非必选参数。

1632
来自专栏Golang语言社区

转-Go语言开发常见陷阱,你遇到过几个?

Go作为一种简便灵巧的语言,深受开发者的喜爱。但对于初学者来说,要想轻松驾驭它,还得做好细节学习工作。 初学者应该注意的地方: 大括号不能独立成行。 未使用变量...

3539
来自专栏mySoul

TypeScript入坑

安装插件 https://github.com/Microsoft/TypeScript-Sublime-Plugin

1421
来自专栏小樱的经验随笔

线段树区间更新操作及Lazy思想(详解)

此题题意很好懂:  给你N个数,Q个操作,操作有两种,‘Q a b ’是询问a~b这段数的和,‘C a b c’是把a~b这段数都加上c。 需要用到线...

5047
来自专栏包子铺里聊IT

Regular Expression Matching Problems 1

这篇博文我们探讨一下regular expression matching的问题,我们先由一道简单的题入手 [例题1] Given a string of 1...

32912
来自专栏大内老A

ASP.NET Web API中的Controller

虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是A...

19210
来自专栏java一日一条

教你在Java接口中定义方法

接下来,SimpleTimeClient类实现了TimeClient接口,具体代码如下:

712
来自专栏杨龙飞前端

js中的this关键字,setTimeout(),setInterval()的执行过程

1305
来自专栏nummy

ECMAScript 6 特性ECMAScript 6 特性

ECMAScript 6,也被称做ECMAScript 2015,是ECMAScript标准的下一个版本。这个标准预计将于2015年6月被正式批准。ES6是这门...

821
来自专栏积累沉淀

JSON

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式...

2918

扫码关注云+社区