DAY 97 go01

1 Go语言介绍

# Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言
# 缺点:
不是特别友好的设计:异常处理,错误处理,没有泛型,不是完全的面向对象
# 优点:
语法简洁,性能高,对并发支持好(内置线程和协程池),跨平台编译
# python 1989年,java 1990

# c,go,python,java,js
-c,go,java:编译型---》编译过程
  -c---》编译后(在不同平台编译)----》可执行文件
  -go---》编译后---》可执行文件(跨平台编译)
       -java--》编译后--》字节码文件(.class,jar,war)--》运行在jvm之上
       -java:es,mycat:java写的,需要在不同平台安装该平台的jdk
      -jdk:java开发环境,jdk包含了jre和jvm java8以上
           -jre:java运行环境,
           -jvm:java虚拟机
           -javase:java基础,文件,并发。。。
           -javaee:java web开发
           -javame:手机开发(废弃了)
           -java是sun公司,后来被甲骨文收购了,收费
          -openjdk
               -oraclejdk
           
   -python,js:解释型
  -python 解释器之上---》(源码保密)打包成exe,第三方模块混淆,做到docker容器中
       -天然跨平台
       
       
# go的特性
跨平台的编译型语言
语法接近C语言
管道(channel),切片(slice),并发(routine)
有垃圾回收的机制
支持面向对象和面向过程的编程模式
# go发展
go1.5 以后自举,自己写自己
go 1.14 Go Module 包管理(go.mod文件)

最新:go 1.16

#Go语言应用
基本上所有的互联网公司都在用
b站:主站

# go语言的火
-性能高,语法简洁
   -docker,k8s火
   -区块链(第一款开源的区块链用go写的)
   

2 开发环境搭建

# python--->python解释器  3.10
# java----》jdk         java 15  
# go----》sdk(分平台)   1.16

# go windows的sdk:go1.16.5.windows-amd64.msi
# 安装(sdk)
一路下一步
   go version # 查看版本
   
# 安装ide(集成开发环境)
-Jetbrains公司的全家桶(注册码通用)
  -idea
       -pycharm
       -goland
       -webstorm
       -datagrip
   -vscode:微软出的(免费)
   -安卓开发:谷歌公司买了Jetbrains的授权,改了
   -goland一路下一步
# 永久免费试用
-IDE Eval Reset,具体操作可以参照百度

# go env   查看go的环境变量
-GOPATH=C:Usersoldboygo  # 如果不使用MODULE模式,所有的go代码必须放在这个路径下的src文件夹下
   -GOROOT=C:Program FilesGo # go的安装路径,如果这个路径有问题,内置模块用不了
-GO111MODULE=auto # 如果开启了module模式,代码可以放在任意路径下,但是项目路径下有一个go.mod的文件

   
# go get 包的路径及名字     下载第三方包
-go语言没有一个统一的包管理平台,大家都把包放在github上
   -go get github.com/go-sql-driver/mysql
  -如果没有使用go modul,下载完,源码会被放在GOPATH的src路径下
       -如果使用了go module模式,下载完,在go.mod文件中会有一条记录,这个项目依赖的这个包版本

 

3 第一个helloworld

// go文件必须声明包名,这个文件属于哪个包
package main   //s1.go这个文件属于main包
import "fmt"   //goland自动帮你导入,导入fmt包

//声明了一个main函数,
//go语言中整个程序的入口是main包下的main函数
func main() {
//函数体内容
fmt.Println("hello world")  //在控制台输出helloworld
}


//执行go代码----》编译(go build s1.go)---》可执行文件(执行)
//开发阶段,go run s1.go 编译并执行
//在编辑器中,直接右键运行即可

 

4 命名规范

// 变量定义规范
1 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
2 大写字母和小写字母是不同的:Name和name是两个不同的变量
3 关键字和保留字都不建议用作变量名

// 25个关键字
break      default       func     interface   select
case       defer         go       map         struct
chan       else          goto     package     switch
const      fallthrough   if       range       type
continue   for           import   return      var

// 37个保留字
内建常量: true false iota nil
内建类型:  int int8 int16 int32 int64
         uint uint8 uint16 uint32 uint64 uintptr
         float32 float64 complex128 complex64
         bool byte rune string error
