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语言的基本语法之变量,常量,条件语句,循环语句的更多相关文章

  1. python之最强王者(3)——变量,条件、循环语句

    1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的 ...

  2. python初识-环境搭建,变量,条件,循环语句

    1.python环境搭建: (1)安装Anaconda ,可选择非C盘安装: 注意:都勾选: (2)安装Pycharm 默认安装即可,安装过程同样都勾选: (3)破解Pycharm https://w ...

  3. Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句

    Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...

  4. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  5. Swift-基础语法之变量&常量&元组

    使用 let来声明一个常量,用 var来声明一个变量.常量的值在编译时并不要求已知,但是你必须为其赋值一次.这意味着你可以使用常量来给一个值命名,然后一次定义多次使用 myVariable = let ...

  6. Javascript语法,变量类型,条件,循环语句,函数,面向对象

    1.JavaScript代码革两种存在形式: <!-- 方式一 --> <script type='txt/javascript' src='/js/comment.js'>& ...

  7. Java学习笔记之基础语法(顺序,条件,循环语句)

    顺序结构:自上而下 条件分支选择结构: if条件语句   1,一旦某一个分支确定执行以后,其他分支就不会执行.if后面的条件必须是boolean类型   2,if  后面如果不加大括号,默认相邻的下一 ...

  8. 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进制转换为十进制:按权 ...

  9. r语言之条件、循环语句

    if条件语句:if (conditon) {expr1} else {expr2} > x<-1> if(x==1)+ {x<-"x=1"}else+ {x ...

随机推荐

  1. AcWing 90. 64位整数乘法

    求a*b%p的值. 0<a,b,p<1e18; 原题链接 #include<bits/stdc++.h> #define ull unsigned long long usin ...

  2. Docker:docker搭建redis一主多从集群(配置哨兵模式)

    角色 实例IP 实例端口 宿主机IP 宿主机端口 master 172.19.0.2 6382 192.168.1.200 6382 slave01 172.19.0.3 6383 192.168.1 ...

  3. Game游戏分析

    1.鲁棒图分析 2.系统上下文及交互方式 3.用例 4.逻辑拓扑图 5.物理拓扑图 6.时序图 7.状态图 8.物理数据模型 9.类图 10.技术选型 11.框架搭建 12.工具及通用服务 13.架构 ...

  4. 基于js的姓名校验

    // 姓名校验 isRightName: function(name) { var reg = /^[a-zA-Z\u4E00-\u9FA5\uF900-\uFA2D\u00B7\u2022\u009 ...

  5. WIN10技巧

    1.快速打开"开始---自动启动"文件夹:开始--支行--shell:startup 2

  6. [刘阳Java]_MyBatis_实体关系映射_第8讲

    MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射 1.MyBatis实体关系映射 ...

  7. .NET Core 中的 Swagger 应用与微服务场景下的Swagger Api 集成显示

    Swagger 与 OpenAPI 的历史来源: Swagger 项目于 2015 年捐赠给 OpenAPI Initiative,此后被称为 OpenAPI.这两个名称可以互换使用.但是," ...

  8. Day12 抽象类、接口、内部类-面向对象编程(3)

    抽象类 abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类: 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类. ...

  9. mybatis介绍以及配置

    一.概念 1.作用:简化dao层,是框架的一部分,常叫SSM,或SSI 2.历史:之前的版本叫ibatis,三版之后叫mybatis 3.什么是orm?object,relational,mappin ...

  10. JDK 和 CGLib 实现动态代理和区别

    JDK 和 CGLib 实现动态代理和区别 在日常的开发中,Spring AOP 是一个非常常用的功能.谈到 AOP,自然离不开动态代理. 那么,基于 JDK 和 CGLib 如何实现动态代理,他们之 ...