1、Golang 变量定义方法:

1)定义变量 变量名 类型 = 表达式

var go string = "hello"

2)在函数内部,可以使用更简略的 := 方式声明并初始化变量。

注意:短变量只能用于声明局部变量,不能用于全局变量的声明

go := "hello"

2、fmt 包、Print、Println、Printf

Go 中要打印一个值需要引入 fmt 包 import "fmt" 。fmt 包里面给我们提供了一些常见的打印数据的方法,比如:Print 、Println、Printf,在我 们实际开发中 Println、Printf 用的非常多。

1)Print 和 Println 区别:

一次输入多个值的时候 Println 中间有空格 Print 没有

fmt.Println("go", "python", "php", "javascript")
fmt.Print("go", "python", "php", "javascript")
// Println 会自动换行,Print 不会
package main
import "fmt" func main() {
fmt.Println("hello")
fmt.Println("world")
// hello
// world
fmt.Print("hello")
fmt.Print("world")
// helloworld
}

2)Println 和 Printf 区别:

Printf 是格式化输出,在很多场景下比 Println 更方便

a := 10
b := 20
c := 30
fmt.Println("a=", a, ",b=", b, ",c=", c) //a= 10 ,b= 20 ,c= 30
fmt.Printf("a=%d,b=%d,c=%d", a, b, c) //a=10,b=20,c=30

%d 是占位符,表示数字的十进制表示。Printf 中的占位符与后面的数字变量一一对应。常用%v、%T等

更多的占位符参考:http://docscn.studygolang.com/pkg/fmt/

3、Go 语言中的注释

win 下面 ctrl+/ ,mac 下面 command+/ 可以快速的注释一行

/* 这是一个多行注释
*/
// 这是一个单行注释

4、匿名变量

在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)。

匿名变量用一个下划线_表示,例如:

func getInfo() (int, string) { return 10, "张三"
}func main() { _, username := getInfo() fmt.Println(username)
}

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。

5、常量结合ioat

iota 是 golang 语言的常量计数器,只能在常量的表达式中使用。

iota 在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量 声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

1)iota 只能在常量的表达式中使用。

2)每次 const 出现时,都会让 iota 初始化为 0.【自增长】

const a = iota // a=0
const (
b = iota //b=0
c //c=1
) 

3)const iota 使用_跳过某些值

const (
n1 = iota //0
n2 //1
_
n4 //3
)

4)iota 声明中间插队

const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
const n5 = iota //0 

5)多个 iota 定义在一行

const (
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)  

6、Go 语言变量、常量命名规则

1)变量名称必须由数字、字母、下划线组成。

2)标识符开头不能是数字

3)标识符不能是保留字和关键字。

4)变量的名字是区分大小写的如: age 和 Age 是不同的变量。在实际的运用中,也建议,不要 用一个单词大小写区分两个变量。

5)标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词

6)变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如 DNS)的时候,特有名词 根据是否私有全部大写或小写。

7、基本数据类型

1)Golang 数据类型介绍

Go 语言中数据类型分为:基本数据类型和复合数据类型

基本数据类型有: 整型、浮点型、布尔型、字符串

复合数据类型有: 数组、切片、结构体、函数、map、通道(channel)、接口等。

2)整型 整型分为以下两个大类:

有符号整形按长度分为:int8、int16、int32、int64

对应的无符号整型:uint8、uint16、uint32、uint64

字节也叫 Byte,是计算机数据的基本存储单位。8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB 。一个中文字是占两个字节的。

特殊整型

注意: 在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint 可能在不同平台上的差异。

实际项目中整数类型、切片、 map 的元素数量等都可以用 int 来表示。在涉及 到二进制传输、为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使 用 int 和 uint。

unsafe.Sizeof

unsafe.Sizeof(n1) 是 unsafe 包的一个函数,可以返回 n1 变量占用的字节数

package main
import (
"fmt"
"unsafe"
)
func main() {var a int8 = 120
fmt.Printf("%Tn", a)
fmt.Println(unsafe.Sizeof(a))
} 

