GO语言的基本语法之变量,常量,条件语句,循环语句
GO语言的基本语法之变量,常量,条件语句,循环语句
作为慕课网得笔记自己看
定义变量:
使用var关键字
- var a, b, C bool
- var s1, s2 string = "hello", "world'
- 可放在函数内,或直接放在包内
- 使用var()集中定义变量
让编译器自动决定类型
- vara,b,i,s1, s2 = true, false, 3, "hello", "world"
使用:=定义变量
- a,b,i,s1, s2:= true, false, 3, "hello", "world"
- 只能在函数内使用
内建变量类型:
- bool, string就是正常的布尔和string
- (u)int, (u)int8, (u)int16, (u)int32, (u)int64, 加个u就是无符号整数,不加u就是有符号整数
- 有符号整数还分为两类,一种规定长度,一种没规定长度,没规定长度的跟着操作系统走
- uintptr就是指针,长度一样是跟着操作系统来的
- byte, rune ,其中的rune就是字符型,就是GO语言的char类型,32位
- float32, float64, complex64, complex128,浮点数类型,这个complex是复数,就是带有实部和虚部的那个
强制类型转换:
只有强制的类型转换
常量定义:
- const filename = "abc.txt"
- const 数值可作为各种类型使用
- consta,b=3,4
- var C int = int(math.Sqrt(a*a + b * b))
还有特殊的常量,枚举类型
- 普通的枚举类型
- 自增值的枚举类型
示例代码如下:
package main
import (
"fmt"
"math"
"math/cmplx"
)
//函数外面定义变量,不能使用:=
//这样的全部都是包内的变量,不是全局变量
var (
aa = 3
ss = "kkk"
bb = true
)
//这里是用函数定义一个变量
func variableZeroValue() {
var a int
var s string
fmt.Printf("%d %q\n", a, s)
}
//这里是赋上初值,PS:定义了就必须要用
func variableInitialValue() {
var a, b int = 3, 4
var s string = "abc"
fmt.Println(a, b, s)
}
//省略类型名,自动辨识初值,不是一个类型也可以写在一行
func variableTypeDeduction() {
var a, b, c, s = 3, 4, true, "def"
fmt.Println(a, b, c, s)
}
//省略var,使用:=和使用var是一样的
//第一次必须要使用:=,后面就还要用=,不需要再用:=
func variableShorter() {
a, b, c, s := 3, 4, true, "def"
b = 5
fmt.Println(a, b, c, s)
}
//欧拉公式
func euler() {
fmt.Printf("%.3f\n",
cmplx.Exp(1i*math.Pi)+1)
}
//强制类型转换
func triangle() {
var a, b int = 3, 4
fmt.Println(calcTriangle(a, b))
}
//强制类型转换
func calcTriangle(a, b int) int {
var c int
c = int(math.Sqrt(float64(a*a + b*b)))
return c
}
//设置常量
func consts() {
const (
filename = "abc.txt"
a, b = 3, 4
)
var c int
c = int(math.Sqrt(a*a + b*b))
fmt.Println(filename, c)
}
//特殊常量:枚举类型
func enums() {
const (
cpp = iota//iota表示自增值
_
python
golang
javascript
)
const (
b = 1 << (10 * iota)
kb
mb
gb
tb
pb
)
fmt.Println(cpp, javascript, python, golang)
fmt.Println(b, kb, mb, gb, tb, pb)
}
func main() {
fmt.Println("Hello world")
variableZeroValue()
variableInitialValue()
variableTypeDeduction()
variableShorter()
fmt.Println(aa, ss, bb)
euler()
triangle()
consts()
enums()
}
变量定义要点:
- 变量类型写在变量名之后
- 编译器可推测变量类型
- 没有char ,只有rune
- 原生支持复数类型
条件语句:
if:
- if的条件不需要括号括起来
- if的条件里可以赋值
- if的条件里赋值的变量作用域就在这个if语句中
switch:
- switch会自动break,除非使用fallthrough
- switch后面可以不带表达式
示例代码如下:
package main
import (
"fmt"
"io/ioutil"
)
//switch函数用法
func grade(score int) string {
g := ""
switch {
case score < 0 || score > 100:
panic(fmt.Sprintf(
"Wrong score: %d", score))
case score < 60:
g = "F"
case score < 80:
g = "C"
case score < 90:
g = "B"
case score <= 100:
g = "A"
}
return g
}
func main() {
// If "abc.txt" is not found,
// please check what current directory is,
// and change filename accordingly.
const filename = "abc.txt"
//ioutil.ReadFile读出abc.txt的内容
if contents, err := ioutil.ReadFile(filename); err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n", contents)
}
fmt.Println(
grade(0),
grade(59),
grade(60),
grade(82),
grade(99),
grade(100),
// Uncomment to see it panics.
// grade(-3),
)
}
循环语句:
for:
- for的条件里不需要括号
- for的条件里可以省略初始条件,结束条件,递增表达式
- 可以省略初始条件,相当于while
- 什么都省略的情况为死循环
示例代码如下:
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
)
//将整数转换为二进制表达式
func convertToBin(n int) string {
result := ""
for ; n > 0; n /= 2 {
lsb := n % 2
//strconv.Itoa变为字符串
result = strconv.Itoa(lsb) + result
}
return result
}
//读取文件
func printFile(filename string) {
file, err := os.Open(filename)
if err != nil {
panic(err)
}
printFileContents(file)
}
//读取文件内容
func printFileContents(reader io.Reader) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
//死循环
func forever() {
for {
fmt.Println("abc")
}
}
func main() {
fmt.Println("convertToBin results:")
fmt.Println(
convertToBin(5), // 101
convertToBin(13), // 1101
convertToBin(72387885),
convertToBin(0),
)
fmt.Println("abc.txt contents:")
printFile("lang/basic/branch/abc.txt")
fmt.Println("printing a string:")
s := `abc"d"
kkkk
123
p`
printFileContents(strings.NewReader(s))
// Uncomment to see it runs forever
// forever()
}
基本语法要点:
- for, if后面的条件没有括号
- if 条件里也可定义变量
- 没有while
- switch不需要break ,也可以直接switch多个条件
函数:
函数返回多个值时可以起名字
仅用于非常简单的函数
对于调用者而言没有区别
函数语法要点回顾:
返回值类型写在最后面
可返回多个值
函数作为参数
没有默认参数,可选参数
指针:
指针不能运算
参数传递是值传递还是引用传递?
GO语言只有值传递一种方式,值传递和指针配合
GO语言的基本语法之变量,常量,条件语句,循环语句的更多相关文章
- python之最强王者(3)——变量,条件、循环语句
1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的 ...
- python初识-环境搭建,变量,条件,循环语句
1.python环境搭建: (1)安装Anaconda ,可选择非C盘安装: 注意:都勾选: (2)安装Pycharm 默认安装即可,安装过程同样都勾选: (3)破解Pycharm https://w ...
- Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句
Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- Swift-基础语法之变量&常量&元组
使用 let来声明一个常量,用 var来声明一个变量.常量的值在编译时并不要求已知,但是你必须为其赋值一次.这意味着你可以使用常量来给一个值命名,然后一次定义多次使用 myVariable = let ...
- Javascript语法,变量类型,条件,循环语句,函数,面向对象
1.JavaScript代码革两种存在形式: <!-- 方式一 --> <script type='txt/javascript' src='/js/comment.js'>& ...
- Java学习笔记之基础语法(顺序,条件,循环语句)
顺序结构:自上而下 条件分支选择结构: if条件语句 1,一旦某一个分支确定执行以后,其他分支就不会执行.if后面的条件必须是boolean类型 2,if 后面如果不加大括号,默认相邻的下一 ...
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符. 分类: iOS学习 c语言基础 2015-06-10 21:39 25人阅读 评论(0) 收藏
二进制:以0b开头,只有0和1两种数字.如0101 十进制:0~9十个数字表示.如25 十六进制:以0~9,A~F表示,以0X开头.如0X2B 十进制转换为X进制:连除倒取余 X进制转换为十进制:按权 ...
- r语言之条件、循环语句
if条件语句:if (conditon) {expr1} else {expr2} > x<-1> if(x==1)+ {x<-"x=1"}else+ {x ...
随机推荐
- Java:HttpPost 传输Json数据过长使用HttpServletRequest解析
直接上代码 /** * 测试生成json数据 */ @Test public void synYxGoodsInfoTest() { try { String url = "http://1 ...
- mysql中的条件语句case when/if函数
主要知识点为case函数,if函数,ifnull函数,elt函数几部分,主要用于mysql语句中的逻辑判断 待操作的表如下: p.p1 { margin: 0; font: 16px Menlo; c ...
- http、tcp和socket简单理解
1.Http属于应用层,主要解决如何包装数据. 2.Tcp属于传输层,主要解决数据如何在网络上传输. 3.Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API) ...
- GYM101471D「ICPC2017 WF」Money for Nothing
「ICPC2017 WF」Money for Nothing 传送门 我们可将生产商和消费商都看成二维平面上的点,其坐标分别为 \((d_i,p_i)\),\((e_i,q_i)\). 那么问题转变为 ...
- Java程序设计当堂测试 9.20
/*Java当堂测试 ATM机模拟系统由于学习的知识有限,不能完成所有课上项目,文件的应用没有完成,汇款转账功能也没有写,一些要求该退出的地方也没有写,基本功能还算完善*/ 1 package acc ...
- 在Ubuntu20中安装Elasticsearch和Kibana6.8.1版本 母胎教学
首先,我们在Ubuntu中安装Elasticsearch6.8.1命令如下: $ docker pull elasticsearch:6.8.1 拉取完成后,创建Elasticsearch6.8.1容 ...
- 记录Jackson和Lombok的坑
记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...
- PAT乙级:1069 微博转发抽奖 (20分)
PAT乙级:1069 微博转发抽奖 (20分) 题干 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入 ...
- 手把手教你实现Android编译期注解
一.编译期注解在开发中的重要性 从早期令人惊艳的ButterKnife,到后来的以ARouter为首的各种路由框架,再到现在谷歌大力推行的Jetpack组件,越来越多的第三方框架都在使用编译期注解这门 ...
- Delimiter must not be alphanumeric or backslash php报错原因
昨天写了一个小程序,其中用到了正则表达式去匹配内容. php源代码如下: preg_match("\b(\w+)\b\s+\1\b",$match): 此报错警告的中文意思是 ...