语言介绍:语法简单,高并发,支持内存回收,支持开发效率和代码执行效率
安装环境:
- 在线开发环境(https://golang.org/)
- 本地开发环境搭建,安装包下载地址(https://golang.org/dl/)。支持*nix,window和其他平台。
- 开发工具,基于intellj的开发工具,推荐的有LiteIDE(用go写的),Notepad++,vim,Eclipse等。
1. hello,world
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
- 程序必须在package 为main的文件下,同一个包下面的文件package名需要一样。
- 开发函数必须是main()方法
- 在main方法后的
{
不能另起一行。 - 公开可调用的方法必须是大写字母开头
项目工作空间的配置
每一个工程都需要配置在GOPATH
变量的定义和范围修饰符
var 定义变量
const定义常量
a,b := 2,"string" //在方法内部,可以用该方式简写
基本数据类型
基本数据类型和自定义类型
var a int
var b bool
var str string
简写的方式:
var(
a int
b bool
str string
)
函数的定义,多返回值
/**
读取数据库的配置文件
*/
func ReadDbConfig(path string) (*DbConfig,error) {
res,err := ioutil.ReadFile(path)
if err!= nil {
return nil,err
}
var config DbConfig
err = json.Unmarshal(res,&config)
if err != nil {
return nil,err
}
return &config,nil
}
数组,slice,map,自定义类型以及他们的初始化
var a [12]int
a[0] = 12
fmt.Println("a[0]",a[0])
切片类型
//基于数组创建
var a [12]int
a[0] = 12
b := a[:cap(a)/2]
b[2] = 23
fmt.Println("b",b)
//直接创建
var b []string
b = make([]string,10)
b[0] = "test0"
b[1] = "test0"
b[2] = "test0"
b[3] = "test0"
b[4] = "test0"
fmt.Println("b",b)
map类型
result := make(map[string]interface{})
result["code"] = 200
result["msg"] = "上传成功"
result["data"] = ""
re,_:=json.Marshal(result)
fmt.Println(string(re))
自定义类型
type People struct {
Name string
Age int
Sex string
}
p0 := new(People)
p1 := &People{}
p2 := &People{"yanghai",18,"man"}
p3 := &People{Name:"yanghai",Age:18}
接口
import "fmt"
type Animal interface {
Run() error
Eat(foodName string)
}
type Animal2 interface {
Run() error
Eat(foodName string)
}
type People struct {
Name string
Age int
Sex string
}
func (p People) Run() error {
return nil
}
func (p People) Eat(foodNmae string) {
fmt.Println("name = ",p.Name ," eat = ",foodNmae)
}
两个协程利用channel通信处理一个数组的相加
import "fmt"
//利用多协程计算和
func TestSum() {
values := [] int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
resultChan := make(chan int, 2)
go sum(values[:len(values)/2], resultChan)//从0到一半的位置
go sum(values[len(values)/2:], resultChan)//从一半的位置打最后的位置
sum1, sum2 := <-resultChan, <-resultChan //
fmt.Println("Result:", sum1, sum2, sum1+sum2)
}
func sum(values [] int, resultChan chan int) {
sum := 0
for _, value := range values {
sum += value
}
resultChan <- sum // channel
}
go web
- hello,world
- 解析json文件
- 链接数据库
资料链接
go入门指南
Go语言编程.pdf
Go Web编程.pdf-谢孟军
Go语言实战.pdf
go读书笔记-第五版
go并发编程实战第二版
goweb编程-黄键宏最新版