int 不同长度直接的转换

数字字面量语法(Number literals syntax)

Go1.13 版本之后引入了数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮 点数的格式定义数字,例如:

v := 0b00101101, 代表二进制的 101101,相当于十进制的 45。
v := 0o377,代表八进制的 377,相当于十进制的 255。
v := 0x1p-2,代表十六进制的 1 除以 2²,也就是 0.25。 

而且还允许我们用 _ 来分隔数字,比如说: v := 123_456 等于 123456。 我们可以借助 fmt 函数来将一个整数以不同进制形式展示。

package mainimport "fmt" func main(){
// 十进制var a int a = 10
fmt.Printf("%d n", a) // 10fmt.Printf("%b n", a) // 1010    占位符%b 表示二进制//  八进制  以 0 开头var b int b = 077
fmt.Printf("%o n", b) // 77//  十六进制   以 0x 开头var c int c = 0xff
fmt.Printf("%x n", c) // ff
fmt.Printf("%X n", c) // FF
fmt.Printf("%d n", c) // 255
}

3)浮点型

Go 语言支持两种浮点型数:float32 和 float64。这两种浮点型数据格式遵循 IEEE 754 标准: float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:`math.MaxFloat64`。

打印浮点数时,可以使用 fmt 包配合动词%f,代码如下:

package main import (
"fmt"
"math"
)func main() {fmt.Printf("%fn",  math.Pi)   //默认保留 6 位小数
fmt.Printf("%.2fn",  math.Pi) //保留 2 位小数
}

Go 语言中浮点数默认是 float64

num := 1.1
fmt.Printf("值:%v--类型:%T", num, num) //值:1.1--类型:float64

Golang 中 float 精度丢失问题

几乎所有的编程语言都有精度丢失这个问题,这是典型的二进制浮点数精度损失问题,在定 长条件下,二进制小数和十进制小数互转可能有精度丢失。

d := 1129.6
fmt.Println((d  *  100))    //输出:112959.99999999999var d float64 = 1129.6
fmt.Println((d * 100)) //输出:112959.99999999999m1  :=  8.2
m2  :=  3.8
fmt.Println(m1 - m2) // 期望是 4.4,结果打印出了 4.399999999999999

使用第三方包来解决精度损失问题:https://github.com/shopspring/decimal

Golang 科学计数法表示浮点类型

num8 := 5.1234e2 // ? 5.1234 * 10 的 2 次 方
num9 := 5.1234E2 // ? 5.1234 * 10 的 2 次方 shift+alt+向下的箭头num10 := 5.1234E-2 // ? 5.1234 / 10 的 2 次 方 0.051234fmt.Println("num8=", num8, "num9=", num9, "num10=", num10)

4)布尔值

Go 语言中以 bool 类型进行声明布尔型数据,布尔型数据只有 true(真)和 false(假)两个值。

注意:

1. 布尔类型变量的默认值为 false。

2. Go 语言中不允许将整型强制转换为布尔型.

3. 布尔型无法参与数值运算,也无法与其他类型进行转换。、

5)字符串

Go 语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用 UTF-8 编码。 字符串的值为双引号(")中的内容,可以在 Go 语言的源码中直接添加非 ASCII 码字符,例如:

s1  :=  "hello"
s2  :=  "你好"

字符串转义符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。

转义符 含义
r 回车符(返回行首)
n 换行符(直接跳到下一行的同列位置)
t 制表符
' 单引号
" 双引号
反斜杠

举个例子,我们要打印一个 Windows 平台下的一个文件路径:

package main
import (
"fmt"
)
func main() {
fmt.Println("str := "c:Codedemogo.exe"")
}

多行字符串

// Go 语言中要定义一个多行字符串时,就必须使用反引号字符:
s1 := `第一行
第二行
第三行
`
fmt.Println(s1)
// 反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

字符串的常用操作

方法 介绍
len(str) 求长度
+或 fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string,
sep string)
join
操作
方法 介绍
len(str) 求长度
+或 fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string,
sep string)
join
操作
方法 介绍
len(str) 求长度
+或 fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string,
sep string)
join
操作

