go语言学习(1)——基础知识

本文介绍了GO语言,它是快速编译的编译型语言,追求高性能与高开发效率,具备类型安全等特点。还阐述了其语法,包括定义包、函数,变量声明与赋值,类型转换等,强调了编译设置、关键字、标识符等内容,以及不同数据类型和默认值。

GO语言简述

特点

  • 快速编译的编译型语言
  • 追求高性能和高开发效率
  • 类型安全、内存安全
  • 直观且代价低的方式实现高并发
  • 高效的垃圾回收
  • 解决多核性能提升
  • 原生支持utf8

开发工具

LiteIDE可能是不错的选择。

手册

go-wiki
官方的在线说明
godoc
即本地的手册服务器,在8080打开go的文档,启动命令:

godoc -http-:8080

GO的语法

定义包

	package main{
	}

关于mian

  • 程序运行后执行package main,其他包都是导入后运行。
  • package名为main的包可以包含main函数。
  • 一个可执行程序有且只有一个main()。
  • main函数没有返回值。

单个包导入

import "fmt"

批量导入包

import(
"fmt"
...
)

别名

	import(
	io "fmt"
	...
	)

省略调用

import(
. "fmt"
)

定义函数

func main(){
}

内置的关键字

内置关键字均为小写。

  • import 导入其他包
  • const 定义常量
  • var 声明全局变量
  • type 定义新类型

可以是一般类型或者结构struct或者是接口interface的声明

  • func 定义函数

注释的方法

//进行单行注释

/*进行多行注释*/

其他

如果导入了没有使用,编译的时候也会出错,需要去除。

比较隐晦的是,GO采用是否大小写首字母来区分符号是否可以被导出。大写字母开头表示公有可调用public,小写字母开头表示包内部的私有符号private。小写的不能被其他包调用成功。

运行和调试

编写好之后执行如下命令即可运行程序产生结果:

go run demo.go

批量定义

	// 常量定义
	const (
	a = 123
	b = 456
	c = "whatfa"
	)
	// 变量定义
	var (
	v1 = 321
	v2 = "321"
	)
	//一般声明
	type (
	type1 float
	type2 string
	)

数据类型

bool
int/uint 同操作系统位数
int8/uint 8位整形
byte 字节型(等价uint8)
complex64复数类型
uintptr指针类型
array
struct
string
slice
map
chan
inteface
func 函数可以赋值给变量

类型默认值

数字类型通常是0
bool false
string 空字符串
array 空数组

数组

声明时没有指定数组的大小,其实声明的是一个切片。

变量声明和赋值

var 变量名 变量类型
变量名 = 表达式
变量1,变量2 = 表达式1,表达式2 //并行声明

声明和赋值可以合并进行。

没有隐式转换,只能显式转换,否则会出错。转换的类型也要可以相互兼容,否则也会出错。

系统自动推断类型:声明与赋值的时候可以使用变量名 := 表达式,由系统来推断。

全局变量声明可以使用var()方式。
全局变量声明不可省略var,可并行声明
所有变量都可类型推断
局部变脸不能使用var(),可并行声明

_ 赋值的时候忽略这一位的赋值
函数返回固定个数的返回值,但因为某种操作而不要赋值的时候,忽略掉。

十进制数强制转换为字符串

比如string(65),函数是强制将十进制数当做ASCII的十进制值转化成对应的ASCII字符,如果需要将十进制数直接转成同样字符型数字,要使用strconv包,并且反向该包也可以实现。

常量

常量在编译时已经确定。内置函数在编译时已经确定,所以可以出现在常量表达式中。

可以使用const()批量赋值,如果其中有一个省略,则赋予上一个常量赋值时取到的值。常量也可以并行声明赋值,当数量相等的时,可以省略并行赋值表达式,自动赋予上一个同型并行的常量赋值时取到的值。其他样式会报错。

iota常量计数器,从0开始计数,组中没有一个常量递增1。通过初始化规则和iota可以达到枚举效果。

每遇到一个const关键字,iota计数就会变成0。

GO语言中,一般在常量组中使用枚举。

运算符的优先级

运算符是从左至右结合的原则。

一元运算 一般优先级大于 二元运算

<< >>按二进制位进行移位

编译设置

在代码中导入却没有使用的包会再编译时提示错误,禁止编译。

GO命令

#检查环境
go env

# 运行程序
go run xxx.go

go get

#测试
go test 文件

#安装
go install 包名

go fmt

#测试编译
go build

#查看go doc文档
go doc -http=:8080

文件结构

/bin 存放可运行的程序
/pkg 存放依赖的包
/src

25个关键字或保留字:

break
default
func
interface
select
case
defer
go
map
struct
chan
else
goto
package
switch
const
fallthrough
if
range
type
continue
for
import
return
var

36 个预定义标识符

append
bool
byte
cap
close
complex
complex64
complex128
uint16
copy
false
float32
float64
imag
int
int8
int16
uint32
int32
int64
iota
len
make
new
nil
panic
uint64
print
println
real
recover
string
true
uint
uint8
uintptr

注释方法

//单行注释
/*多行注释*/

main

只有main可以使用main函数。
可执行的程序有且只有一个main包。

变量声明

首字母的大小写区分变量的私有还是共有。使用小写,变量就是私有的。
go变量没有隐式转化,只能强制地修改。
省略掉用和别名是不能同时使用的。

常量的声明

const (
  常量名 = 值
  )

只能用在全局变量的声明中,全局变量声明不能省略var,不过可使用并行的方式声明。
所有的变量都可以使用类型推断。
局部变量不可以使用var()方式,但可使用并行方式。

变量组的形式

var(
  变量名 = 值
  )

并行方式

var a,b,c int
a,b,c = 1,2,3
#或者写在一行内
#或省略var用:=替代

一般类型的声明

type(
  变量 变量类型
  )

类型转化

类型必须要兼容,不兼容的类型无法强制转换。转化只能进行显示转化。

# 变量声明
var 名称 类型

# 变量赋值
变量名 = 表达式

# 全都要的写法
var 变量名 变量类型 = 表达式

变量自动推断

形如:

变量名 := 值

系统自动推断变量的类型,但不一定是你想要的类型。
有初始值的时候可放心使用自动推断。

类型

  • bool(只有true和false,不能用0,1来隐式转化)
  • int
  • uint
    根据平台来决定位数的整数。
  • int8
  • uint8
  • byte(即uint8)
  • int16
  • uint16
  • int32
  • uint32
  • rune(即int32)
  • int64
  • uint64
  • float32
  • float64
  • complex64
    复数类型
  • complex128
    复数类型
  • uintptr
    保存指针的32或64位整数型
  • array
  • struct
  • string
  • slice
  • map
    哈希表
  • chan
    通道
  • interface
  • func
    函数类型,可以赋值给变量。

类型零值

函数的零值,也就是默认值。数字类型的通常为0,bool为false,string为空字符串 指针类型为new。
array没有指定大小时,会转化成了一个切片类型。

其他

math包中的min和max大写开头的函数表示了一些值的范围。
因为支持utf8,可以支持中文的别名。
_ 表示占位并且将要省略的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值