Golang简介

前言

任何新技术的出现:无非是出于2种原因,相对之前提升了效率  或者 使用这种技术更加便捷。

go语言是一种新型的开源计算机编程语言,天然利用了 多核优势  性能优越支持大并发,go开发的代码编译后  可以在Windows和Linux环境到处运行 不用额外装什么Java、Python环境、配置环境变量....

轻松地支持大并发

代码部署简单

这2点深深吸引了我。

/*
在写go代码的开始一定要声明,当前的文件属于什么类型的包,
定义了1个main包 也就是可独立执行的程序
每1个go程序都应该包含1个main包
*/
package main

/* 导入1个包 */
import "fmt"

/* 定义程序启动后 执行的第1个main函数*/
func main() {
    fmt.Println("Hello Martin")
}

/*
go文件是以.go结尾的文件
必须包含在1个目录下
*/

一、什么是go语言

Google开源

2007年在Google公司内部萌芽的语言,2009年Google讲go正式开源

编译性语言

Python、php代码都是由解释器  把代码翻译成字节码 一边解释一边执行,而go、c、c++是编译工具编译成二进制文件 直接交给操作系统执行。

所有编译性语言和解释型语言对比 少了1个中间翻译的环节,执行起来就会更快,在部署这些程序的时 也比较简便 因为不需要下载解释器,只需要把二进制可执行文件copy到服务器  交给操作系统执行二进制文件即可。

21世纪的C语言

 

 C、C++、Python、Ruby、JavaScript都诞生于 多核出现之前(2005年),而go语言出现在多核时代之后,所以 go在设计支持就考虑到了适配多核CPU天生支持了并发,不需要像Python借助 借助第三方的库、复杂的语法糖 支持并发。

go语言设计的宗旨就是 简化了c的语法兼顾了c的性能 所以go=c+python

为了能拿到来着以下大厂的offer   Let's go. 

执行go代码

 1.go run

解释执行 go文件

D:goprojectsrchello>go run hello.go
Hello Martin

2. go build 

把go文件编译成二进制文件

2.1在代码所在目录下编译

D:goprojectsrchello>go build hello.go

2.2 在其他目录下编译go代码

需要指定 go文件的路径但是  也就是 go pathsrc目录后面的路径,这样做的结果是你什么路径下执行的go build 那个编译好的  二进制文件就在什么路径下

C:UsersAdministrator.PC-20170811HMNW> go build code.zhanggen.comstudygoday01hello

 2.3 go build -o 指定二进制文件名

D:goprojectsrchello>go build -o  爱叫啥叫啥

3.go install 

编译二进制文件 + 把编译好的二进制文件自动放在 gopath/bin目录下

D:goprojectsrchello>go install hello

4.交叉编译(跨平台编译)

我们一般在Windows/Mac开发 去Linux部署,那么如何在Windows、Mac平台编译出Linux可以执行二进制文件呢?

Windows ----Linux

D:goprojectsrchello>SET CGO=ENABLED=0  //禁用CGO

D:goprojectsrchello>SET GOOS=linux  

D:goprojectsrchello>SET GORACH=adm64

D:goprojectsrchello>go build hello.go

 Mac ---Linux

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Linux ------- Mac

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build

Linux-----Windows

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Windows ---Mac

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build

Go程序的目录结构

在go path下的

bin:存放编译之后的二进制文件程序的入口

pkg:源码编译成二进制文件过程中产生的包

src:存放go源码

注意每1个go文件都要存放到1个目录里面

 go语言定义 变量和常量

Go是一门静态语言  不同于Python、JavaScript 等动态语言  变量声明时就要指定数据类型、声明之后如果是局部变量 就必须要使用否则会编译不通过。

还有1个很大不同Go的执行语句都必须写在函数里面,函数外面只能声明变量 、声明函数。

注意事项:

a.函数外的每个语句必须以关键字开始(var、const、func)

b. :=只能使用于函数内,不能使用在函数外

c._多用于占位,表示忽略

d.同一个作用域中 不能同时声明2个相同的变量

package main

import "fmt"

//Go语言推荐使用驼峰式命名
//变量既可以声明在函数体内也可以声明在函数体外
var name string
var age int
var isOk bool //Go语言推荐使用驼峰式命名

//批量声明 不用每次都写个 var
var (
	name1 string //没有赋值前默认为空字符 ""
	age1  int    //没有赋值前默认为0
	isOk1 bool   //没有赋值前默认为false

)

//变量初始化(对声明的变量进行赋值)

func main() {
	name = "Martin"
	age = 18
	isOk = true
	//Print 在终端打印不会加换行
	fmt.Print(name1)
	//Println 打印内容后面自动加上换行
	fmt.Println(age1)
	//Printf支持内容格式化输出
	fmt.Printf("name:%s age:%d isOk: %t", name, age, isOk)

	var name2 string
	name2 = "Martin2" //name2 declared and not used
	fmt.Println()     //打印1换行
	fmt.Print(name2)  //变量只要在函数内 声明之后  就必须要使用 否则会编译不通过

}

  

声明变量的同时赋值

package main

import "fmt"

func main() {

	//声明变量的同时赋值
	var name3 string = "Martin3"
	//数据类型自动推到
	var age3 = 20
	//简短变量声明(只能用于函数)
	isOk3 := false
	fmt.Println(name3, age3, isOk3)

}

  

 

