1. Mac下用VsCode配置Go语言环境
- 官网下载Go语言包 命令行中使用go version命令查看下载的go版本 使用go env查看go相关环境
- 进入VsCode下载Go拓展 新建.go文件 按推荐install相关依赖即可(使用手机热点或科学上网)
- 编辑好基础go文件 使用 go run … 运行
go run 时报错:package command-line-arguments is not a main package ?
package main //packge main即可 包名不一定和文件夹同名
import "fmt"
func main() {
fmt.Println("hi golang")
}
2. fmt包 Print相关 注释 定义变量
注意看Print Println Printf三者区别以及变量定义方法
package main
import "fmt"
func main() {
fmt.Println("hi golang","hi dou")
fmt.Print("hi golong","hi dou")
var a = "aaa"
fmt.Printf("%v",a)
var b int
b = 1
fmt.Printf("%v",b)
//短变量声明法 只能用于函数内部 不能作为全局变量
c := 5
fmt.Printf("%v",c)
//hi
/*
hi
hi
*/
}
hi golang hi dou
hi golonghi douaaa15%
go语言中变量声明必须使用
3. 变量常量命名规则
命名规范不赘述
注意大小写要区分开即可
定义变量基本方法看上节
以下是多变量声明 匿名变量
package main
import (
"fmt"
)
func main() {
fmt.Println("hi golang")
//一次声明多个变量
var(
a string
b int
)
a = "a"
b = 1
fmt.Println(a,b)
c,d := "s",1
fmt.Println(c,d)
//匿名变量不占命名空间 不占内存 不存在重复声明
user,_ := getUser()
fmt.Println(user)
const PI = 3.14
fmt.Println(PI)
//iota计数器只在常量里使用
const(
n1 = 100
n2
n3 = iota
_
n4
)
/*
100 100 2 4
*/
}
func getUser()(string,int){
return "zhangsan",10
}
go fmt … 格式化文档
4. 数据类型–整型
package main
import (
"fmt"
"unsafe"
)
func main() {
var num int8 = 10 //130? error
fmt.Printf("%T\n",num)
fmt.Println(unsafe.Sizeof(num))
/*
int8 -127 128 1Byte
uint8 0 255 1Byte
int16 -2^15 2^15-1 2Byte
*/
}
5. 基本数据类型–浮点型 布尔型
bool类型与0 1不能替换
package main
import (
"fmt"
"unsafe"
)
func main() {
var num int8 = 10 //130? error
fmt.Printf("%T\n",num)
fmt.Println(unsafe.Sizeof(num))
/*
int8 -127 128 1Byte
uint8 0 255 1Byte
int16 -2^15 2^15-1 2Byte
*/
var a float32 = 3.12 //4Byte float64 8Byte
fmt.Printf("%v -- %f",a,a)
//64位操作系统浮点数默认是float64
}
6. 基本数据类型–字符串类型
package main
import (
"fmt"
"strings"
)
func main() {
//多行字符串
s := `hi
golang`
fmt.Println(s)
str := "dou"
fmt.Println(len(str))
str1 := "123-456-789"
slice :=strings.Split(str1,"-")
fmt.Println(slice) //返回切片
str2 := strings.Join(slice,"*")
fmt.Println(str2)
//其他方法用时再查
}
7. 数据类型–byte rune
package main
import "fmt"
//字符属于int类型
func main(){
a := 'a'
fmt.Printf("%v -- %c",a,a) //97 a
//直接输出byte得码值 %c得字符
/*
uint8 即byte类型 代表了ACSII中的一个字符
rune 实际上是int32 代表一个UTF-8字符
一个汉字占3字节 一个字母占1字节
*/
s := "你好 golang"
for _,v := range s{
//range遍历当rune时才能用
fmt.Printf("%v %c\n",v,v)
}
s1 := "hi golang"
str1Arr := []byte(s1)
str1Arr[0] = 'g'
fmt.Println(string(str1Arr))
s2 := "你好 golang"
str2Arr := []rune(s2)
str2Arr[0] = '我'
fmt.Println(string(str2Arr))
}
8. 运算符以及位运算符
余数 = 被除数-(被除数/除数)❌除数
自增自减运算不能作为运算符 只能作为语句单列一行 无前++ - -
其他很简单 不赘述
9. if else for
package main
import "fmt"
func main() {
//打印100以内的偶数
for i:=1;i<=100;i++{
if i%2 ==0{
fmt.Printf("%d ",i)
}
}
fmt.Println()
//打印九九乘法表
for i:=1;i<=9;i++{
for j:=1;j<=i;j++{
fmt.Printf("%v*%v=%v\t",i,j,i*j)
}
fmt.Println()
}
}
10. for range switch case
var arr = []string{
"a","b","c"}
for k,v := range arr{
fmt.Println(k,v)
}
var n = 2
switch n {
case 1,2,3:
fmt.Println("g")
fallthrough
case 4,5,6:
fmt.Println("m")
break
default:
fmt.Println("error")
}
11. continue break goto
continue break较简单 不赘述
break也可以配合label使用
var age = 24
if age <= 30{
fmt.Println("a")
goto label
}
fmt.Println("b")
label:
fmt.Println("c")
12. 数组
package main
import "fmt"
func main() {
//各种初始化方法
var arr1 [3]int
var arr2 = [3]int{
1,2,3}
arr3 := [3]string{
"a","b","c"}
var arr4 = [...]int{
1,2,3,4,5,6}
arr5 := [...]int{
1:1,5:3}
fmt.Println(arr1,arr2,arr3,arr4,arr5)
//数组遍历
arr6 := [...]string{
"a","b","c"}
for k,v := range arr6{
fmt.Println(arr6[k],v)
}
//数组和基本数据类型都是值类型 其他为引用类型
//数组展示 值只是简单复制 不会互相影响
var arr7 = [...]int{
1,2,3}
arr8 := arr7
arr7[0] = 0
fmt.Println(arr7,arr8)
//切片演示 改变arr0 arr9随之改变 将arr9的地址指向arr0
var arr0 = []int{
1,2,3}
arr9 := arr0
arr0[0] = 0
fmt.Println(arr0,arr9)
//多维数组
var arrr = [3][2]int{
{
1,2},{
3,4},{
5,6}}
fmt.Println(arrr[2][1])
}