hello world

// 表示该文件属于哪个包
package main// 导入包
import "fmt"func main() {fmt.Println("Hello, 世界")
}

基本语法

命名

小写字母开头,驼峰式命名,区分大小写(大写字母用于导出)

声明变量

语法

// var 变量名字 类型 = 表达式
s := ""                  // 简短声明:类型自动推导,要用:=  简短变量声明语句中必须至少要声明一个新的变量
var s string
var s = ""
var s string = ""// new 返回类型为*T的变量地址,是内建函数,不是关键字
p := new(int)  // p为*int类型,指向匿名的int变量

用哪种不用哪种,为什么呢?
第一种形式,是一条短变量声明,最简洁,但只能用在函数内部,而不能用于包变量。
第二种形式依赖于字符串的默认初始化零值机制,被初始化为""。
第三种形式用得很少,除非同时声明多个变量。
第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。

实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的类型,否则使用隐式初始化。

变量类型
新命名的底层相同的类型,是不兼容的

type 类型名字 底层类型
​// 两个温度不兼容
type Celsius float64    // 摄氏温度
type Fahrenheit float64 // 华氏温度

类型转化

两个类型的底层基础类型相同时,才能用类型转换T(x)

循环(只有for)

Go语言只有for循环这一种循环语句。for循环有多种形式,其中一种如下所示:

// 注意:判断条件无括号
for initialization; condition; post {// zero or more statements
}
// 两个值分别代表索引和值,_表示丢掉不需要的值
for _, arg := range os.Args[1:]{}

选择

if
判断条件无括号
Switch

// 无需break
switch coinflip() {case "heads":heads++
case "tails":tails++
default:fmt.Println("landed on edge!")
}

声明函数

// fToC函数,接收float64参数,返回float64值
// 函数可以返回多个变量
func fToC(f float64) float64 {return (f - 32) * 5 / 9
}

赋值

// 元组赋值:交换两个变量的值
x, y = y, x// 有些表达式会产生多个值,可以用_来丢弃不需要的值
f, err = os.Open("foo.txt")
medals := []string{"gold", "silver", "bronze"}
// 隐式地对slice的每个元素进行赋值操作,类似这样写的行为:
medals[0] = "gold"
medals[1] = "silver"
medals[2] = "bronze"

包和文件

导出
如果包内一个名字是大写字母开头的,那么该名字是导出的
导入

import ("fmt""os""strconv""gopl.io/ch2/tempconv"
)
// 导入后就可以用tempconv来调用一些包的内容

基本概念

包(packages)

Go语言提供了一些很好用的package,并且这些package是可以扩展的。Go语言社区已经创造并且分享了很多很多。所以Go语言编程大多数情况下就是用已有的package来写我们自己的代码。

方法和接口:

方法是和命名类型关联的一类函数。Go语言里比较特殊的是方法可以被关联到任意一种命名类型。

接口是一种抽象类型,这种类型可以让我们以同样的方式来处理不同的固有类型,不用关心它们的具体实现,而只需要关注它们提供的方法。

指针:

指针是可见的内存地址,&操作符可以返回一个变量的内存地址,并且*操作符可以获取指针指向的变量内容,但是在Go语言里没有指针运算,也就是不能像c语言里可以对指针进行加或减操作。

变量的生存周期

包一级变量
和整个程序的运行周期是一致的。

局部变量
局部变量的生命周期则是动态的:每次从创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。

局部变量可能在函数返回之后依然存在。称作局部变量从函数中逃逸了,逃逸的变量需要额外分配内存,同时对性能的优化可能会产生细微的影响。

编译器会自动选择在栈上还是在堆上分配局部变量的存储空间,这个选择并不是由用var还是new声明变量的方式决定的。