拼接字符串

var str1 = "你好"
var str2 = "golang"fmt.Println(str1 + str2)var str3 = fmt.Sprintf("%v %v", str1, str2)
fmt.Println(str3)var str = "this is golang"
var flag = strings.Contains(str, "golang")
fmt.Println(flag)

判断首字符尾字母是否包含指定字符

var str = "this is golang"
var flag = strings.HasPrefix(str, "this")
fmt.Println(flag)var str = "this is golang"
var flag = strings.HasSuffix(str, "go")
fmt.Println(flag)

判断字符串出现的位置

var str = "this is golang"
var  index  =  strings.Index(str,  "is") //从前往后
fmt.Println(index)var str = "this is golang"
var  index  =  strings.LastIndex(str, "is")  //从后网前
fmt.Println(index)

Join 拼接字符串

var str = "123-456-789"
var arr = strings.Split(str,  "-")
var str2 = strings.Join(arr, "*")
fmt.Println(str2)

6)byte 和 rune 类型

组成每个字符串的元素叫做“字符”,可以通过遍历字符串元素获得字符。 字符用单引号(’) 包裹起来,如:

package main import "fmt" func main() {
a  :=  'a'
b  :=  '0'
//当我们直接输出 byte(字符)的时候输出的是这个字符对应的码值
fmt.Println(a)
fmt.Println(b)//如果我们要输出这个字符,需要格式化输出
fmt.Printf("%c--%c",  a,  b)  //%c 相应 Unicode 码点所表示的字符}

字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节)

= 8bit(位)

字符:是指计算机中使用的字母、数字、字和符号

一个汉子占用 3 个字节 一个字母占用一个字节

a := "m"
fmt.Println(len(a))  //1b := " 张 "
fmt.Println(len(b)) //3

Go 语言的字符有以下两种:

1. uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。

2. rune 类型,代表一个 UTF-8 字符。

当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型实际是一个

int32。

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

// 遍历字符串
package mainimport  "fmt"func  main()  {
s := "hello 张三"
for  i  :=  0;  i  <  len(s);  i++  {  //byte
fmt.Printf("%v(%c)  ",  s[i],  s[i])
}
fmt.Println()for _, r := range s { //rune
fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()
}输出:104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 229(å) 188(¼) 160( ) 228(ä) 184(¸) 137()
104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 24352(张) 19977(三)

因为 UTF8 编码下一个中文汉字由 3 个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。

字符串底层是一个 byte 数组,所以可以和[]byte 类型相互转换。字符串是不能修改的 字符串是由 byte 字节组成,所以字符串的长度是 byte 字节的长度。 rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成。

rune 类型实际是一个 int32.

7)修改字符串

要修改字符串,需要先将其转换成[]rune 或[]byte,完成后再转换为 string。无论哪种转换, 都会重新分配内存,并复制字节数组。

func changeString() {
s1 := "big"
// 强制类型转换
byteS1 := []byte(s1)
byteS1[0] = 'p'
fmt.Println(string(byteS1))s2 := " 白 萝 卜 "
runeS2 := []rune(s2)
runeS2[0] = '红'
fmt.Println(string(runeS2))
}