内建函数: make len cap new append copy close delete
         complex real imag
         panic recover


//注意点:
-变量名字大小写有特殊函数,推荐变量命名用驼峰
-go文件名字推荐用下划线

 

5 变量

package main

import "fmt"

func main() {
//1 变量定义方式一(最完整方式)
//var 变量名 变量类型 = 变量值
//var a int=10   //在go中,变量定义不适用,报错,编译不通过
//fmt.Println(a)

//2 变量先声明,再赋值
//var a int
//a=100
////a="ssss"  //报错,类型是固定的
//fmt.Println(a)

//3 变量的类型推导
//var a =10  //虽然是推导的,但是类型固定了,就是int类型
//var b="lqz"
////a="dsafsdf"  //也报错
//fmt.Println(a)
//fmt.Println(b)

//4 简略声明
//a := 10 // :=  是一起的
//fmt.Println(a)
//fmt.Printf("%T", a) //打印a的类型

//5 三种变量定义方式的区别:最完整方式可以先定义再赋值,后面定义和赋值要一起
//var a1
//a1=100
//a2:
//a2=1000

//6 变量不能重复定义
//var a int=100
////var a=99
//b,a:=500,200  //这个a 是赋值
//fmt.Println(a)
//fmt.Println(b)

//7 同时定义多个变量
//var a,b,c int=10,20,30  //完整定义方法
//fmt.Println(a)
//fmt.Println(b)
//fmt.Println(c)

//var a,b,c =10,"lqz",99
////fmt.Println(a,b,c)
//fmt.Print(a)
//fmt.Print(b)
//fmt.Print(c)
//fmt.Printf("我的类型是:%T",b)  //string

//a,b,c:=10,"lqz",99
//fmt.Println(a,b,c)

//8 同时定义多个变量的其他写法  int类型的默认值是0  (了解)
var (
name   = "naveen"
age   int = 29
height int
)
fmt.Println(name,age,height)



}

 

6 类型

package main

import "fmt"

/********** 基本变量类型
//java: byte short int long float double
数字:
整形:有符号整形
int: 在32位机器表示int32,在64位机器表示int64
int8:用一个字节表示整数范围,   2的7次方-1   分正负,有0
int16:用2个字节表示整数范围   2的15次方-1
int32
int64
无符号整形(正整数)
uint
uint8:用一个字节表示整数范围,   2的8次方-1   有0
uint16:用2个字节表示整数范围   2的16次方-1
uint32
uint64
小数:浮点数(表示精度不一样)
float32
float64

复数类型(实部和虚部)complex64, complex128


byte uint8 的别名。
rune int32 的别名。


字符串:用双引号包裹的,反引号包裹,可以换行,单引号的不是字符串


布尔 true false
var b bool =true
*/

func main() {
// 整数类型
//var a int8= -128
//fmt.Println(a)
//var b uint8 = 255
//fmt.Println(b)

//var c float32=9.9999
//fmt.Println(c)

//var d complex64=7+8i
//fmt.Println(d)

//var s string="lqz"
//fmt.Printf("%T,值是:%v",s,s)

//var s1 ='l'   // int32,不是字符串
// var s2=`lqz
//   啊手动阀
//暗室逢灯
//   暗室逢灯`    //也表示字符串,跟双引号的区别在,可以换行
//   s3:="asdfa" +
//   "asdfa " +
//   "asdf" +
//   "asdf" +
//   "asdf"
// fmt.Printf("%T,值是:%v",s2,s2)
// fmt.Printf("%T,值是:%v",s3,s3)

var b bool =true
var b2 bool =false
fmt.Println(b)
fmt.Println(b2)
}

 

7 常量

package main

import (
"fmt"
)

/* 常量:只赋值一次,以后不能修改,配置文件用常量
const 常量名 常量类型 = 常量值
*/
const name string="lqz"

func main() {
//var name string="egon"
//fmt.Println(name)
//name="lqz"
////name="egon" //不能修改、
//const age uint8= 19
//fmt.Println(age)


var a =5
//fmt.Println(a)
fmt.Println(&a)
a=99
fmt.Println(&a)

}
原文地址:https://www.cnblogs.com/DEJAVU888/p/14894207.html