一、go语言基本语法与概念(go语言圣经笔记)相关推荐

  1. 中国电力出版社C语言书答案,新概念C语言教程第六章答案张基温著中国电力出版社出版.doc...

    6.1结构体类型的定义与实例化 探索验证:(测量结构所占有的存储空间) 程序编程: #include struct Data{ int year; int month; int day; }; str ...

  2. OC语言——基本语法和思想

    今天学习了OC语言基础语法 1.oc语言完全兼容C语言,后缀为.m类型.被广泛应运与开发苹果mac os x平台和ios开发平台 2.oc语言关键字基本上以@开头,oc字符串也是以@开头. 3.基本类 ...

  3. 【Go编程语言】 Go语言基础语法

    Go语言基础语法 文章目录 Go语言基础语法 一.注释 1.单行注释 2.多行注释 二.变量 1.变量的定义 2.变量的初始化 3.理解变量(内存地址) 4.变量交换 5.匿名变量 6.变量的作用域 ...

  4. 云计算之go语言——基础语法(中)

    9 Go 语言循环语句 1, 概念在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句. 2, 分类1. for 循环 : 重复执行语句块a. 语法:for init; co ...

  5. 一起学Go吧! Go语言基础语法篇二

    文章目录 前言 Go 语言指针 Go语言结构体 Go语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言类型转换 Go 语言接口 Go 错误处理 Go并发 通道( ...

  6. 为什么要学python语言_我们为什么要学习Python语言?

    原标题:我们为什么要学习Python语言? 聊到我们为什么要学习Python语言?小编不禁又想起大佬潘石屹准备开启Python学习旅程时所发布的微博. 我们为什么要学习Python语言? 在农业社会时 ...

  7. c语言最小点对问题_C语言教程(一):程序开发理论基础!

    前言: 1.本系列教程适用于刚开始学习 C 语言的同学,或者初级开发者,或者想系统详细了解 C 语言的小伙伴. 2.本系列教程会从C语言基础到 C 语言高级语法,包含 C 语言所有系列. C语言简介 ...

  8. 【译】Go语言声明语法

    引言 Go语言的初学者可能会好奇为什么Go的类型声明语法和传统的C系语言不同.本篇文章我们将比较这两种不同的类型声明方式,解释为什么Go的声明会是这样子. C语法 首先,我们谈谈C的语法.C采用了一种 ...

  9. C语言和C++语言在语法上面的部分区别

    (2011-03-16 17:12:13) 标签: 杂谈 分类:计算机 C语言和C++语言在语法上面的部分区别: 1.C语言的定义必须在最前面,C++可以在任何地方定义,比如 for(int i=0; ...

最新文章

  1. 引子 我想大家应该都很熟悉DNS了,这回在DNS前面加了一个D又变成了什么呢?这个D就是Dynamic(动态),也就是说,按照传统,一个域名所对应的IP地址应该是定死的,而使用了DDNS后,域名所对应
  2. andorid service 本地服务
  3. JavaScript创建对象的方法
  4. netty:NIO模型--选择器(Selector)
  5. 用神经网络模拟分子:钠的卤化物
  6. java中文件的操作讲解
  7. ffmpeg基础库编程开发 读书笔记
  8. C++:MAC安装Boost库文件并且使用CLion开发
  9. python列表添加元素到中间_python在列表的元素中间插入空行
  10. SpringBoot 使用unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件
  11. 将一个数组a的行和列的元素互换,存到另一个二维数组b中
  12. 曝李国庆抢走当当公章发《告当当全体员工书》,当当网:已报警,公章作废...
  13. Odoo10教程---模块化二:模型间关系,继承,计算字段等
  14. 简述计算机j选件,计算机组成原理06new.ppt
  15. java jquery jsonp 跨域_Jquery跨域调用(JSONP)遇到error问题的解决
  16. opencv_haartraining.exe 分类器训练----命令执行,执行项学习(1)
  17. PHP RSA2 签名算法
  18. listview 分页加载
  19. Mac OS - 让Myeclipse10支持Retina显示屏
  20. 海康威视web开发包开发使用说明

热门文章

  1. [转帖]手把手教你玩转诺基亚N900
  2. Python机器学习数据挖掘7周实训!-韦玮-专题视频课程
  3. png为啥在html显示不出来,解决网页png格式图片无法正常显示,绝对有效
  4. 【转】日立HDS存储Storage Navigator Modular 2(SNM2)管理软件下载(包含安装配置说明)...
  5. AVI音视频封装格式学习(二)——AVI RIFF文件参考
  6. Java中面向字符的输入流
  7. ESP32设备驱动-TCS34725颜色传感器驱动
  8. 十个面试九个秒杀,你设计的秒杀系统真的过关了吗?
  9. Oracle DataGuard standby库日常管理(zt)
  10. gta5ol什么时候修复服务器,【图片】Rockstar感谢GTA玩家修复了线上的加载时间,官方更新即将到来。【gta5吧】_百度贴吧...