本文是参考多篇 Golang 教程文章而组织出的入门教程,旨在帮助开发者快速上手 Golang。
参考文章:
数据类型
- 借助工具实现一些数据类型转换: ```go package main
import ( “fmt” “strconv” “strings” )
func main() { /**
* 字符串数组 -> 字符串
*/
ary := []string{"W", "J", "T"}
fmt.Println(strings.Join(ary, ""))
/**
* 数字 -> 字符串
*/
num := 10
fmt.Println(strconv.Itoa(num) + " am") // 拼接一个字符串,表示数字已转换为字符串
}
<a name="8ZwFW"></a>
## 语言变量与常量
参考《[Go 语言变量](http://codingdict.com/article/6750)》、《[Go 语言常量](http://codingdict.com/article/6751)》等文章。
```go
// 这种不带声明格式的只能在函数体中出现
g, h := 123, "hello"
// 这种只能出现在全局变量中,函数体内不支持
var (
a int
b bool
)
函数
参考《Go 语言函数》一文。
数组
参考《Go 语言数组》、《Go 系列教程 —— 11. 数组和切片》、《Go 语言切片(Slice)》等文章。
- 基础操作: ```go package main
import “fmt”
func main() { var ary1 [5]int // 声明一个长度为5的int类型数组 var ary2 = []int{1, 2, 3, 4, 5} // 声明并初始化一个int类型数组,不用声明长度
/**
* 指定长度但未初始化数组,以0填充之
*/
fmt.Println(ary1, ary2) // [0, 0, 0, 0, 0] [1, 2, 3, 4, 5]
/**
* 使用for range遍历数组,输出:
* 0: 1
* 1: 2
* 2: 3
* 3: 4
* 4: 5
*/
for index, item := range ary2 {
fmt.Printf("%d: %d\n", index, item)
}
}
2. 切片:
```go
package main
import "fmt"
func main() {
var slice1 []string // 定义切片
/**
* 切片未初始化前等于nil,长度为0
*/
fmt.Println(slice1, slice1 == nil) // [] true
strAry := []string{"A", "B", "C", "D", "E", "F"} // 数组
slice1 = strAry[1:3] // 切片: ["B", "C"]
/**
* len()获取切片当前长度;
* cap()获取切片可达到的最大长度;
*/
fmt.Println(len(slice1), cap(slice1)) // 2 5
/**
* 使用append()往切片追加元素
*/
slice1 = append(slice1, "G", "H")
fmt.Println(slice1) // ["B", "C", "G", "H"]
/**
* 使用copy()实现切片拷贝
*/
slice2 := make([]string, len(slice1), cap(slice1)) // 使用make()创建切片
copy(slice2, slice1)
fmt.Println(slice2) // ["B", "C", "G", "H"]
}
- 二维数组:
ary := [][]string{
{"name Like", "%ABC%"},
}
指针
参考《Go 语言指针》一文。
结构体
参考《Go 语言结构体》一文。
结构体与指针结合,可实现动态改变一个结构体变量的值。
集合
参考《Go 语言Map(集合)》一文。
package main
import "fmt"
func main() {
/**
* 集合的初始化
*/
map1 := make(map[string]string)
map1["uuid"] = "aceghopljs1"
map1["userName"] = "WJT"
/**
* 遍历集合,输出:
* uuid: aceghopljs1
* userName: WJT
*/
for key := range map1 {
fmt.Printf("%s: %s\n", key, map1[key])
}
/**
* 删除map中的一个键值对
*/
delete(map1, "userName")
fmt.Println(map1["userName"]) // ""
}
字符串操作
参考《golang 字符串》一文。
包
参考《golang import基础》一文。
Golang 支持通过相对路径、绝对路径的形式导入指定位置的包:
import "./model" // 当前文件同一目录的model目录,但是不建议这种方式import
import "shorturl/model" // 加载GOPATH/src/shorturl/model模块
import 的同时,还能对引入的包进行以下操作:
// 点操作,导入该包后,调用其中的api,可以省略前缀的书写
import(. "fmt")
// 别名操作,给引入的包重新定义一个名字,主要避免变量污染问题
import(baseModel "locusts-go-server/model")
// _操作,仅仅执行其中的init()函数,而无视包的内容
import(_ "github.com/jinzhu/gorm/dialects/mysql")