go学习part2

1.变量创建

package main 
import "fmt" 

func main() {
	//声明变量
	var age int
	//赋值
	age = 18
	//使用
	fmt.Println("age = ",age)
}

声明和赋值可以结合,变量不可重复定义,赋值的类型必须和声明的一致

2.变量使用

package main 
import "fmt" 

func main() {
	//1正常
	var age int = 18
	fmt.Println("age = ",age)
	//2不赋值,默认值
	var age2 int
	fmt.Println("age2 = ",age2)
	//3不写类型赋值,自动推断
	var age3 = "Tom"
	fmt.Println("age3 = ",age3)
	//4省略var的写法
	sex := "男"
	fmt.Println("sex = ",sex)

    fmt.Println("---------------")
	//多个变量
	var n1,n2,n3 int
	var m1,m2,m3 = 10,"abc",7.8

	p1,p2 := 6.9,100
}

结果

 多变量可以直接定义和赋值

2.全局变量

定义在函数外和c++一样

package main

import "fmt"

//全局变量
//一个一个定义
var q1 = 100

//多个定义
var (
	q2 = 200
	q3 = 300
)

func main() {

	fmt.Println("q1 = ", q1)
	fmt.Println("q2 = ", q2)
	fmt.Println("q3 = ", q3)
}

3.数据类型

 int+数字 其位数是确定的,int8就是8位

int和uint的范围根据系统位数而定

3.默认类型

整数为int

浮点为float64

4.字符串string

1)是常量不可修改

2)string拼接的时候 + 一定要留在行末尾,否则末尾添加分号会自动结束该行然后报错

3)字符的表现形式(普通格式+含有特殊转义字符格式)

 如果含有大量特殊转义字符为了方便需要使用反引号。在反引号中,换行可以直接在字符串中,而双引号中必须用转义方式

 4)其他类型转字符串的两种方式

 

package main
/*  
	其他类型转字符串
*/
import (
	"fmt"
	"strconv"
)

func main() {
	//Printf转字符串
	
	var m1 int = 19
	var  s1 string = fmt.Sprintf("%d",m1)   //转成string
	fmt.Printf("s1对应的类型: %T , s1 = %q \n", s1, s1)

	//其他类型也类似,只是转字符串的控制字符不同,%q比%v多一个""

	//-----------------------------------
	// strconv库(麻烦)
	var n1 = 18
	//把n1转成10进制,第一个参数要求传入int64类型,第二个是进制数,具体看api手册
	var s2 = strconv.FormatInt(int64(n1), 10)
	fmt.Printf("s2对应的类型: %T , s2 = %q \n", s2, s2)

	var n2 = 4.29
	//输入数据   表示格式(小数十进制)   保留9位小数   输入数据float64类型
	var s3 = strconv.FormatFloat(n2, 'f', 9, 64)
	fmt.Printf("s3对应的类型: %T , s3 = %q \n", s3, s3)

	var n3 = true
	var s4 string = strconv.FormatBool(n3) 
	fmt.Printf("s4对应的类型: %T , s4 = %q \n", s4, s4)

}

5)字符串转其他类型

package main

/*
	其他类型转字符串
*/
import (
	"fmt"
	"strconv"
)

func main() {

	//string->bool
	var s1 string = "true"
	var b bool
	//返回一个bool和一个error值
	b, _ = strconv.ParseBool(s1)
	fmt.Printf("b的类型是 %T,b=%v \n", b, b)

	//string-> int64
	var s2 string = "19"
	var num1 int64
	num1, _ = strconv.ParseInt(s2, 10, 64)
	fmt.Printf("num1的类型:%T,num1 = %v \n", num1, num1)

	//string-> float64
	var s3 string = "3.14"
	var f1 float64
	f1, _ = strconv.ParseFloat(s3, 64)
	fmt.Printf("f1的类型:%T,f1= %v \n", f1, f1)

}

如果string转var的类型不合适,会按默认值输出。

比如"abcd"转成bool会变成默认的false

5.指针

1)&符号取地址,*取值,类似cpp

package main

/*
	指针
*/
import (
	"fmt"
)

func main() {
	//与符号取地址,很像cpp
	var age int = 18
	fmt.Println(&age)
	var ptr *int = &age
	fmt.Println(ptr)

	//*表示指针取值
	fmt.Println("ptr指向的值:", *ptr)
	fmt.Printf("ptr指向的值:%v", *ptr)
}

2)一些指针的注意点

【1】指针赋值一定要赋指针类型,否则报错

【2】指针赋值对应类型一定要正确 

 ps:可以用一些标识符当成变量,但是不建议。

 变量长度无限制,但是尽量简短有意义

6.package的包名尽量和上级目录一致,不一致不会报错

1)main包下放了main函数,是程序执行入口,之前的目录可以加一级main文件夹比较合理

 2)命名不要和提供的库名冲突

 

3)变量名、函数名、常量名采用驼峰命名

!!!!重点 特性

3)变量名、函数名、常量名的首字母实现访问权限控制

如果变量首字母大写,那么包外可访问。

如果变量首字母小写,则仅限本包访问。

 把完整绝对路径项目前面到src的部分去掉,从这里算相对路径。

GOPATH作为系统环境变量需要配置,gopath就是D:\golang\goProject,然后到下面的src里

ps:windows系统复制路径之后要改反斜杠为斜杠

 ps:后续项目管理有更方便的gomod方式,这里先用传统gopath

代码例子:

package main

/*
gopath方法,不能开go mod
*/
import (
	"fmt"
	"gocode/testproject01/unit2/demo17/test"
)

/*  首字母实现访问权限控制 */

func main() {
	//fmt.Println(test.pwd)   //不可访问
	fmt.Println(test.StuNo)
}
package test

/*  首字母实现访问权限控制 */

var StuNo int = 20000   //包外可访问
var pwd string = "123456"   //包内可访问

7.关键字和预定义标识符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值