1.go的特点

  兼具动态语言的开发效率与C,C++,java的性能安全性 ,内置编译器

2.go的安装

  go的sdk下载:  https://studygolang.com/dl

  go的IDE下载: https://www.jetbrains.com/go/

3.go run与go build

  go run 编译后直接执行

  go build 编译成二进制文件 ,源码文件会小于编译文件 ,编译文件包含了其他依赖

4.数据类型

  数据类型是让编程语言,编译器,数据库,代码环境知道如何去操作处理数据的

  强类型语言:错误的使用数据类型将会报错 ,数据类型变换需要强制转换(go,python)

  弱类型语言:为了程序的执行,在运行时将一种数据类型转换为另一种(bash-shell ,js)

  静态语言:编译执行性能高 ,编译器检查数据类型正确, 安全性与性能(go)

  动态语言:快速的开发效率 ,可移植性和兼容性好 ,简单与开发速度(python)

5.go声明变量

  显示声明:全局变量必须使用显示声明 ,也可用于函数中

  简短声明:函数内变量多使用简短声明 ,不用于全局

6.go的内置基本数据类型

  布尔类型 :在go中布尔值仅仅是 "true" 和 "false" ,任何零值都无法作为布尔值直接判断

  数值类型 :整形带符号int和不带符号uint ,带符号是首位0,1用来表示符号有无 ,go中是用int会自动判断是int64还是int32

        浮点型单精度双精度浮点数 ,float32和float64

  字符串类型 :string

  数组 :go的数组是类型和长度固定的

7.检查变量的类型

  标准库的reflect包

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. )
  7.  
  8. func main() {
  9. a :=
  10. b:= ""
  11. c := true
  12. d := []string{"","",""}
  13. fmt.Println(a,reflect.TypeOf(a))
  14. fmt.Println(a,reflect.TypeOf(b))
  15. fmt.Println(a,reflect.TypeOf(c))
  16. fmt.Println(a,reflect.TypeOf(d))
  17. }

8.数值类型转换

  整数与浮点的转换

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. )
  7.  
  8. func main() {
  9. i :=
  10. n := 2.7
  11. fmt.Println(i,reflect.TypeOf(i),n,reflect.TypeOf(n))
  12. i1 := float64(i)
  13. n1 := int(n)
  14. fmt.Println(i1,reflect.TypeOf(i1),n1,reflect.TypeOf(n1))
  15. }

  浮点数的计算问题处理

    浮点数存储在内存时 ,此方不能精准表示小数部分 使用第三方decimal包来解决

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "github.com/shopspring/decimal"
  6. )
  7.  
  8. func main() {
  9. var m,n float64 = 14.1,13.5
  10. //浮点数存储在内存,次方不能精准表示浮点数就会出现偏差 (除法乘法问题)
  11. fmt.Println(m-n)
  12. fmt.Println(m*n)
  13. fmt.Println(m/n)
  14. fmt.Println(m+n)
  15. q1 := decimal.NewFromFloat(m).Sub(decimal.NewFromFloat(n))
  16. q2 := decimal.NewFromFloat(m).Add(decimal.NewFromFloat(n))
  17. q3 := decimal.NewFromFloat(m).Mul(decimal.NewFromFloat(n))
  18. q4 := decimal.NewFromFloat(m).Div(decimal.NewFromFloat(n))
  19. fmt.Println(q1,q2,q3,q4)
  20. }

  字符串与整型之间的转换 使用标准库的strconv包

    字符串转整数可能会出现异常 ,根据go的错误处理机制 ,调用者需要接收错误处理 ,所以Atoi函数有两个返回值接收

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. "strconv"
  7. )
  8.  
  9. func main() {
  10. str1 := ""
  11. int1 :=
  12. fmt.Println(str1, reflect.TypeOf(str1), int1, reflect.TypeOf(int1))
  13. str2, err := strconv.Atoi(str1)
  14. fmt.Println(str2, reflect.TypeOf(str2), err) //str2是字符串被转换为整型
  15. int2 :=strconv.Itoa(int1)
  16. fmt.Println(int2, reflect.TypeOf(int2), err) //int2是整数被转为字符串
  17. }

  Parse类函数 :将string转换为其他类型(bool int float uint) 

    base: 转换为多少进制 basesize: 转化为多少位 

    返回的错误由" _ "黑盒子收走

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. "strconv"
  7. )
  8.  
  9. func main() {
  10. a, b, c, d := "true", "-12", "", "3.14"
  11. a1, _ := strconv.ParseBool(a)
  12. b1, _ := strconv.ParseFloat(d, ) //指定转为64或32类型
  13. c1, _ := strconv.ParseInt(b, , ) //指定base:进制,basesize:64或43
  14. d1, _ := strconv.ParseUint(c, , ) //指定base:进制,basesize:64或43
  15. fmt.Println(reflect.TypeOf(a1), reflect.TypeOf(b1), reflect.TypeOf(c1), reflect.TypeOf(d1))
  16. }

  Format类函数 :将其他类型转换为string类型

    base: 转换为多少进制 basesize :64

    只能对int64 ,float64 ,uint64做转换 ,其中浮点转为字符串会格式化

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. "strconv"
  7. )
  8.  
  9. func main() {
  10. var (
  11. a bool = true
  12. b int64 = -
  13. c uint64 =
  14. d float64 = 3.14
  15. )
  16. a1 := strconv.FormatBool(a)
  17. b1 := strconv.FormatInt(b, )
  18. c1 := strconv.FormatUint(c, )
  19. d1 := strconv.FormatFloat(d, 'E', -, )
  20. fmt.Println(reflect.TypeOf(a1), reflect.TypeOf(b1), reflect.TypeOf(c1), reflect.TypeOf(d1), )
  21. }