golang int64转string_(一)Golang从入门到原地起飞相关推荐

  1. golang int64转int

    背景: 在cgo中,需要将golang的整数类型传到cgo中使用,但是不能直接传golang的int类型,而应该是 int32, 数值的内存长度才能与 c中int 长度一致. 但是有时 golang中 ...

  2. Golang依赖管理工具:glide从入门到精通使用

    2019独角兽企业重金招聘Python工程师标准>>> 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰的Maven和Gradle. G ...

  3. golang go语言_Go(Golang)编程语言

    golang go语言 Go (or golang) is a programming language created at Google in 2007 by Robert Griesemer, ...

  4. 【golang】从源代码编译golang编译器

    文章目录 系统信息 下载并编译go1.4用作bootstrap编译器 下载golang源代码 编译最新的golang 检查golang编译版本信息 编译一个简单的go程序 系统信息 tsu5@hhvm ...

  5. golang游戏服务器项目,基于Golang的游戏服务器框架cellnet开发日记(一)

    启程的故事 使用Golang写服务器是一件非常幸福的事情. 不用长时间的等待编译, 零依赖部署. 开发效率高, 多出的时间陪陪家人, 看书充充电多好. 所以Golang就像是手机界的苹果, 从发布后, ...

  6. golang int64转string_Golang 并发数据冲突检测器与并发安全

    介绍 共享数据竞争问题是并发系统中常见且难排查的问题. 什么是数据竞争? 当两个协程goroutine同时访问相同的共享变量,其中有一个执行了写操作,或两个都执行了写操作,就会出现数据竞争问题,导致数 ...

  7. Golang struct 指针引用用法(声明入门篇)

    Golang struct 指针引用用法 一.前言 入门篇,只包括声明内容,基础的赋值 和 修改值. 个人总结:在 变量访问 struct 结构体时,共有5种不同的方式定义 指针结构体. 个人术语: ...

  8. golang 定义一个空切片_Golang简单入门教程——函数进阶使用

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第八篇,我们来聊聊golang当中的函数. 我们在之前的时候已经介绍过了函数的基本用法,知道了怎么样设计或者是定义一 ...

  9. Golang编程基础第一篇——Golang快入门

    目录 一,为什么我们需要一门新语言 二,顺序编程 2.1 变量 2.2 常量 2.3 类型 2.4 流程控制 2.5 函数 2.6 错误处理 (golang的错误处理适合单出一篇) 以go语言编程为基 ...

最新文章

  1. 【机器学习】基于蚁群算法的多元非线性函数极值寻优
  2. HTML上传文件的多种方式
  3. position 定位
  4. 并发编程-17AQS同步组件之 Semaphore 控制并发线程数的信号量
  5. [JavaWeb-XML]XML基本语法与快速入门
  6. XML相关的安全漏洞-XXE,XPATH小结(XXE注入、XPATH注入)
  7. MySQL2种多实例部署方式总结
  8. /proc/sys/net/ipv4 详解2
  9. 【LeetCode】【HOT】155. 最小栈(辅助栈)
  10. apache字体文件跨域_在CabloyJS中将Webpack生成的文件自动上传到阿里云OSS
  11. No New-Net
  12. Linux网站搭建(3)---内网网站发布到外网(转)
  13. 关于使用JAVA进行MIB文件解析
  14. 基于wemos d1 按键开锁
  15. 图片怎么批量修改尺寸
  16. 十分简明易懂的FFT(快速傅里叶变换)
  17. 记一次IDEA克隆项目代码启动问题
  18. 企业盈利能力五大指标之:总资产收益率
  19. 请教求助,打开U盘显示,你当前无权访问该文件夹。
  20. java实现读取excel用例,testNg自动化,读取excel的数据

热门文章

  1. 二进制权值计算 lsb_2020年二级计算机基础知识备考(第二章)
  2. tensorflow权重初始化
  3. android之常用知识点(一)
  4. 相互引用的初始化过程
  5. android oreo 源码,android – Oreo:如何在源代码中找到所有受限制的系统调用?
  6. diy直立双足机器人_Aelos Pro 机器人:让编程变得更有趣
  7. C++学习之路 | PTA(天梯赛)—— L3-003 社交集群 (30分) (带注释) (并查集) (精简)
  8. java没通过测试_我们应该把没有通过测试的故事回退到“开发”状态吗
  9. 冷藏温度范围_食品冷藏冷冻温度要求与管理规范
  10. 软件工程讲义 0 微博上的软件工程