一、初识Go语言
- 高性能、高并发,通过goroutine和channel实现。
- 语法简单、学习曲线平缓,可读性强。
- 丰富的标准库,特别是对于与网络协议和API开发相关。
- 完整的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
jspackage main
import "fmt"
func main() {
fmt.Println("Hello World go!")
}
二、Go语言基础语法
1.声明变量
var a int = 1//初始化一个变量并赋值
var b,c int = 1,2//初始化多个变量并赋值
var d = 3//自动推导变量类型
e := 4//等同于var e = 4
const f = "hello"//const用来声明常量
2.条件语句
- 条件语句不需要使用括号将条件包含起来()
- 无论语句体内有几条语句,花括号{}都是必须存在
if a < 5 {
return 0
} else if > 1{
return 1
} else {
return -1
}
3.循环语句
- 在Go语言中,只能使用for循环,不支持while和do-while 结构
- 在循环中可使用break和continue跳出或者继续循环
i := 1
for{
fmt.Println("hello")
break
}
for j := 1; j < 3; j++{
fmt.Println(j)
}
for n := 0; n < 5; n++{
if n%2 == 0{
continue
}
fmt.Println(n)
}
4.选择语句
- 条件表达式不限制为常量或者整数
- 单个case中,可以出现多个结果选项
- switch后面可不加任何变量,在case里写条件分支
a := 1
switch a {
case 1:
fmt.Println("one")
case 2,3:
fmt.Println("two or three")
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() , 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
5.数组
- 是一个具有编号且长度固定的元素序列
//初始化长度为5的int数组,默认值为0
var a [5]int
//初始化直接赋值
b := [5]int{1,2,3,4,5}
6.slice切片
- 可以任意更改长度
- 用append来追加元素必须要将append的结果赋值为原数组
- 可任意取出元素
s := make([]String,2)
s[0] = "a"
s[1] = "b"
fmt.Println("get:", s[1]} //b
fmt.Println("len:", len(S)) //2
//append 结果赋值给原数组s
s = append(s,"c")
s = append(s,"d","e")
fmt.Println(s) //[a b c d e]
fmt.println(s[2:4]) //[c d]
fmt.println(s[:4]) //[a b c d]
fmt.println(s[2:]) //[c d e]
7.map数据结构
- golang的map是无序的,遍历时随机输出
- 使用make来创建空map,需要key类型和value类型
- 可以存储、取出、删除键值对
m := make(map[string]int)
m["one"] = 1
fmt.Println(m) //map[one:1]
//添加
m["two"] = 2
fmt.Println(m) //map[one:1 two:2]
//删除
delete(m,"one")
fmt.Println(m) //map[two:2]
//更改
m["two"] = 3
fmt.Println(m) //map[two:3]
8.函数
- 函数变量类型后置
- 支持多个返回值
- 在实际业务逻辑中几乎所有函数返回俩个值,第一个是结果,第二个是错误信息
func add(a int, b int) int {
return a + b
9.指针
- 主要用来对传入参数进行修改
func add(n int) {
n +=2
}
fun addptr(n *int){
*n +=2
}
func main(){
n :=5
add(n)
fmt.Println(n) //5 将n拷贝进入add函数中加2,但本身的n的值没有发生变化
addptr(&n)
fmt.Println(n) //7 将n的地址带入addptr中进行运算,实际的n发生变化
10.结构体
- 结构体是带类型的字段集合
- 实现结构体带指针:可以对结构体修改
- 实现结构体不带指针:不可以修改,实际为一个拷贝
type user struct {
name string
password string
}
三、个人总结
Go语言语法也比较简单和之前学过的C和Java差不多,但在一些细节方面要注意区别。我最常用的是Java,唯一麻烦一点就是指针,在指针这块的应用还是很别扭,之后勤加练习。