9.变量

  变量由字母数字下划线组成 ,开头不能是数字

  声明变量:关键字var声明 ,快速声明 ,简短声明

  1. package main
  2.  
  3. var StartNum int = //var声明
  4. func main() {
  5. var ( //快速声明
  6. a string = "a"
  7. b string = "b"
  8. )
  9. c,d,e:= ,, //简短声明 (只能在函数中使用)
  10. //......
  11. }

10.零值

  变量声明不赋值 ,此时等于该类型的零值

  不同数据类型零值不同: bool(false) ,int(0) ,float(0.0) ,string("") ,剩下的slice ,array ,map ,function ,interface ,pointer..都是nil

  对于复合类型 ,go会对每个元素初始化为其零值

  判断变量是否赋值 ,可以检查它是否等于该类型的零值!!!

11.常量

  常量就是本次编译后无法在程序运行中改变的量

  const StartTime int = 1970        #StartTime就是常量

12.变量的作用域

  go中一个大括号 "{}" 就是一个块 ,在块内声明变量 ,该块内任意使用 (go的文件也是块 ,相当于声明全局变量)

  对于嵌套块来说 ,内部块可以访问外部块变量 ,外部块无法访问内部块变量

13.指针

  指针也是一种类型pointer ,用来存储变量内存地址

  go语言中 ,如果直接赋值 ,或将变量传到函数 ,就会开辟内存复制副本

  指针可以指向原有变量访问 ,而无需复制副本 ,指针引用会修改源值 ,值引用不会

  创建指针 : prt := &变量       #其中&可以获得变量的内存地址

  使用指针 : *ptr         #获得指针指向的变量的值

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. a := []int{}
  7. a = append(a, , , , )
  8. ptra := &a #创建指针存储a的内存
  9. vala := a #创建a的副本
  10. fmt.Printf("a内存地址为%p,ptra内存地址为%p,vala内存地址为%p", &a, &*ptra, &vala)
  11. }

golang-基础的更多相关文章

  1. golang基础知识之encoding/json package

    golang基础知识之json 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.可以去json.org 查看json标准的清晰定义.json pack ...

  2. Golang基础之函数

    golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...

  3. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  4. GoLang基础数据类型-切片(slice)详解

    GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...

  5. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  6. GoLang基础数据类型--->字符串处理大全

    GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:   高级运维工程师之路               59843264 ...

  7. 如何使用gitlab自建golang基础库

    这里以go mod方式建立golang基础库 一.gitlab创建项目golib 地址为gitlab.xxx.com/base/golib 示例如下 go mod初始化命令 go mod init g ...

  8. Golang 基础之基础语法梳理 (三)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...

  9. Golang 基础之基础语法梳理 (一)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第一章节 Golang 基础之基础语法梳理 (一) Gol ...

  10. Golang 基础之基础语法梳理 (二)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...

随机推荐

  1. Ubuntu19 安装Theano出现“No module named ‘theano.compat.six’”

    解决办法:直接在下载好pythearn2包的目录下,对setup.py文件进行修改:将  from theano.compat.six.moves import input 改为  from six. ...

  2. Dynamics 365中的Client API form context (formContext)

    适用于Dynamics 365 for Customer Engagement apps 9.x版本. 本文是一篇翻译,原文来源是微软官方文档. 本文链接:https://www.cnblogs.co ...

  3. 百度大脑UNIT3.0解读之对话式文档问答——上传文档获取对话能力

    在日常生活中,用户会经常碰到很多复杂的规章制度.规则条款.比如:乘坐飞机时,能不能带宠物上飞机,3岁小朋友是否需要买票等.在工作中,也会面对公司多样的规定制度和报销政策.比如:商业保险理赔需要什么材料 ...

  4. API访问控制设计

    References ● OAuth 2.0 for native apps: https://datatracker.ietf.org/doc/rfc8252/ ● OAuth 2.0 for br ...

  5. 关于Xpath

    1.xPath简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chro ...

  6. 关于c#winform用sharpGL(OpenGL)绘制不出图形,绘制窗口是个黑框的坑

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11790309.html 在c++的opengl中可能是因为是最基本的库,很多东西都把你做好了 ...

  7. 解决bcp导出CSV文件没有表头

    思路: 1.输出表头文件到指定目录 2.bcp导出csv文件到temp目录 3.将以上导出文件与表头文件合并 4.删除temp目录下的文件 实现: create proc exportCSV ( @i ...

  8. koa2使用es7 的装饰器decorator

    本文主要讲述我在做项目中使用装饰器(decorator)来动态加载koa-router的路由的一个基础架构. 目前JavaScript 对decorator 是不支持,但是可以用babel 来编译 既 ...

  9. Jsf中进度条的用法

    Jsf中进度条的用法 前端页面 <!-- 进度条 --> <p:progressBar widgetVar="pbAjax" ajax="true&qu ...

  10. Java学习笔记-Java文件操作流

     day03 输入输出流:读入写出  节点流:   有明确的来源和去向   往往对字节操作 节点流又叫低级流.字节流   处理流:  没有明确的来源和去向  往往对低级流或其他高级流进行操作,不能独立 ...