Golang基础语法

一,变量和常量

1,变量的声明
声明格式:  var  变量名  变量类型
var name string
name = "小明"
fmt.Println(name)

批量声明:

var age,height int8  //变量类型相同
age = 18
height = 170   //constant 170 overflows int8

var (    //类型变量不同
        a string
        b int
        c bool
        d float32
    )

声明并赋值:

hobby := "打篮球"

程序自动判断:

var teacher = "李小龙"
var name,age = "小李" , 18

注意事项:

  1. 变量声明的时候会在变量对应的内存区域进行初始化操作,每个变量会生成该变量所属类型的一个初始默认值,例如:整形和浮点型:0;字符串:空字符串;布尔类型默认值为:false;切片,函数,指针变量默认为nil
  2. 变量声明之后要使用,如果不使用则会报错
  3. 字符串可用双引号 " " ,或者 反引号 ` ` 表示,不可以用单引号。但是反引号不支持转义(例如\n转义为换行),而是直接输出 \n
  4. 在函数的外部,声明变量必须用 var 关键字,而不能用 := 的方法声明
2,匿名变量(anonymous variable)
  • 匿名变量不占用命名空间,不分配内存,所有匿名变量不存在重复声明
  • 我们常用匿名变量,表示要忽略掉(不使用)该变量
  • 我们只执行包的初始化,但是不使用包,也应用到匿名变量
func foo() (int, string) {
    return 10, "Q1mi"
}
func main() {
    x, _ := foo()
    _, y := foo()
    fmt.Println("x=", x)
    fmt.Println("y=", y)
}
3,常量

常量定义之后,在整个程序的运行中,都保持不变。常量的定义与变量类似,只是把 var 关键字换成 const 关键字 就可以了

const pi = 3.1415
const e = 2.7182

二,打印输出

golang的打印输出依赖:fmt包 import ("fmt" )

  • fmt.Println() 打印并换行
  • fmt.Printf() 格式化输出
  • 查看变量类型用reflect.TypeOf()
type Cat struct{
    length int8
    color string
    skill string
}

kitty := Cat{
    length  : 5,
    color   : "orange",
    skill   : "catch mouse",
}
fmt.Println(kitty)        // {5 orange catch mouse}
fmt.Printf("kitty是:%v \n",kitty)   // %v是默认的占位符:kitty是:{5 orange catch mouse}
fmt.Printf("kitty是:%+v \n",kitty)  // %+v会打印键值对: kitty是:{length:5 color:orange skill:catch mouse}
fmt.Printf("kitty是:%#v \n",kitty)  // %#v会打印类型+键值对: kitty是:main.Cat{length:5, color:"orange", skill:"catch mouse"}

var teacher = "李小龙"
fmt.Println(reflect.TypeOf(teacher)) // string  查看变量类型
fmt.Println(reflect.TypeOf(kitty))  //查看变量类型:main.Cat

参考文章:https://studygolang.com/articles/20310

1,通用占位符:
v     值的默认格式。
%s    输出字符串表示(string类型或[]byte) 
%+v   添加字段名(如结构体)
%%    字面上的百分号,并非值的占位符
2,整数占位符:
%b    二进制表示
%d    十进制表示
%x    十六进制表示
3,浮点数及复数:
%b 无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat中的 'b' 转换格式一致。例如 -123456p-78
%f 有小数点而无指数,例如 123.456
4,指针:
%p 十六进制表示,前缀 0x
fmt.Printf("%p \n",&kitty)   // 0xc000070330

三,命令行

  • 在命令行执行: go 会列出所有命令
  • 在命令号执行:go help + 命令 可以获得帮助
    常用命令有:

go version 查看版本
go env用于打印Go语言的环境信息。
go run命令可以编译并运行命令源码文件。
go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。
go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包。
go install用于编译并安装指定的代码包及它们的依赖包。
go clean命令会删除掉执行其它命令时产生的一些文件和目录。
go doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。
go test命令用于对Go语言编写的程序进行测试。
go list命令的作用是列出指定的代码包的信息。
go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
go vet是一个用于检查Go语言源码中静态错误的简单工具。
go tool pprof命令来交互式的访问概要文件的内容。

三,变量的复制,引用,指针变量

&符号在go中是取内存地址的意思, &a就是获取变量a的内存地址

1,变量的赋值是值传递

var age int8 = 18
fmt.Println(age) // 18
fmt.Println(&age) // 0xc0000120a0

var age1 int8 = age
fmt.Println(age1) // 18
fmt.Println(&age1) // 0xc0000120b6 可以发现age与age1的地址空间并不相同

2,指针

var age int = 18
fmt.Println(&age) // 0xc0000120a0

var agePoint *int  //解析:agePoint 是一个指针变量,int是指该指针变量的类型,*表示该变量(agePoint)是一个指针变量 
fmt.Println(agePoint) // nil,当一个指针被定义后没有分配到任何变量时,它的值为 nil。

//*agePoint = 1 //报错,原因:我们定义一个指针(agePoint),指针分配了地址(指针地址),但是指针指向的值(*agePoint)还没有分配到地址
//fmt.Println(*agePoint) //报错,原因:与上相同,只分配了指针地址,还没分配 值 地址

agePoint = &age
fmt.Println(*agePoint) // 18
fmt.Println(agePoint) // 0xc0000120a0  可见,与age变量的内存地址是一样的

*agePoint = 29
fmt.Println(age) // 29 可见,改变 *agePoint,age也会一同改变

上面代码中:

  • var age 是一个int类型的值,而 var agePoint 是一个指针
  • *agePoint 是一个值
  • &可以取到某个变量的内存地址,这个内存地址可以赋值给一个指针变量
  • 改变 *agePoint,age也会一同改变,因为这两个变量的值,存放在:相同的内存地址
3,接收指针的函数
func main()  {
    var myAge int8 = 18
    var yourAge int8 = 28

    changeEachOther(&myAge,&yourAge)
    fmt.Println(myAge)   // 28
    fmt.Println(yourAge) // 18
}

//交换两个变量的值
func changeEachOther(x *int8,y *int8) {
    fmt.Println(x) // x是一个内存地址,0xc0000120a0,其实 x 就是 &myAge
    fmt.Println(*x) // *x是&myAge内存地址里面的值,18

    var temp int8 = *x
    *x = *y
    *y = temp
}

4,传值与传引用

四,内置类型和函数:

1,内置类型--值类型:
bool
int(32 or 64), int8, int16, int32, int64
uint(32 or 64), uint8(byte), uint16, uint32, uint64
float32, float64
string
complex64, complex128
array    -- 固定长度的数组
2,引用类型(指针类型)
slice   -- 序列数组(最常用)
map     -- 映射
chan    -- 管道
3,内置函数

Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。

    append          -- 用来追加元素到数组、slice中,返回修改后的数组、slice
    close           -- 主要用来关闭channel
    delete          -- 从map中删除key对应的value
    panic           -- 停止常规的goroutine  (panic和recover:用来做错误处理)
    recover         -- 允许程序定义goroutine的panic动作
    real            -- 返回complex的实部   (complex、real imag:用于创建和操作复数)
    imag            -- 返回complex的虚部
    make            -- 用来分配内存,返回Type本身(只能应用于slice, map, channel)
    new                -- 用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
    cap                -- capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
    copy            -- 用于复制和连接slice,返回复制的数目
    len                -- 来求长度,比如string、array、slice、map、channel ,返回长度
    print、println     -- 底层打印函数,在部署环境中建议使用 fmt 包
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容