常量+iota

程序目录结构、变量声明 +赋值 、 开始感受到Go的严谨了,常量就是一经声明和赋值,在程序运行期间 就不可以更改的变量。 

声明常量 默认值

package main

import "fmt"

//声明1个常量
const pi = 3.14

//批量声明常量
const (
	StatusOk    = 200
	PathNotFind = 404
)

//批量声明常量时 没有赋值的情况下默认和上一行一致
const (
	n1 = 100
	n2 //没有赋值默认值为该变量上面的值 也就是100
	n3
)

func main() {
	fmt.Printf("n1:%d n2:%d n3:%d", n1, n2, n3)
}

iota

iota 是go语言中的常量计数器,只能在常量的表达式中使用

iota在const关键字出现时将被重置为0

const中每新增1行常量声明将使 iota 计数 +1(类似于MySQL id列)

package main

import "fmt"

//声明1个常量
const pi = 3.14

//批量声明常量
const (
	StatusOk    = 200
	PathNotFind = 404
)

//批量声明常量时 没有赋值的情况下默认和上一行一致
const (
	n1 = 100
	n2 //没有赋值默认值为该变量上面的值 也就是100
	n3
)

//iota
const (
	a0 = iota //0
	a1 = iota //1
	a2 = iota //2

)

const (
	b0 = iota
	b1 //b1=iota
	_
	b2
)

//iota 插队
const (
	c1 = iota
	c2 = 100
	c3
	c4 = iota //3每新增1行 iota +1 由于新增的2行 iota=3
	c5
)

//多个常量声明在1行

const (
	d1, d2 = iota + 1, iota + 2 //d1=0+1,d2=0+2 注意:因为常量声明在了同行所有 不会加1
	d3, d4 = iota + 1, iota + 2 // d3=1+1,d4=1+2
)

//定义数量级
const (
	_  = iota
	KB = 1 << (10 * iota) //1左移 10位
	MB = 1 << (10 * iota) //1左移 20位
	GB = 1 << (10 * iota) //1左移 30位
	TB = 1 << (10 * iota) //1左移 40位
	PB = 1 << (10 * iota) //1左移 50位
)

func main() {
	// fmt.Printf("a0:%d a1:%d a2:%d", a0, a1, a2)
	// fmt.Printf("b0:%d b1:%d b2:%d", b0, b1, b2)//0 1 3
	//fmt.Printf("c1:%d c2:%d c3:%d c4:%d c5:%d", c1, c2, c3, c4, c5) //0 100 100 100
	// fmt.Print(d1, d2, d3, d4)
	fmt.Print(KB, MB, TB, PB)
}

  

  

Go文件基础语法总结

编程语言就是人类和计算机交流的工具,就像人类和人类之间交流使用的汉语、英语、日语、汉语一样,由于发明和使用它们的人们地域、文化、思想、追求、价值不同,所以它们的语法和风格有不同之处,但除了地域不同之外 我们也有很多相同之处。

I like sunny girl who has long brown hair.

我喜欢开朗、棕色头发的女孩。

咬文嚼字地分析一下汉字和英文

英语:先说我喜欢阳光的姑娘,然后再丰富具体的细节。(先说重点.....再慢慢补充)

中文:把所有形容词都形容出来了再说表语   (先慢慢铺垫....最后出现重点)

虽然中文和英文的有些语法不同, 但2句话最终要做的事情是一样的 约会。

学会采用 2者对比的方式 来记忆、学习、理解不同的东西。

 -------------------------------------------------------------------------------------------------------------

1.存放Go源代码的文件后缀名以.go结尾不是.py了

2.文件第一行 使用 package main声明文件作用类型(声明这是 1个可执行文件?还是写得1个供别人调用使用的模板)

3.如果是1个可执行的文件,必须要有main包和main函数,这个mian函数也是程序执行的入口

4.Go语言函数体外的语句必须以关键字(var、func、const)开头(不像Python那样在py文件里任意位置 写什么代码都行)

5.函数内部的变量必须使用(所以Go中有哑元变量 _ ,它的作用就是仅接收变量 但不使用)

print打印

Go里面使用fmt这个包实现打印输出的功能,但是这个包里面的方法有很多,不像Python里面就1个print()全部搞定     

目前printf支持以下格式的输出,例如:

printf("%c",a);输出单个字符。

printf("%d",a);输出十进制整数。

printf("%f",a);输出十进制浮点数.

printf("%o",a);输出八进制数。

printf("%s",a);输出字符串。

printf("%u",a);输出无符号十进制数

printf("%x",a);输出十六进制数。

package main

import (
	"fmt"
)

func main() {
	//fmt
	var n1 = 100
FirstName='张' name := "张根" fmt.Printf("%T ", n1) //查看变量的数据类型 fmt.Printf("%b ", n1) //查看2进制 fmt.Printf("%o ", n1) //查看8进制 fmt.Printf("%d ", n1) //查看10进制 fmt.Printf("%x ", n1) //查看16进制 fmt.Printf("%s ", name) //查看字符串 fmt.Printf("%v ", name) //查看变量值 fmt.Printf("%#v ", name) //打印带双引号的"变量值"
     fmt.Printf("%c",FirstName) //打印字符
      }

  

参考

原文地址:https://www.cnblogs.com/sss4/p/12496665.html